brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jul 22. 2022

6탄-1. 서버리스 기반 온디멘드 영상 클립 서비스

인텐트 코퍼레이션

서버리스 기반의 영상 트랜스 코딩 서비스 구축법



<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


감사합니다.







브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari