시스템 디자인
사례 연구 / 동영상 플랫폼
학습 로드맵
CASE · ADVANCED읽기 27분검토일 2026-08-29

동영상 플랫폼
설계

업로드 진행률이 끝났다고 바로 재생 가능한 것은 아닙니다. 검사·인코딩·segment·manifest가 검증된 버전만 공개하고, 불완전한 출력은 이전 정상 버전과 섞이지 않게 합니다.

개념 이해업로드·변환재생·권한면접 답변진도 저장
30초 핵심 요약

scan·probe 뒤 필수 ladder의 segment·checksum·manifest를 검증한 version만 원자적으로 publish합니다. 새 출력이 빠졌다면 이전 정상 version을 계속 재생하고 CDN은 게시 결정을 하지 않는 전송 계층으로 둡니다.

ingest 경계direct upload + scan
delivery 경계ABR manifest + CDN
정확성 경계version + idempotent event
DESIGN DECISION · 설계 판단

불완전한 화질 묶음이 공개되지 않도록 게시 경계를 어디에 둘 것인가?

예시 업로드 20만 videos/day 설계 가정
예시 원본 유입 160TB/day 계산 결과
예시 재생 1.2억 plays/day 계산 결과
최종 선택

불변 attempt 출력 + 검증된 manifest pointer 전환

재개 업로드 뒤 scan·probe를 통과한 원본만 변환합니다. 필수 rendition의 segment·checksum·재생 probe가 모두 통과할 때만 published_version을 원자적으로 바꾸고, 실패하면 이전 version을 계속 제공합니다.

선택 이유

  • worker 성공과 사용자 재생 가능 상태를 분리합니다.
  • 부분 출력과 재시도 결과를 attempt prefix로 격리할 수 있습니다.
  • segment 404가 늘면 metadata pointer만 이전 version으로 되돌릴 수 있습니다.
포기한 대안

각 rendition이 끝나는 즉시 같은 manifest에 추가

늦거나 실패한 작업이 재생 중인 manifest를 부분 상태로 만들고, 어떤 segment 묶음이 검증됐는지 추적하기 어렵습니다.

감수한 단점

  • 필수 ladder 검증만큼 게시 지연이 늘어납니다.
  • attempt 출력과 이전 version의 수명주기·정리 비용이 생깁니다.
  • 기기별 codec·DRM 조합을 publish probe에 반영해야 합니다.
01 · REQUIREMENTS

파일 도착과 재생 가능은 다른 완료 상태다

# 요구사항

업로더가 보는 진행률, 운영자가 보는 검사·job 상태, 시청자가 보는 실제 재생 가능 여부를 하나의 boolean으로 합치지 않습니다. metadata와 rights policy가 정본이고 rendition·manifest·cache는 versioned 파생물입니다.

U/P재개 가능한 업로드

파일 바이트는 API 서버를 우회하고, 세션·part 범위·checksum·만료만 control plane이 관리합니다.

SAFE검사 전 격리

raw object는 public read 없이 quarantine에 두고, virus scan·media probe가 pass하기 전 변환하지 않습니다.

ABR적응형 재생

플레이어가 bandwidth와 buffer에 맞는 rendition을 고를 수 있도록 manifest·segment를 제공합니다.

VIEW설명 가능한 집계

재시도된 heartbeat가 공개 조회수를 부풀리지 않도록 session/event key로 중복을 제거합니다.

02 · HIGH-LEVEL DESIGN

control, media, analytics plane을 분리한다

# 아키텍처

업로드와 playback은 byte-heavy media plane에, video state·권한은 control plane에, event는 append-only analytics plane에 둡니다. CDN cache는 빠른 전달 장치이지 공개 권한의 정본이 아닙니다.

VOD ingest → package → playback → aggregate SVG DIAGRAM · permission is checked before manifest delivery
동영상 플랫폼의 업로드와 재생 아키텍처업로더는 영상 API에서 권한을 얻어 격리 객체 저장소에 파일을 올린다. 검사와 트랜스코딩 작업이 rendition과 manifest를 만들고 CDN이 시청자에게 전달한다. 재생 이벤트는 별도 로그와 집계 경로로 흐른다.UPLOAD · validation and transcodingPLAYBACK · authorization and edge deliveryUploaderresumable partsVideo APIsession · policyQuarantine storageobject + checksumScan · Probefail closedJob queueretryTranscoderrenditions · captionsPublisherversioned manifestCDN + OriginHLS / DASH segmentsPlayback collectorsession · heartbeatEvent logreplayDedupe + aggregateviews · analyticsmetadata·rights are the source of truth; media objects and counters are versioned derivatives.
출처 사실: RFC 8216은 master playlist가 서로 다른 비트레이트·해상도의 variant stream을 지정할 수 있다고 정의합니다. 이 그림의 queue, scan 단계, output version과 세 plane 분리는 제품 구현을 위한 설계 가정입니다.
03 · UPLOAD TO PUBLISH

