데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AWS MediaConvert 를 활용한 동영상 스트리밍 서비스 구축기 - 1편

      안전을최우선으로 25.04.09
      2,112 5 2
      DEVOTEE 요약
      AWS를 이용한 동영상 스트리밍 구축 사례를 공유합니다. 서비스를 통해 운영자는 특정 밋업(Room)에 동영상을 업로드하고 재생할 수 있으며, 이 과정에서 AWS의 MediaConvert를 활용하여 동영상 파일을 HLS로 변환했습니다. 이 시스템은 다양한 AWS 리소스(S3, Lambda 등)를 사용하며, 각 단계별로 상세한 작업 과정을 설명하고 있습니다.
      DEVOTEE 추천 블로그

      들어가며

      현재는 서비스 종료 되었지만 이프랜드 라는 서비스에서 AWS 로 동영상 스트리밍 서비스를 구축한 적이 있는데요.

      구축한 사례를 공유 하고자 합니다.


      동영상 스트리밍이 필요로 하는 기능은 크게 2가지 있었습니다.

      1. 운영자(관리자)가 밋업(Room) 에 특정 동영상을 업로드 및 플레이.

        • 해당 밋업 성향에 맞는 동영상(홍보영상등)을 반복적으로 플레이

        • 용량은 수백 메가 ~ 몇 기가까지 다양

      2. 유저가 자기의 게시물에 동영상 컨텐츠 업로드

      동영상 스트리밍을 위해서는 용량이 큰 동영상 파일을 HLS(HTTP Live Streaming) 로 변환 하는 작업이 제일 중요한데요.

      위 1번의 경우에는 AWS의 MediaConvert를 활용하여 변환 및 구축하였고, 2번의 경우에는 Azure 를 활용하여 FFmpeg를 azure function으로 감싸서 구축하였습니다.


      AWS의 MediaConvert는 비용이 꽤 비싼 반면, 쉽게 풍부한 옵션을 사용할수 있으며, FFMpeg으로 직접 HLS를 만드는 경우에는 비용은 공짜이나 옵션 사용 이나 실패 했을때의 처리등의 구현 난이도가 올라가게 됩니다.

      어떤걸 선택할지는 서비스별, 기능별로 판단이 필요합니다.


      본 포스팅에서는 AWS를 활용한 동영상 스트리밍 구축 경험을 공유 드리고자 합니다.

      이프랜드에서는 구축한 동영상 시스템을 Content Media Service(CMS) 라고 지칭했으며, 앞으로 이 포스팅에서도 CMS로 작성 하도록 하겠습니다.


      전체 시스템 구성도

      이프랜드 CMS의 전체 시스템 구성도 입니다.

      전체 시스템 구성도

      CMS Core 영역

      AWS 인프라 영역입니다. S3, Lambda, MediaConvert등 여러 AWS 리소스가 사용되고 있습니다.

      CMS Client 영역

      CMS Core 영역을 연동하여 실제로 동영상 서비스를 운영하는 영역입니다.


      단계별로 작업 진행 내용

      단계

      작업 명

      작업 내용

      1번

      동영상 업로드

      운영자가 어드민을 통해 동영상을 업로드 합니다.

      2번

      S3 저장

      영상이 S3에 저장됩니다.

      3번

      S3 업로드 감시

      S3 의 업로드를 모니터링 하는 lambda가 동작합니다.

      4번

      업로드 동영상 작업 의뢰

      lambda에서 업로드된 동영상을 mediaconvert에 작업을 요청합니다. 여기서 HLS 로 영상이 변환 됩니다.

      5번

      HLS 변환 완료

      완료된 HLS 영상과 썸네일을 S3에 저장합니다.

      6번

      작업 완료 감시

      eventbridge에서 영상 변환 작업을 감시합니다.

      7번

      작업 결과 메타 정보 전달

      변환 결과에 대한 메타 정보를 완료 감시 lambda에 전달 합니다.

      8번

      메타 정보 어드민 전달

      변환 결과에 대한 메타 정보를 서비스에 맞게 가공하여 CMS Client에 전달 합니다.

      9번

      DB 저장

      변환 결과 메타 정보를 DB에 저장합니다. 메타 정보에는 영상 URL (CDN 주소)등이 포함됩니다.

      10번

      영상 플레이

      사용자는 Cloud Front를 통해서 변환된 영상을 스트리밍으로 볼수 있습니다.

      다음으로는 시스템 구성도에 있는 부분들을 하나씩 보면서 구체적으로 어떻게 구축했는지 살펴보겠습니다.

      참고로 리소스 명은 이프랜드 서비스 기준으로 작성하였습니다.


      IAM

      역할 이름

      역할

      비고

      {환경}-ifland-Role-MediaConvert

      MediaConvert를 사용하기 위한 역할

      역할 생성후 "{환경}-ifland-Role-LambdaVod" 에 인라인 정책으로 추가할 예정

      {환경}-ifland-Role-LambdaVod

      lambda를 실행하기 위한 역할

      lambda 생성시 해당 역할 사용

      {환경}-ifland-Role-MediaConvert 역할 생성

      IAM → 역할 → 역할 생성



      서비스 또는 사용 사례에 MediaConvert 선택



      권한추가에 AmazonAPIGatewayInvokerFullAccess / AmazonS3FullAccess 가 자동으로 등록됨.



      역할 이름 입력 후 역할 생성


      {환경}-ifland-Role-LambdaVod 역할 생성

      IAM → 역할 → 역할 생성



      서비스 또는 사용 사례에 Lambda 선택



      권한 추가에서 AWSLambdaBasicExecutionRole 을 검색하여 체크

      AWSLambdaVPCAccessExecutionRole 도 검색해서 체크



      역할 이름 입력 후 생성


      정책 인라인 추가

      {환경}-ifland-Role-LambdaVod 역할 인라인에 {환경}-ifland-Role-MediaConvert 역할 추가


      {환경}-ifland-Role-MediaConvert 의 ARN 복사



      {환경}-ifland-Role-LambdaVod 에서 권한 → 권한추가 → 인라인 정책 생성



      JSON 으로 변경후 아래 JSON 파일 복사

      Resouce 부분에는 위에서 복사한 ARN 입력


      (복사할 JSON 파일)

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Action": [
                      "logs:CreateLogGroup",
                      "logs:CreateLogStream",
                      "logs:PutLogEvents"
                  ],
                  "Resource": "*",
                  "Effect": "Allow",
                  "Sid": "Logging"
              },
              {
                  "Action": [
                      "iam:PassRole"
                  ],
                  "Resource": [
                      "복사한 {환경}-ifland-Role-MediaConvert 의 ARN"
                  ],
                  "Effect": "Allow",
                  "Sid": "PassRole"
              },
              {
                  "Action": [
                      "mediaconvert:*"
                  ],
                  "Resource": [
                      "*"
                  ],
                  "Effect": "Allow",
                  "Sid": "MediaConvertService"
              },
              {
                  "Action": [
                      "s3:*"
                  ],
                  "Resource": [
                      "*"
                  ],
                  "Effect": "Allow",
                  "Sid": "S3Service"
              }
          ]
      }

      권한이 4개 부여된게 보여짐. 정책이름은 {환경}-ifland-policy-VodLambdaConnectMediaConvert 로 입력후 정책 생성



      1편을 마치며

      아직 갈길이 머네요. ㅠㅠ

      AWS 리소스가 여러가지 들어가고, 또한 IAM 등의 기본적으로 설정할 것들이 은근 꽤 많습니다.

      다음 포스팅에서는 위 IAM의 연장선인 "임시 자격 증명" 설정을 소개해 드리고, S3/lambda등등의 설정을 하나씩 살펴보겠습니다.

      최대한 빠르게 연재 할수 있도록 노력하겠습니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      안전을최우선으로 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기