시스템 디자인 아틀라스
데이터 시스템 / 대용량 저장 / S3-like Object Storage
학습 로드맵

S3형 객체 저장소 설계

대용량 바이트는 값싸고 오래 보관하되, bucket·key·version·권한·삭제는 예측 가능하게 다룹니다. 핵심은 metadata의 publish 경계와 data plane의 내구성 경계를 혼동하지 않는 것입니다.

개념 이해요구사항장애 대응진도 저장
30초 핵심 요약

객체의 현재 이름과 version은 조건부 mutation이 가능한 metadata plane에 두고, bytes는 immutable segment와 manifest로 data plane에 둡니다. multipart complete가 manifest 검증과 head pointer publish를 함께 마치기 전까지 객체를 보이지 않게 하며, hot data는 복제, cold data는 erasure coding과 scrub·repair로 내구성을 운영합니다.

설계 가정 · 논리 저장500PB
cold EC 예시12 data + 4 parity
핵심 publish 단위manifest + version head
01 · REQUIREMENTS

바이트와 namespace를 함께 신뢰하게 한다

# 요구사항

객체의 data plane은 높은 처리량·내구성을, metadata plane은 version·권한·삭제의 명확한 상태 전이를 책임집니다.

F1불완전 업로드 차단

part는 staging에만 두고 complete 검증 뒤에만 visible version을 만듭니다.

F2범위 읽기

video·backup은 필요한 segment만 range GET으로 읽고 checksum을 유지합니다.

F3복구 가능한 삭제

version, delete marker, restore, physical GC의 의미를 분리합니다.

F4명시적 권한 위임

signed URL은 object·method·만료가 제한된 bearer credential입니다.

02 · HIGH-LEVEL DESIGN

metadata publish와 durable data plane을 나눈다

# 아키텍처

upload가 성공했다는 것은 data shards가 존재한다는 뜻만이 아니라, 검증된 manifest가 현재 object version으로 publish되었다는 뜻이어야 합니다.

multipart ingest → placement → version publish → repair / lifecycle SVG DIAGRAM · 정책·수치는 설계 예시
S3형 객체 저장소의 multipart 업로드, metadata, data plane과 repair 흐름클라이언트가 업로드 세션과 인제스트를 거쳐 배치 서비스로 보낸 데이터를 복제 또는 erasure coding shard에 저장하고, metadata가 manifest와 object version을 publish한 뒤 signed URL과 lifecycle, scrub repair가 작동하는 구조다.SDK / Clientparts · checksumidempotency keyUpload sessionquota · part inventorycomplete validationPlacementzone · rack spreadreplica / ECData planeshardschecksumsMetadata planebucket · key · versionmanifest + CAS publishSigned URLmethod · expiryversion scopeScrub / repairinventory driftlifecycle / GCvisible object = complete manifest + metadata head
정합성 경계: disk 또는 shard write의 ACK는 object publish가 아닙니다. client가 읽을 수 있는 version은 root checksum·part 순서·조건부 head mutation까지 끝난 metadata 결과이며, 실패한 staging 바이트는 TTL sweep 대상입니다.
03 · REQUEST FLOW

재개 가능한 parts를 검증한 뒤 version을 전진한다

# 요청 흐름
01Session

quota·policy를 확인하고 upload ID와 part size를 발급합니다.

02Ingest

각 range와 per-part hash를 검증하고 받은 part inventory를 저장합니다.

03Complete

root checksum·part sequence·조건부 key version을 확인합니다.

04Publish

immutable manifest와 version head를 확정하고 audit/outbox를 남깁니다.

04 · TRADEOFFS

replication과 EC는 복구 경로까지 비교한다

# 트레이드오프
선택
강점
제약
설계 판단
3-way replication
낮은 p99
raw overhead 큼
hot·small object, 간단한 repair
12+4 erasure coding
저장 효율
reconstruction fan-in·CPU
cold·large object, 충분한 zone/rack
versioning + marker
restore
보존·privacy workflow 필요
user data, audit·랜섬웨어 대응
direct signed URL
확장성
bearer URL·revoke 경계
large transfer, short TTL·세밀한 scope
05 · FAILURE MODES

손상, 삭제, 지연을 서로 다른 실패로 복구한다

# 장애 시나리오
complete timeout

응답을 잃은 client가 새 upload를 만들어 동일한 bytes를 중복 저장합니다.

대응 · idempotency key·received parts·complete 결과를 조회해 같은 version을 반환합니다.
!orphan staging

part는 썼지만 metadata publish가 실패해 invisible bytes와 비용이 쌓입니다.

대응 · publish marker, abort TTL, manifest 없는 segment sweep을 대사합니다.
shard loss

disk·rack·zone 장애가 under-replicated 또는 EC 부족 shard를 만듭니다.

대응 · scrub과 inventory로 감지, 다른 failure domain에 우선 repair합니다.
reconstruction storm

degraded read와 repair가 동시에 몰려 GET p99와 network가 포화됩니다.

대응 · repair priority·rate reservation·hot replica promotion으로 분리합니다.
delete policy race

stale lifecycle worker가 legal hold version을 삭제하거나 GC를 너무 일찍 실행합니다.

대응 · policy-version CAS, tombstone, grace period, restore drill을 둡니다.
signed URL leak

긴 만료의 bearer URL이 복사되어 권한 철회 뒤에도 download될 수 있습니다.

대응 · method/key/version/TTL 최소화와 issuance·use audit, 민감 객체 cache 금지를 적용합니다.
06 · OPERATIONS

보안·관측·비용을 manifest 경계에 연결한다

# 운영 관점
권한과 개인정보

bucket policy, tenant, object version과 method를 ticket에 결속하고 key·presigned query를 telemetry에서 redact합니다.

policy_version · signed_url_use
내구성 관측

PUT 200보다 scrub coverage, checksum mismatch, under-EC count, repair lag와 placement violation을 분리해 봅니다.

scrub_age · repair_backlog
비용 모델

논리 바이트 외에 physical overhead, versions, abandoned parts, request, retrieval, egress와 repair traffic을 합산합니다.

bytes × overhead × retention
면접 모드 · 추가 질문06:00
“12+4 EC cold tier에서 한 zone의 여러 shard가 느려져 reconstruction queue가 폭증했습니다. GET p99를 지키면서 어떤 객체를 먼저 repair하고, replica promotion·rate limit·capacity 경보를 어떻게 적용하시겠습니까?”
failure domainmanifest publishscrub + repairversion / delete
NEXT CASE STUDY분산 메시지 큐 설계
EDITORIAL NOTES

작성·검토·참고 자료

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

참고 자료

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