프로젝트/Hongflix

[Hongflix] CDN을 활용한 성능 최적화

이덩우 2023. 8. 29. 00:40

S3 버킷에 스트리밍 파일을 보관해 클라이언트에게 전달할 수 있게 되었지만 몇 가지 생각해볼 점이 남아있었다.

  1. 동영상 저장소인 S3에 직접적으로 접근해 스트리밍 파일 및 썸네일 이미지를 받아온다 -> 원본 서버에 대한 보안이 취약해질 수 있다.
  2. 매번 오리진 서버에서 파일을 받아오므로, 고용량의 데이터가 오고가는 상황에서 비용을 무시할 수 없다.
  3. 오리진 서버와 지리적인 거리가 멀다면 데이터 전송시간이 길어져 클라이언트 측의 불만이 생길 수 있을 것이다.

위 고민들을 해결할 솔루션으로 CDN 서비스를 사용하기로 결정했다.

AWS CloudFront는 전 세계 곳곳에 엣지 로케이션(캐시 서버)을 배치해, 클라이언트가 어디에 있던 상관없이 정말 빠른 속도로 데이터를 받아볼 수 있도록 한다.

 

CloudFront를 사용해 오리진 서버를 S3의 Output 버킷으로 두고 스트리밍 비디오를 제공한다면

  1. 클라이언트는 이제 S3 버킷에 데이터를 직접 요청하지 않고 캐시 서버에 요청하게 된다. -> 원본 서버의 보안성을 향상시킬 수 있다.
  2. 캐싱된 데이터가 있다면 재사용하므로, 원본 서버에 접근 자체를 줄일 수 있다 -> 비용 문제를 줄일 수 있다.
  3. 전 세계에 분포되어있는 엣지 로케이션을 통해 지리적 한계를 넘어 빠른 속도로 컨텐츠를 제공할 수 있다. -> 속도 문제를 해결할 수 있다.

 


- 최종 서비스 흐름도

 

 


- CloudFront 배포

전 세계에 있는 엣지 로케이션에 나의 서비스를 올리기 위해서는 "배포"라는 단위를 생성해야한다.

원본 서버 연결

배포 생성에서, 우리가 사용할 S3 버킷을 원본으로 지정해주면 된다.

 

이후 도메인 연결, 캐시 정책 등 옵션을 선택할 수 있다. (기본 옵션으로 모두 선택)

 

배포 생성 완료

배포가 완료됐다. 

이제 원본 리소스에 직접 접근하지 않고, [cloudfront 도메인 + S3 리소스의 키] 조합으로 데이터를 요청한다.

실제로 성능이 얼마나 개선될지 테스트해보자.

 


- 성능 테스트

 

Miss From CloudFront

CloudFront 측으로 최초 캐싱되지 않은 데이터를 요청해보자.

Miss from cloudfront

 

응답 시간

응답 헤더에서 볼 수 있듯이, CloudFront에 캐싱된 데이터를 가져오지 않고 원본 서버(S3)에서 데이터를 받아온 상황이다.

평균적으로 45~50ms의 응답 시간을 보여주는 모습이다.

 

Hit From CloudFront

이제 강력 새로고침을 통해 캐싱된 데이터를 가져와보자.

Hit from cloudfront

 

응답 시간

응답 헤더의 X-Cache가 Hit from cloudfront로 바뀌었고

응답 시간은 평균적으로 15ms로, 이전과 비교했을 때 약 2~3배 가량 속도가 빨라진 모습이다.

 

* 현재는 100mb이하의 저용량 비디오 파일을 기준으로 테스트했다. 고용량 비디오 파일을 테스트할 여건이 되지못해 고용량 파일과 저용량 파일 간 응답 속도의 성능 개선 수치를 비교하진 못했다.

 


- 시연 동영상

 

성능 확인

 

 

실제 웹 사이트에 적용

 

 


- 배운 점 & 생각해볼 점

OTT 서비스를 제작해보며 CDN 서비스인 AWS CloudFront를 사용해봤다.

 

직접 프로젝트에서 보안, 성능 향상에 대한 고민을 하며 느낀 CDN 서비스의 장점은 아래와 같았다.

  1. 원본 서버에 대한 접근을 막는다 --> 보안적으로 좋다.
  2. 원본 서버에서 발생하는 Data Transfer 비용을 줄일 수 있다.
  3. 전 세계에 엣지 로케이션이 뻗어있다. --> 지리적인 한계를 넘을 수 있다. (속도 향상)

지금같은 스트리밍 제공 서비스에는 너무나 궁합이 잘 맞는다고 생각이 들었다.

하지만 기술에 장점만 있다고는 생각하지 않는다. 추가적으로 찾아본 단점은 아래와 같았다.

  1. 서비스 타겟팅 지역이 확실할 경우, 불필요하게 연결해야하는 네트워크 수가 많아져 오히려 데이터 전달 시간이 지연될 수 도 있다.
  2. 캐싱된 데이터를 세세하게 컨트롤하기 어렵다. 가령 캐싱된 데이터를 즉시 제거하고 싶으면 추가적인 과금을 통해 무효화 요청을 보내야 한다.
  3. 요금 정책, 적용되는 상황에 따라 더 많이 과금될 수 있다.

 

결론적으로 서비스하고자 하는 타겟팅 지역, 규모 등을 고려해 CDN을 도입할지 결정해야 할 것이다.

일반적으로는 CDN이 보안적, 성능적으로 이점이 커 도입하는 사례가 많다고 한다.