raw object를 검사한 뒤 비동기 job으로 포장한다

# 흐름
01세션 발급

owner quota·크기·MIME 범위를 확인하고 signed part URL을 발급합니다.

02direct upload

storage가 확정한 range부터 네트워크 단절 뒤 다시 전송합니다.

03scan + probe

checksum, 바이러스, container, decode 한계를 통과한 입력만 허용합니다.

04job enqueue

profile version을 넣어 durable queue에 기록하고 같은 job은 멱등 처리합니다.

05package

rendition·thumbnail·caption과 HLS/DASH manifest를 attempt prefix에 작성합니다.

06atomic publish

최소 ladder의 객체 검증 뒤에만 published version을 새 manifest로 교체합니다.

04 · CAPACITY AND DELIVERY

평균 QPS보다 byte와 hot video를 먼저 계산한다

# 규모·전송

다음은 학습용 가정입니다. DAU 2,000만, 하루 20만 업로드, 원본 평균 800MB면 raw ingest는 약 160TB/day입니다. 시청 수가 1.2억 plays/day라도 hot video의 동시 segment 요청은 평균으로 가려집니다.

평면병목 단위확장 단위우선 관측
Uploadbytes/s, 열린 세션, multipart retryregion endpoint, object key prefix, owner quotacompleted bytes, resume, checksum mismatch
Transcode분·해상도·codec·worker timeprofile/priority queue, CPU·GPU poololdest job age, attempt, validation failure
Playbacksegment bytes/s, cache miss, hot keyCDN POP, origin shield, multi-originstartup, rebuffer, hit ratio, origin 5xx
Analyticsevents/s, late data, unique key statetopic partition, window aggregate, archive tieringest lag, duplicate ratio, watermark delay
05 · FAILURE MODES

partial publish와 권한 철회를 별도 장애로 다룬다

# 장애 8가지
업로드 단절·중복 완료

클라이언트는 성공을 보았지만 object가 불완전하거나 complete가 여러 번 올 수 있습니다.

대응 · storage-confirmed range, checksum, idempotent complete, 만료 quarantine lifecycle.
!악성·비정상 미디어

parser 취약 입력이나 압축 폭탄이 scan·transcode worker의 자원을 독점할 수 있습니다.

대응 · sandbox, decode·시간·메모리 limit, fail-closed verdict, audit.
job queue 적체

4K job·hot creator가 일반 영상의 publish 시간을 밀어냅니다.

대응 · profile/tenant queue 분리, bounded retry, oldest age alert, DLQ.
×manifest와 segment 불일치

manifest가 먼저 공개되면 player는 404나 decode error로 시작에 실패합니다.

대응 · output audit 후 atomic publish, 이전 version 유지, rollback drill.
CDN miss·origin 장애

POP 장애나 cache expiry가 한 origin에 burst를 몰고 rebuffering을 만듭니다.

대응 · origin shield/failover, coalescing, hot-key rate limit, synthetic playback.
조회 이벤트 중복·지연

mobile retry와 collector 재전송이 집계를 부풀리거나 watermark를 늦춥니다.

대응 · durable log, event/session key dedupe, delayed finalization, replay.
저작권·privacy 철회

오래 유효한 URL과 stale edge cache가 이미 막아야 할 재생을 허용할 수 있습니다.

대응 · fail-closed playback auth, 짧은 token TTL, purge 추적, revoke-to-deny SLO.
hot video 폭주

한 video key가 origin bandwidth, event partition, metadata cache를 동시에 압박합니다.

대응 · pre-warm, per-key quota, cache steering, dedicated aggregate partition.
06 · SECURITY · OPERATIONS · COST

권한, 지표, lifecycle을 media pipeline 밖에서 운영한다

# 운영
보안·개인정보

upload URL을 owner·prefix·크기·만료에 묶고 raw bucket은 public read를 막습니다. playback은 visibility·entitlement·rights hold를 매번 확인하며 token·PII는 trace에서 제거합니다.

revoke_to_deny_seconds
관측 가능성

video_id, version, job ID, play session을 연결해 upload 완료부터 첫 재생까지 추적합니다. rebuffer·cache hit·origin 5xx와 job backlog를 user ID 없이 봅니다.

transcode_queue_oldest_seconds
비용·lifecycle

raw 원본, rendition ladder, GPU/CPU 변환, CDN egress, raw heartbeat 보관이 비용입니다. object TTL·noncurrent version·lifecycle tier로 복구 기간과 비용을 함께 정합니다.

origin_egress_bytes_total
07 · TRADEOFFS

전송 프로토콜과 집계 정확도를 제품 계약으로 고른다

# 대안

full ladder를 기다리면 게시가 늦고 최소 ladder부터 열면 version과 QA 경우의 수가 늘어납니다. 지원 기기·creator 대기 시간·재생 SLA를 기준으로 선택하되 검증되지 않은 묶음은 공개하지 않습니다.

