-
S3와 CloudFront로 동영상 서비스 제공하기AWS 2022. 1. 23. 17:32
1. 구조
프로젝트 요구사항으로 동영상 관리, 재생 서비스가 있었다.
앱으로 등록되는 상품의 상태를 영상에 담아 올리는데, 모두 AWS S3로 업로드가 된다. (S3는 파일 저장소)
S3에 영상이 업로드 되면 Lambda가 실행되고 AWS MediaConvert를 통해 HLS의 m3u8, ts 파일로 변환된다.
원본과 변환된 파일은 S3에 저장되고, 사용자가 영상을 원할 때는 Cloudfront를 통해 변환된 URL을 반환한다.
AWS S3 call마다 비용이 발생하기 때문에 처음 Cloudfront로 반환된 URL 정보를 DB에 저장해놓고 사용한다.
추가적으로, HLS는 크롬에서 재생이 안된다. 때문에 구글에서는 Video.js, Google Shaka Player, hls.js를
사용하라고 한다. 나는 Video.js를 써서 서비스를 했다.
구조도는 대략 이렇다.
여기까지가 끝이 아니다. 테스트해보니 또 크롬에서 CORS 오류가 발생하며 영상 재생에 실패했다.
찾아보니 S3, Cloudfront에 CORS 설정이 빠져있었다.
S3 버켓 -> 권한 -> CORS (Cross-Origin 리소스 공유) 영역에 아래 텍스트를 복붙, 저장해준다.
[ { "AllowedHeaders": [], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] } ]
2. HLS?
애플에서 만든 HTTP Live Streaming Protocol이다.
HTTP 메소드를 통해 파일을 전송한다. 네트워크의 상태에 따라 영상의 화질을 선택할 수 있고, 사용자가 영상을 청크 단위로 다운받을 수도 있다.
부분 재생 또한 가능하다. 때문에 사용자는 영상 전체를 다운 받으려 고생하지 않아도 된다.
만약 특정 시간부터 보고싶다면, 그 시간대의 파일부터 영상을 다운받아 본다고 생각하면된다.
HLS는 m3u8, ts 파일 두 가지로 구성되어 있다.
m3u8은 영상 재생을 위한 메타 데이터로 대역폭별 m3u8 파일 경로, ts 파일 경로가 담겨있다. 대역폭마다의 설정이
담겨있기 때문에 m3u8이 네트워크 상태에 따른 영상 화질 선택 기능이 가능하다.
ts 파일은 시간마다 쪼개져있는 실제 영상 데이터이다. ts 덕분에 부분 재생이 가능하다고 보면 된다.
3. CDN?
Content Delivey Network. 정적 파일 (이미지, 동영상, CSS, JS 등) 호스팅을 하는 서비스다.
구글이나 MS에서 무료로 CDN을 제공한다. 무료로 제공하는 점이 단점도 있다. 이건 뒤에서 얘기하겠다.
AWS Cloudfront도 CDN 서비스이다. 이번 동영상 기능은 전 세계로 서비스되는 부분이기 때문에 원활한 영상 재생을
위해서라도 꼭 필요하다. 머나먼 남아메리카 사용자가 서울에 위치한 IDC 서버에 요청을 한다면 꽤 긴 통신을 해야한다.
한국과는 달리 인터넷이 좋지 않은 국가도 많다. 때문에 AWS CDN을 태워 빠른 다운로드를 지원하도록 했다.
느린 서비스는 사용자 이탈률을 증가시키기 때문에, 속도는 항상 중요한 것 같다.
보안 측면에서도 이점을 가져간다. DDOs 공격을 받아도 실제 서비스 중인 회사 서버가 공격 받지 않고, CDN을 제공하는 서비스의 Edge가 공격 대상이 된다. 하나의 Edge에 과도한 트래픽이 몰리면, 근처의 Edge들에 분산 요청으로 과부하를 해결한다.
4. 느낀점
AWS 인프라는 사용만 제대로 할 줄 안다면 정말 강력한 것 같다. 그런데 단순히 서비스마다의 기능만 알게 아니라
정책 설정, 구조 설계에 실수를 해버리면 엄청난 과금이 수반되어 철저히 알아봐야 할 것 같다.
AWS 파트너 업체들의 컨설팅을 받더라도, 내가 속한 곳의 서비스이기 때문에 내 스스로가 손품팔아서 자세히
알고 있어야겠다.
'AWS' 카테고리의 다른 글
EC2에 springboot 배포 할 때 만나는 에러 (0) 2024.08.13 AWS 삽질 기록 (0) 2024.06.21 AWS EC2 인스턴스 생성 (Feat. Ubuntu) (0) 2021.02.11 AWS Practitioner 자격증 (0) 2021.02.09