MediaConvert를 통한 영상 스트리밍 시스템 구축 - 2 우리는 자선단체가 아니다!!

2025. 6. 3. 18:25·AWS

 

게시글을 읽기 전 아래의 게시글을 먼저 읽어주세요!

 

MediaConvert를 통한 영상 스트리밍 시스템 구축 - 1

Introduce프로젝트를 진행하던 중 카메라로 촬영되어 Synology NAS에 저장된 경기의 영상을 개발중인 플랫폼에서 시청해야 하는 기능이 필요했다. 해당 기능을 개발하며 조금은 다사다난했던 영상 스

tentenball.tistory.com

How to reduce costs?

충격적인 비용을 확인 후 MediaConvert의 변환 비용을 어떻게 줄일까 곰곰히 생각을 해보았다.

우리는 자선단체가 아니니까...

 

현재 프로젝트에서 사용하는 카메라는 1시간을 간격으로 영상을 촬영한다. 하지만 경기가 있는 시간대이든 없는 시간대이든 상관없이 영상을 촬영하고 이를 시놀로지에 저장한다.

현재의 설계대로라면 모든 영상이 S3에 업로드 될 것이고, 모든 영상이 MediaConvert를 통해 변환 작업을 수행할 것이다. MediaConvert는 사용량에 대비하여 요금이 발생하기 때문에 엄청난 요금폭탄이 쏟아질 것이다..

하지만 프로젝트에서 구축해둔 서버에서 경기가 있는 시간대의 영상만 S3에 업로드하도록 하면 MediaConvert에서도 경기가 있는 시간대의 영상만 HLS로 변환되므로 고정적으로 지출되는 비용을 줄일 수 있을 것 같다는 생각이 들었다.

진행시켜...영.차!

 

Synology Scheduling

방금 생각한 방법을 실현시키기 위해서는 스케줄링 작업이 필요했다. 직접 스케줄링 시스템을 구현할 생각에 머리가 꽤나 지끈거렸다.. 하지만 시놀로지와 S3를 연동시켜주는 기능도 있는데 스케줄링 기능도 있지 않을까...? 라는 희망을 가져보았다.

다행히 시놀로지의 제어판을 살펴보던 도중 시놀로지의 스케줄링 기능을 발견했다!!(시놀로지 만만세)

원하는 시간 간격으로 스케줄링을 실행할 수 있었고, 파이썬 스크립트를 통해서 작업을 구현 후 내가 구현한 파이썬 코드를 실행하도록 설정할 수 있었다.

스크립트의 흐름은 아래와 같다.(11시~12시에 촬영된 영상을 기준으로 설명)

1. 영상의 촬영 시작 시간을 확인한다.(11시)

2. 프로젝트의 서버에 요청을 보내 11시~12시 사이에 경기가 있는지 확인한다.

3. 경기가 있다면 S3와 동기화 되어있는 시놀리지 폴더로 영상을 이동한다.

 

이제 경기가 존재하는 시간의 영상만 S3에 업로드될 것이다. 이는 불필요한 MediaConvert의 사용을 막아주고, 조금 더 효율적으로 사용할 수 있게 된다.

아래는 파이썬 스크립트를 통한 스케줄링 작업이 적용된 설계도이다.

그리고 한달이 지난 후 MediaConvert의 요금을 확인해 보았더니 위의 사진처럼 MediaConvert의 비용을 무려 1/10이나 줄일 수 있었다....!!!!!!!!! (1달 기준)

Advancing

어느 정도 영상 스트리밍의 기본적인 설계는 완료되었다. 하지만 아직 몇가지 개선시켜야할 점들이 남아있었다.

1. AWS S3에 원본영상이 계속 저장되어 S3 버킷의 저장용량이 부족해질 염려가 있다.

2. 현재 HLS 변환 작업을 시작 후 변환 작업이 완료되기전 영상에 대한 정보를 DB에 저장한다.

위 두가지 문제를 하나씩 해결해보도록 하자.

AWS Lifecycle policy

