회사에서 유저가 사진이나 동영상을 업로드할 수 있는 갤러리를 만들어야 했다.
재직했던 회사는 완전 신생 스타트업으로 AWS를 적극적으로 사용해 프로젝트를 개발하고 있었다. 정보도 뭔가 많지 않았고, 개발하는데 쫌 고생했던 기억이...그거슨 내가 개초보라
먼저 기획의 요구사항을 보자
- 유저는 동영상을 업로드할 수 있다.
- 업로드된 동영상은 자동으로 스트리밍이 가능한 확장자로 convert되어야 한다.
- 유저는 동영상이 convert이 완료될 때 까지 기다리지 않아야 한다.
- 유저는 업로드된 동영상을 갤러리에서 볼 수 있어야 한다.
위 기획 사항을 토대로 개발을 진행했다. 뭐 누가 봐도 일반적인 갤러리 모듈아닌가. 그냥 가깝게 인스타그램이라 생각하면 된다. 그냥 인스타그램이 맞다
동영상 변환 실행 sequence:
각 구성체는 아래와 같은 기능을 수행한다.
주체 | 설명 |
---|---|
client | 프론트앤드이다. 유저쪽 UI를 통해 동영상 업로드의 요청을 받는 주체 |
partnerServer | 클라이언트의 요청을 비즈니스 로직으로 처리하는 주체 |
GalleryS3 | S3는 aws에서 제공하는 대용량 스토리지다. 우리는 원본 동영상 및 컴버팅된 동영상을 저장하는 장소로 사용한다. |
Aws_SNS | aws에서 제공하는 Simple Notification Service 이다. 동영상 변환 작업이 완료되면 해당 결과를 전달하는 역할을 한다. |
Aws_cloudWatch | 본인 계정의 aws에서 발생하는 일을 모두 기록해준는 서비스라 생각하면 된다. 여기서는 동영상이 변환이 완료되는 상태를 캐치하기 위해 사용한다. |
SwithVideoStateLambda | 비디오의 컨버팅 상태를 변경하기 위한 람다함수다. |
Aws_MediaConverter | 동영상을 변환해주는 AWS Elemental Media Convert서비스이다 |
galleryitemDB | 동영상 및 사진의 S3 위치, 상태 등 정보를 저장하는 DB다. |
동영상 하나를 변환하기 위해서 위와 같은 친구들이 모두 필요하다. 어휴 많다 많아;; 위에서 각각의 aws 기능을 잘 알고 있으면 이해가 편하겠지만.. 이번 포스팅에서는 각 역할에 대해 아주 간략하게 설명하면서 동영상 변환/업로드 라는 기능 구현 위주로 적어보겠다.
일단 aws에서 세팅을 해보자. 먼저 SNS와 cloudwatch를 세팅해보겠다. cloudWatch는 쉽게 말해 자신이 aws에서 어떠한 서비스와 요청을 보내면 그 결과가 어떻게 어떻든 모든걸 로그로 쌓아준다. 여기서 특정 로그가 발생하면 (여기서는 동영상 변환 완료 이벤트) 해당 로그에 맞는 동작을 수행하도록 등록할 수 있다. 우린 그걸 할 것이다.
SNS는 cloudWatch에 기록된 로그를 자신을 구독하고 있는 애들 한테 보내 준다. 내가 블로그에 글을 올리면 나를 구독하고 있는 사람들은 모두 그 글을 볼 수 있는 것과 같다. 당연하게도 구독하지 않고 있다면 글을 볼 수 없다.
이제 cloudWatch에서 동영상 변환이 완료 되는 이벤트가 발생하면 방금 만든 SNS가 해당 정보를 구독자들에게 퍼블리쉬 하도록 세팅해 보자.
다음 단계를 누르고 아까 만들어둔 SNS에게 해당 이벤트 패턴에 일치하는 이벤트 JSON을 전달하게 한다.
4단계, 5단계는 그냥 다음을 눌러서 생성하면 된다.
일단 초기 세팅은 끝냈다. 코드적으로 작성하는 부분은 다음 포스팅에 적어 보려한다. 생각보다 이미지가 많아 포스팅이 지져분...