본문 바로가기
대규모 시스템 설계 기초

대규모 시스템 설계 기초 - 14장

by cafecortado 2025. 4. 26.

14장. YouTube 시스템 설계

 

1단계: 문제 이해 및 설계 범위 확장

면접관과 대화를 통해 도출한 요구사항:

  • 주요 기능: 비디오 업로드 및 시청
  • 클라이언트: 모바일 앱, 웹 브라우저, 스마트 TV
  • DAU: 500만명
  • 평균 사용시간: 하루 30분
  • 다국어 지원
  • 다양한 비디오 해상도 및 포맷 지원
  • 비디오 데이터는 암호화 필요
  • 비디오 최대 크기: 1GB
  • 클라우드 서비스 활용 가능

설계할 시스템의 기능:

  • 빠른 비디오 업로드
  • 원활한 비디오 재생
  • 재생 품질 선택 가능
  • 낮은 인프라 비용
  • 고가용성, 규모 확장성, 안정성
  • 모바일 앱, 웹 브라우저, 스마트 TV

대략적 규모 추정:

  • 5백만 DAU
  • 사용자 1명이 하루 평균 5개 동영상 시청
  • 10%의 사용자가 하루 1개 동영상 업로드
  • 평균 동영상 크기 300MB
  • 하루 저장공간 필요량: 5백만 * 10% * 300MB = 150TB
  • CDN 비용 (Amazon CloudFront 기준, $0.02/GB):
    • 하루 트래픽: 5백만 * 5개 * 0.3GB = 7,500,000GB
    • 하루 비용: 7,500,000 * $0.02 = $150,000
  • CDN 비용이 막대하므로 비용 최적화 방안 필요

 

 

2단계: 개략적 설계안 제시 및 동의 구하기

개략적 시스템 컴포넌트:

  • 클라이언트: 컴퓨터, 스마트폰, 스마트TV 등 다양한 디바이스
  • CDN: 비디오 재생 요청 시 가까운 CDN 서버에서 데이터 제공
  • API 서버: 로그인, 피드 추천, 업로드 URL 생성, 메타데이터 저장/갱신 등 비디오 스트리밍을 제외한 모든 요청 처리

 

다음 두 영역을 면접관이 요청하였다고 가정:

  • 비디오 업로드 절차
  • 비디오 스트리밍 절차

 

비디오 업로드 절차

 

컴포넌트:

  • 사용자: 컴퓨터, 모바일 폰, 스마트TV 등을 통해 유튜브를 시청하는 이용자
  • 로드밸런서: API 서버로 요청 분산
  • API 서버: 비디오 스트리밍을 제회한 모든 요청을 처리
  • 메타데이터 DB:
    • 비디오의 메타데이터(URL, 사이즈, 포맷, 사용자 정보 등)를 저장
    • 샤딩, 다중화 등을 통해 고가용성 확보
  • 메타데이터 캐시: 성능 향상을 위해 메타데이터를 캐싱
  • 원본 저장소: 업로드된 원본 비디오를 저장하는 대형 이진 파일 저장소(BLOB)
  • 트랜스코딩 서버: 다양한 디바이스와 네트워크 환경에 맞게 영상 포맷 변환
  • 트랜스코딩 비디오 저장소: 트랜스코딩된 영상을 저장하는 BLOB 저장소
  • CDN (콘텐츠 전송 네트워크): 사용자 근처에서 영상을 빠르게 스트리밍
  • 트랜스코딩 완료 큐: 트랜스코딩 완료 이벤트를 기록하는 큐
  • 트랜스코딩 완료 핸들러: 큐를 모니터링하여 이벤트를 꺼내 메타데이터 DB와 캐시를 업데이트

다음의 두 프로세스는 병렬적으로 수행:

    a.비디오 업로드

    b. 비디오 메타 데이터 갱신

 

