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. 비디오 업로드:

- 클라이언트가 비디오 파일을 원본 저장소에 업로드
- 트랜스코딩 서버가 원본 영상을 가져와 다양한 포맷으로 인코딩
- 트랜스코딩 완료 시 병렬적으로:
- 변환된 영상을 트랜스코딩 비디오 저장소에 저장
- 트랜스코딩 완료 큐에 이벤트 기록
- 트랜스코딩이 끝난 비디오를 CDN에 업로드
- 완료 핸들러가 이벤트 데이터를 큐에서 꺼냄
- 완료 핸들러가 메타데이터 DB와 캐시를 갱신
- 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 스케줄러
- 자원 관리자
- 작업 실행 서버
- 임시 저장소
전처리기
- 비디오 분할
- 일부 오래된 모바일 기기나 브라우저는 비디오를 GOP(Group of Pictures)에 맞춰 나누는 기능을 지원하지 않음
- 이 경우, 전처리기가 GOP 정렬에 맞춰 비디오를 분할함
- 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 계층의 규모 확장성 확보 방안
- 데이터베이스 계층의 규모 확정성 확보 방안
- 라이브 스트리밍
- 비디오 삭제
'대규모 시스템 설계 기초' 카테고리의 다른 글
| 대규모 시스템 설계 기초 - 15장 (1) | 2025.04.26 |
|---|---|
| 대규모 시스템 설계 기초 - 13장 (1) | 2025.04.20 |
| 대규모 시스템 설계 기초 - 12장 (0) | 2025.04.20 |
| 대규모 시스템 설계 기초 - 11장 (1) | 2025.04.12 |
| 대규모 시스템 설계 기초 - 10장 (0) | 2025.04.12 |