선택강점비용·제약판단 기준
HLS onlyprotocol·QA surface가 작음DASH 요구 client와의 호환성 검토 필요MVP의 지원 기기와 player
HLS + DASHprotocol 선택성, 폭넓은 생태계packager·manifest·DRM·관측 매트릭스 증가device/partner 요구와 운영 역량
full ladder before publish재생 선택 폭이 넓고 버전 단순게시 지연·변환 비용 증가품질 SLA가 publish SLA보다 우선일 때
minimum ladder first빠른 게시와 초기 비용 절약점진적 rendition·version 운영 필요creator UX와 긴 원본 비율
exact unique count정산·감사에 설명 가능identity/privacy/state 비용 큼billing-grade 경로
near-real-time estimate빠른 인기 신호와 낮은 비용final count와 차이·재계산 필요공개 조회수·추천 feature
INTERVIEW DRILL · 7분 구조07:00
“YouTube 같은 VOD 플랫폼을 설계해 보세요. 사용자는 긴 영상을 재개 가능하게 올리고, 여러 품질로 전 세계에 재생하며, 조회수와 저작권 철회를 안전하게 처리해야 합니다.”
VOD·publish 정의 확인upload bytes와 plays 분리quarantine + scanidempotent transcode jobHLS/DASH version publishauth → CDN → originevent dedupe·aggregaterevoke·partial output drill
  1. 먼저 VOD/live, public/private/paid, 게시 완료의 정의, 처리 지연과 조회수의 정확도를 질문한다.
  2. 원본 byte·업로드 concurrency·변환 시간과 재생 segment egress·hot video를 따로 추정한다.
  3. metadata/rights/job ledger와 rendition/manifest/cache/aggregate의 정본·파생 경계를 말한다.
  4. resumable direct upload → scan/probe → durable job → validate → atomic publish를 설명한다.
  5. 권한 확인 뒤 CDN에 전달하고, queue lag·partial publish·CDN/origin·중복 event·rights revoke의 지표와 rollback을 마무리한다.
답변 구조 보기 5단계
  1. 범위를 VOD 업로드·변환·권한 재생으로 고정하고 live와 광고 입찰은 분리한다.
  2. direct resumable upload 뒤 scan·probe를 통과한 원본만 idempotent transcode job으로 보낸다.
  3. 최소 ladder의 segment·checksum·manifest를 검증한 뒤 published_version을 원자적으로 바꾼다.
  4. CDN은 전송을 가속하지만 playback authorization과 권리 철회의 정본은 아니다.
  5. queue age, segment 404, startup failure, purge age를 같은 release version으로 추적한다. 이번 선택: 불변 attempt 출력과 원자적 manifest pointer를 사용해 불완전한 ladder가 공개되는 일을 막는다. 깨지는 신호: publish 직후 segment 404·startup failure가 증가하거나 rights revoke 뒤 새 토큰이 계속 발급된다. 다음 검증: 4초 segment 기준의 실제 기기별 startup·rebuffering과 최소 ladder 게시 SLA를 부하 시험으로 조정한다.
INTERVIEW ↔ PRACTICE · 면접과 실무의 차이

manifest 공개 경계를 설명하고 부분 변환·rollback을 운영하기

INTERVIEW · 면접

업로드 완료가 아니라 재생 가능한 version이 언제 공개되는지를 답합니다.

  • direct upload와 quarantine 검사 경계를 설명합니다.
  • 필수 ladder·segment 검증 뒤 pointer를 바꾸는 순서를 말합니다.
  • CDN은 전송 계층이며 권한 정본이 아니라고 구분합니다.
PRACTICE · 실무

publish version별 segment 완결성과 재생 실패를 대사합니다.

  • queue age와 attempt별 validation failure를 관측합니다.
  • publish 직후 segment 404·startup failure를 canary로 확인합니다.
  • rights revoke와 rollback이 manifest·CDN에 전파됐는지 검증합니다.
PRIMARY SOURCES · VERIFIED 2026-08-23

프로토콜 사실은 공식 문서에서 확인한다

# 출처
NEXT · 운영·메시징분산 메시지 큐에서 job과 event 흐름을 더 깊게 보기 →
EDITORIAL NOTES

작성·검토·참고 자료

콘텐츠 원칙
이 문서는 독립적으로 재작성한 한국어 학습 자료입니다. 사실과 학습용 설계 가정을 구분합니다.
작성·기술 검수
프로젝트 운영자가 직접 작성·기술 검토했습니다. 주제별 공식·1차 자료와 명시적인 설계 가정을 확인하며, 독립적인 제3자 검수가 아닙니다. 경력 범위와 검수 원칙 보기
최종 검토
예상 학습 시간
27분

사실 오류·출처 정정은 문의·정정 페이지로 알려 주세요.