a. 비디오 업로드:

  1. 클라이언트가 비디오 파일을 원본 저장소에 업로드
  2. 트랜스코딩 서버가 원본 영상을 가져와 다양한 포맷으로 인코딩
  3. 트랜스코딩 완료 시 병렬적으로:
    • 변환된 영상을 트랜스코딩 비디오 저장소에 저장
    • 트랜스코딩 완료 큐에 이벤트 기록
      • 트랜스코딩이 끝난 비디오를 CDN에 업로드
      • 완료 핸들러가 이벤트 데이터를 큐에서 꺼냄
      • 완료 핸들러가 메타데이터 DB와 캐시를 갱신
  4. API 서버가 클라이언트에게 업로드 완료 응답

 

b. 메타데이터 갱신:

  • 비디오 파일 업로드와 동시에 메타데이터 갱신 요청을 API 서버에 보냄
  • 메타데이터 등록 요청은 파일 이름, 사이즈, 포맷 등 정보를 포함
  • API 서버는 메타데이터 캐시, DB를 업데이트

 

비디오 스트리밍 절차

스트리밍 프로토콜마다 지원하는 비디오 인코딩과 플레이어가 다름

비디오는 CDN에서 바로 스트리밍되므로 전송 지연이 낮음

 

스트리밍 세부 전략:

  • 어댑티브 스트리밍(Adaptive Streaming)
    • 네트워크 상태에 따라 자동으로 화질을 조정
    • HLS, MPEG-DASH 같은 프로토콜 사용
  • 구간 다운로드(Segmented Download)
    • 동영상을 여러 작은 조각으로 나눔
    • 사용자가 영상 중간부터 재생하거나 빠르게 탐색할 수 있음

 

 

3단계: 상세 설계

비디오 트랜스코딩

비디오 트랜스코딩이 중요한 이유:

  • 대용량 저장 공간 절약: 원본 고화질 비디오는 매우 큰 저장공간을 차지
  • 다양한 디바이스 호환성: 다양한 기기/브라우저는 특정 포맷만 지원
  • 네트워크 대역폭 최적화: 사용자의 네트워크 속도에 따라 고화질 또는 저화질 버전을 스트리밍
  • 모바일 환경 대응: 네트워크 상태가 불안정할 때 원활한 비디오 재생을 위해 화질 자동 전환 필요

트랜스코딩 구성 요소:

  • 컨테이너: 비디오, 오디오, 메타데이터를 묶는 포맷 (.avi, .mov, .mp4 등)
  • 코덱: 비디오 압축 및 압축 해제 알고리즘 (주요 코덱: H.264, VP9, HEVC)

 

유향 비순환 그래프(DAG)모델

  • 문제: 트랜스코딩은 연산량이 많고 복잡하므로 유연성과 병렬성이 필요
  • 해결책: 작업(Task)을 여러 단계로 나누어 순차/병렬로 실행 가능한 DAG 모델 도입

예시:

  • 원본 데이터는 비디오, 오디오, 메타데이터로 나누어서 처리됨
  • 비디오 부분에 적용되는 작업:
    • 검사: 비디오 품질 검사
    • 비디오 인코딩: 다양한 해상도, 코덱, 비트레이트 조합으로 인코딩
    • 섬네일: 사용자가 업로드한 이미지나 비디오에서 자동 추출된 이미지로 섬네일 생성
    • 워터마크: 비디오에 대한 식별정보를 이미지 위에 오버레이로 띄움

 

비디오 트랜스코딩 아키텍처

클라우드 서비스를 활용하여 비디오 트랜스코딩 파이프라인 구성

주요 컴포넌트:

  • 전처리기
  • DAG 스케줄러
  • 자원 관리자
  • 작업 실행 서버
  • 임시 저장소

 

전처리기

  1. 비디오 분할
    • 일부 오래된 모바일 기기나 브라우저는 비디오를 GOP(Group of Pictures)에 맞춰 나누는 기능을 지원하지 않음
    • 이 경우, 전처리기가 GOP 정렬에 맞춰 비디오를 분할함
  2. DAG 생성
    • 전처리기는 클라이언트 프로그래머들이 작성한 설정 파일을 바탕으로 DAG 구조를 생성
    • DAG는 어떤 작업이 어떤 작업 다음에 실행되어야 하는지를 정의

 

    3. 데이터 캐시

    • 전처리기는 분할된 비디오 데이터(GOP)와 메타데이터를 임시 저장소에 저장
    • 이 임시 저장소는 비디오 인코딩 실패 시 이 데이터를 다시 활용하여 재시도

 

