인텐트 코퍼레이션
서버리스 기반의 영상 트랜스 코딩 서비스 구축법
<1> 인텐트 코퍼레이션의 브이 리뷰라는 동영상 리뷰 플랫폼
<2> 서버리스로 이미지 최적화 하자
<3> 영상 콘텐츠 최적화 - 실패 사례
<4> 영상 콘텐츠 최적화 - 성공 사례
<10> 개인 정리
<1> 인텐트 코퍼레이션의 브이 리뷰라는 동영상 리뷰 플랫폼
1
챗봇을 통해 고객의 동영상 리뷰를 수집
쇼핑몰에 리뷰를 노출하는 서비스
신뢰할 수 있는 리뷰를 빠르게 생산한다.
2
다루는 콘텐츠?
텍스트
이미지
영상
3
문제점?
이미지나 영상은 최적화를 하지 않으면, 사용자가 콘텐츠를 보기 위해 오래 기다려야 함.
원본 생성 후 최적화 이미지를 만듦
4
문제 1
불필요한 이미지 생성됨.
200*200 , 400*400 만드나 200*200만 사용됨
문제 2
데이터 사이즈에 비례하여 비용 발생.
5년이 지난 데이터도 비용 발생
5
온디맨드로 해결?
사용자가 요청한 시점에 콘텐츠를 생성
6
온디멘드의 문제? 속도와 안정성
캐싱되지 않은 처음 생성은 느림
이벤트 시에 안정성이 떨어질 수 있음.
7
속도와 안정성 문제는 서버리스로 해결
8
서버리스는 비용 효율적이다.
EC2에서 S3에서 데이터 다운로드할 때 비용 발생
람다는 주요 서버리스 서비스 간 데이터 전송 비용은 무료.
클라우드 프런트는 캐싱된 데이터의 저장비용이 아닌 전송 비용에 대해서만 비용이 발생.
한번 캐싱하면 저장비용이 발생하지 않는다.
<2> 서버리스로 이미지 최적화 하자
1
이미지가 생성되고 소비되는 과정?
최적화 이미지는 소비자가 요청하면 만들어 제공됨.
이미지는 최적화에 시간이 오래 걸리지 않음.
2
챗봇 -----------서버-----------S3 구성이다.
소비자--------상품 상세 페이지 접속 -----------클라우드 프런트-----APIGW------람다 --- S3 구성이다.
3
챗봇을 통해 서버에서 업로드된 이미지를 S3에 저장한다.
4
소비자가 상품 상세 페이지에 접속하면 , 리뷰 위젯은 섬네일에 최적화된 이미지를 요청한다.
클라우드 프런트에 요청, 캐시가 없으면 APIGW를 통해 람다는 원본 이미지를 받아 썸네일 이미지를 생성하고 캐싱한다.
<3> 영상 콘텐츠 최적화 - 실패 사례
1
영상은 이미지와 달리 최적화된 콘텐츠를 생성하는데 시간이 오래 걸리고, 파일이 크다.
APIGateway는 응답 데이터의 크기가 15MB를 넘으면 안 된다.
2
변경 전
사전에 최적화된 콘텐츠를 만들어 제공함.
모든 영상을 미리 만들어야 하는 문제
다양한 사이즈 필요시 추가 작업이 어려움
mp4로 제공하여 사용자 환경에 따라 부하가 걸림
3
변경 후 - 안 되는 구조로 실패.
사용자 요청 시 생성
HLS로 사용자 네트워크에 따라 자동으로 최적화된 영상 제공
S3 Object Lambda 서비스 활용함
4
S3 Object Lambda?
클라이언트가 S3에 오브젝트를 가져오는 요청을 하면 , 람다를 실행하여 새로울 파일을 제공할 수 있는 서비스.
비용 효율적
APIGateway와 달리 응답 용량 제한이 없다.
하지만 문제 발생???
5
POC 진행?
S3 Object Lambda 잘 됨
샘플 섬네일 이미지 생성과 mp4 트랙스 코딩 잘됨.
기존 S3 SDK 사용하면 잘 작동함.
6
CloudFront , HLS포맷으로 트랜스 코딩하면서 문제 발생???
문제점 1
S3 Object Lambda는 S3 Access Point를 통해서만 사용할 수 있다.
CloudFront에서 s3 콘텐츠를 직접 서빙할 때는 S3 Access Point를 지원하지 않음.
문제점 2
S3 Object Lambda는 한 번에 하나의 파일만 요청한다. HLS처럼 하나의 영상에 대해 여러 파일이 생성되어야 하는 경우는 안됨.
7
위 아키텍처는 안됨.
실패.
이유?
S3 GET 요청에 대해서만 지원한다.
S3 Objet Access Point를 통해 요청하는 경우만 지원한다.
<4> 영상 콘텐츠 최적화 - 성공 사례
HLS 특성을 이용해 문제 해결함.
HLS는 실패하더라도 다운로드 재시도함.
HLS는 3개의 파일만 있으면 플레이됨.
1
제일 먼저 플레이어에서 마스터 플레이 리스트를 요청하면,
2
람다는 트랜스 코딩 여부를 확인
3
트랜스 코딩된 파일이 없다면 SQS에 트랜스 코딩 요청을 한다.
4
마스터 플레이 리스트 파일을 생성하여 캐슁 한다.
5
SQS를 트리거로 받은 람다가 , 영상을 병렬적으로 트랜스 코딩하여 , 파일이 생성되자마자 S3에 업로드한다.
6
결과?
CloudFornt 비용 40% 절감
필요한 영상만 트랜스 코딩하여 S3 저장 용량의 60% 감소됨
사용자가 요구하는 부분에 대해 다양한 시도를 할 수 있는 환경이 구축되었다.
<10> 개인 정리
1
서버리스로 이미지 최적화 하자
2
S3 Object Lambda 서비스 활용하여 영상도 최적화 하자
https://brunch.co.kr/@topasvga/2439
감사합니다.