1. AWS S3에 원본영상이 계속 저장되어 S3 버킷의 저장용량이 부족해질 염려가 있다.

1번 문제를 해결하는데에는 큰 어려움이 들지 않았다. S3에는 주기적으로 객체를 삭제하거나 자주 사용하지 않는 파일을 다른 스토리지로 옮기는 등 객체를 효율적으로 저장할 수 있는 AWS 수명 주기 규칙이라는 기능이 존재했다.

이 중 우리는 객체를 삭제하는 기능을 사용하였다. 프로젝트의 요구사항에서 영상을 14일까지 확인할 수 있도록 원했기 때문에, S3에서 14일 뒤에 영상이 삭제되도록 설정해 두었다. (물론 진짜 원본 영상은 시놀로지에 남아있다.)

 

AWS EventBridge

2. HLS 변환 작업을 시작 후 변환 작업이 완료되기전 영상에 대한 정보를 DB에 저장한다.

현재 S3에 원본 영상이 업로드되면 Put 이벤트를 감지하여 AWS Lambda함수가 실행된다. 이 하나의 함수에서 Mediaconvert의 작업을 시작시키고, 프로젝트의 서버와 통신을 하여 영상에 대한 정보를 DB에 저장시킨다.

 

위의 방법을 사용하게 되면 MediaConvert의 변환 작업 결과에 상관 없이 영상의 정보가 DB에 저장된다. 즉, 변환 작업이 실패해도 영상 정보가 DB에 저장되게 된다. 결국 S3에 없는 HLS의 정보를 조회하게 되고 스트리밍 시 오류가 발생하게 될 것이다.

 

이를 해결하기 위해 원래 하나였던 AWS Lambda 함수를 MediaConvert의 작업을 시작시키는 함수와 MediaConvert의 작업이 성공한 이후의 작업에 대한 함수로 분리하였다. 하지만 현재로써는 MediaConvert 작업이 성공했는지 확인할 방법이 없었다.

 

그러나!! NeverthelesS!! AWS에는 없는 것이 없었다.

 

해당 문제를 해결하기 위해 AWS의 EventBridge를 사용하였다.

- EventBridge는 이벤트를 사용하여 애플리케이션 구성 요소를 서로 연결하는 서버리스 서비스이다.

EventBridge에는 Event Bus라는 것이 있는데, 해당 기능을 통해 다양한 이벤트를 수신할 수 있고, 이를 원하는 목적지에 전달할 수 있다. 

 

자, 이제 MediaConvert를 EventBridge와 연동시켜보자.

MediaConvert에서는 작업의 성공 실패 여부에 따라 상태 이벤트를 반환한다.(COMPLETE, ERROR, CANCELLED) 이 중 COMPLETE 상태를 반환하는 이벤트를 Event bus의 규칙에 등록하였다.

이후 MediaConvert 작업 성공 후처리에 대한 함수의 트리거를 EventBridge로 변경해 주었다.

 

이제 MediaConvert의 작업이 성공하게 되면 EventBridge에서 해당 이벤트를 수신할 것이고, Lambda함수가 이를 감지하여 영상에 대한 정보를 저장할 것이다!!

 

아래는 FE의 관점까지 반영된 최종 설계이다.

'AWS' 카테고리의 다른 글

MediaConvert를 통한 영상 스트리밍 시스템 구축 - 1  (0) 2025.05.14
'AWS' 카테고리의 다른 글
  • MediaConvert를 통한 영상 스트리밍 시스템 구축 - 1
tentenball
tentenball
tentenball 님의 블로그 입니다.
  • tentenball
    tentenball 님의 블로그
    tentenball
  • 전체
    오늘
    어제
    • 전체 (9)
      • DevOps (1)
      • SpringBoot (4)
      • WEB (1)
      • FCM (0)
      • AWS (2)
      • TroubleShooting (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    트랜잭션
    transactional
    springboot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
tentenball
MediaConvert를 통한 영상 스트리밍 시스템 구축 - 2 우리는 자선단체가 아니다!!
상단으로

티스토리툴바