DAG 스케줄러

DAG 스케줄러는 DAG 그래프를 몇 개 단계로 분할 후, 각각을 자원 관리자의 작업 큐에 집어 넣음

첫 번째 단계: 비디오, 오디오, 메타데이터 분리

두 번째 단계: 해당 비디오 파일을 인코딩하고 섬네일 추출하고 오디오 파일 인코딩

 

자원 관리자

자원 배분을 효과적으로 수행하는 역할 담당

구성 요소:

  • 작업 큐: 수행해야 할 작업들을 저장하는 우선순위 큐
  • 작업 서버 큐: 사용 가능한 작업 서버의 정보를 저장하는 우선순위 큐
  • 실행 큐: 현재 실행 중인 작업과 해당 작업을 수행 중인 작업 서버 정보를 저장하는 큐
  • 작업 스케줄러: 최적의 작업/서버 조합을 골라, 해당 작업 서버가 작업을 수행하도록 지시

작업 관리자 동작:

  • 작업 큐에서 가장 높은 우선순위의 작업을 꺼냄
  • 작업 서버 큐에서 가장 적합한 작업자를 선택
  • 선택한 작업자에게 작업을 할당
  • 해당 작업이 어떤 서버에 할당되었는지에 관한 정보를 실행 큐에 넣음
  • 작업이 완료되면 실행 큐에서 해당 작업 정보를 제거

 

작업 서버

 

작업 서버는 DAG에서 정의된 각 작업을 수행

 

 

임시 저장소

임시 저장소는 비디오 처리 중간 데이터를 보관

데이터 유형에 따라 다른 저장소 사용:

  • 메타데이터는 메모리 캐시
  • 비디오 및 오디오 데이터는 BLOB 저장소

비디오 인코딩 완료 후, 해당 데이터는 삭제하여 저장소 공간 확보

 

인코딩된 비디오

비디오 인코딩 과정이 끝나면 최종적으로 출력되는 비디오 파일

 

시스템 최적화

속도 최적화: 비디오 병렬 업로드

하나의 비디오를 작은 GOP로 분할하여 병렬적으로 업로드

일부가 실패해도 빠르게 업로드를 재개

 

속도 최적화: 업로드 센터를 사용자 근거리에 지정

업로드 속도를 올리기 위해 업로드 센터를 여러 곳에 둠

 

속도 최적화: 모든 절차를 병렬화

각 작업 사이에 메시지 큐를 도입해서 느슨하게 결합된 시스템을 만들어 병렬성을 높임

 

안정성 최적화: 미리 사인된 업로드 URL

인가받은 사용자만이 올바른 장소에 비디오를 업로드할 수 있도록 미리 사인된 업로드를 URL을 이용

 

안정성 최적화: 비디오 보호

크리에이터의 저작권을 위해 다음과 같은 선택지 중 가운데 하나를 채택:

  • DRM(Digital RIghts Management)
  • AES 암호화: 비디오를 암호화하고 인가된 사용자만 암호화된 비디오를 복호화되며 재생할 수 있음
  • 워터마크: 비디오에 이미지 오버레이를 올림

 

비용 최적화

CDN은 세계 어디서도 끊김 없이 빠르게 비디오를 시청할 수 있도록 해주지만, 비용이 매우 비쌈

CDN 비용 최적화를 하기 위해 인기 비디오는 CDN을 통해 재생시키고, 다른 비디오는 서버를 통해 재생

 

오류 처리

오류 유형에 따른 처리 방법:

  • 회복 가능 오류: 회복 가능한 오류면 몇 번 재시도하고, 계속 실패한다면 DLQ(Dead Letter Queue)에 넣고 클라이언트에게 적절한 오류 코드를 반환
  • 회복 불가능 오류: 회복이 불가능한 오류는 해당 작업을 중단하고 클라이언트에게 적절한 오류 코드를 반환

 

 

4단계: 마무리

추가 논의 사항:

  • API 계층의 규모 확장성 확보 방안
  • 데이터베이스 계층의 규모 확정성 확보 방안
  • 라이브 스트리밍
  • 비디오 삭제