AWS를 활용한 스트리밍 동영상 서버 만들기

EuilimChoi·2023년 4월 2일
0

AWS-video-converting

목록 보기
1/1
post-thumbnail

회사에서 유저가 사진이나 동영상을 업로드할 수 있는 갤러리를 만들어야 했다.
재직했던 회사는 완전 신생 스타트업으로 AWS를 적극적으로 사용해 프로젝트를 개발하고 있었다. 정보도 뭔가 많지 않았고, 개발하는데 쫌 고생했던 기억이...그거슨 내가 개초보라

먼저 기획의 요구사항을 보자

  • 유저는 동영상을 업로드할 수 있다.
  • 업로드된 동영상은 자동으로 스트리밍이 가능한 확장자로 convert되어야 한다.
  • 유저는 동영상이 convert이 완료될 때 까지 기다리지 않아야 한다.
  • 유저는 업로드된 동영상을 갤러리에서 볼 수 있어야 한다.

위 기획 사항을 토대로 개발을 진행했다. 뭐 누가 봐도 일반적인 갤러리 모듈아닌가. 그냥 가깝게 인스타그램이라 생각하면 된다. 그냥 인스타그램이 맞다

동영상 변환 실행 sequence:

각 구성체는 아래와 같은 기능을 수행한다.

주체설명
client프론트앤드이다. 유저쪽 UI를 통해 동영상 업로드의 요청을 받는 주체
partnerServer클라이언트의 요청을 비즈니스 로직으로 처리하는 주체
GalleryS3S3는 aws에서 제공하는 대용량 스토리지다. 우리는 원본 동영상 및 컴버팅된 동영상을 저장하는 장소로 사용한다.
Aws_SNSaws에서 제공하는 Simple Notification Service 이다. 동영상 변환 작업이 완료되면 해당 결과를 전달하는 역할을 한다.
Aws_cloudWatch본인 계정의 aws에서 발생하는 일을 모두 기록해준는 서비스라 생각하면 된다. 여기서는 동영상이 변환이 완료되는 상태를 캐치하기 위해 사용한다.
SwithVideoStateLambda비디오의 컨버팅 상태를 변경하기 위한 람다함수다.
Aws_MediaConverter동영상을 변환해주는 AWS Elemental Media Convert서비스이다
galleryitemDB동영상 및 사진의 S3 위치, 상태 등 정보를 저장하는 DB다.

동영상 하나를 변환하기 위해서 위와 같은 친구들이 모두 필요하다. 어휴 많다 많아;; 위에서 각각의 aws 기능을 잘 알고 있으면 이해가 편하겠지만.. 이번 포스팅에서는 각 역할에 대해 아주 간략하게 설명하면서 동영상 변환/업로드 라는 기능 구현 위주로 적어보겠다.

일단 aws에서 세팅을 해보자. 먼저 SNS와 cloudwatch를 세팅해보겠다. cloudWatch는 쉽게 말해 자신이 aws에서 어떠한 서비스와 요청을 보내면 그 결과가 어떻게 어떻든 모든걸 로그로 쌓아준다. 여기서 특정 로그가 발생하면 (여기서는 동영상 변환 완료 이벤트) 해당 로그에 맞는 동작을 수행하도록 등록할 수 있다. 우린 그걸 할 것이다.
SNS는 cloudWatch에 기록된 로그를 자신을 구독하고 있는 애들 한테 보내 준다. 내가 블로그에 글을 올리면 나를 구독하고 있는 사람들은 모두 그 글을 볼 수 있는 것과 같다. 당연하게도 구독하지 않고 있다면 글을 볼 수 없다.

SNS생성

  • aws의 SNS로 이동한 후 좌측에서 주제를 선택하고 주제 생성을 클릭한다.
  • 적절한 이름을 넣고 다음 주제 생성 클릭.
  • 주제가 잘 생성된다.

CloudWatch Event 생성

이제 cloudWatch에서 동영상 변환이 완료 되는 이벤트가 발생하면 방금 만든 SNS가 해당 정보를 구독자들에게 퍼블리쉬 하도록 세팅해 보자.

  • aws의 cloudwatch로 이동한 후 좌측 메뉴에서 이벤트-> 규칙으로 이동한다.
  • 규칙 생성 버튼을 누른다 (주황색이든 하얀색이든 똑같다.)
    이후 단계 별로 설정을 진행한다.
  • 이름은 하는 일과 맞게 잘 알아볼 수 있게 적어준 후 다음을 클릭한다.
  • 이벤트 패턴은 "입력된 이벤트 패턴에 대해서 이후 로직을 수행하겠다."라고 aws에게 알려주는 것이다. aws에는 수 많은 이벤트 패턴이 존재하는데 어떤 이벤트인지를 명시해주는 것이다 라고 생각하면 된다.
  • 여기서는 aws.mediaconvert에서 발생한 이벤트 json에서 status가 "COMPLETE","ERROR"인 이벤트만 캐치한다.
  • 다음 단계를 누르고 아까 만들어둔 SNS에게 해당 이벤트 패턴에 일치하는 이벤트 JSON을 전달하게 한다.

  • 4단계, 5단계는 그냥 다음을 눌러서 생성하면 된다.

일단 초기 세팅은 끝냈다. 코드적으로 작성하는 부분은 다음 포스팅에 적어 보려한다. 생각보다 이미지가 많아 포스팅이 지져분...

profile
개발자 (초급)

0개의 댓글