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

동영상 플랫폼
설계

영상 파일 하나는 업로드, 검사, 인코딩, manifest, edge cache, 재생 이벤트를 거칩니다. 이 경로를 하나의 서버가 아닌 서로 다른 일관성·비용·권한 경계를 가진 세 평면으로 나누어 설계합니다.

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

대용량 바이트는 서명된 재개 가능 업로드로 quarantine storage에 직접 넣고, 검사 통과 뒤 durable job으로 변환합니다. 여러 rendition과 HLS/DASH manifest는 versioned output으로 publish하며, 재생은 권한 확인 뒤 CDN으로 보냅니다. 조회수는 video row가 아니라 멱등 이벤트 로그에서 집계합니다.

ingest 경계direct upload + scan
delivery 경계ABR manifest + CDN
정확성 경계version + idempotent event
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

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

# 대안
선택강점비용·제약판단 기준
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을 마무리한다.
PRIMARY SOURCES · VERIFIED 2026-08-23

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

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

작성·검토·참고 자료

콘텐츠 원칙
이 문서는 독립적으로 재작성한 한국어 학습 자료입니다. 사실과 학습용 설계 가정을 구분합니다.
최종 검토
예상 학습 시간
27분

참고 자료

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