대용량 바이트는 객체 저장소에서, 이름·폴더·공유 권한은 metadata namespace에서, 기기 간 수렴은 cursor 기반 delta feed에서 다룹니다. 업로드 완료와 동기화·권한·복구를 같은 성공으로 섞지 않는 것이 핵심입니다.
운영자 직접 작성·기술 검토·최종 검토 2026.08.29
개념 이해요구사항면접 질문장애 대응진도 저장
↟30초 핵심 요약
파일 바이트는 불변 object version, 현재 파일과 ACL은 metadata, 기기 간 수렴은 cursor delta가 맡습니다. upload 성공 뒤에도 base-version CAS가 실패하면 덮어쓰지 않고 merge 또는 conflict copy로 보존하며, notification은 delta pull을 깨우는 힌트로만 사용합니다.
바이트 정본Immutable object + manifest
동기화 정본Cursor + delta feed
충돌 기준Base version CAS
DESIGN DECISION · 설계 판단
오프라인 파일 변경이 갈라졌을 때 어느 상태로 다시 수렴할 것인가?
예시 활성 사용자5,000만 명
설계 가정
예시 신규 바이트120TB/일
계산 결과
예시 delta 보존30일
설계 가정
최종 선택
불변 file version + base-version CAS + cursor delta
파일 단위 재개 업로드로 불변 object version을 만들고 metadata CAS로 현재 version과 change event를 확정합니다. 기기는 cursor delta로 수렴하며 stale base의 이진 파일은 덮어쓰지 않고 conflict copy로 보존합니다.
같은 파일 ID에 콘텐츠 수정, rename, move, 공유 권한 철회가 겹칠 수 있습니다. 경로가 아닌 안정된 file ID를 기준으로 revision·ACL을 묶고, 현재 버전이 사용자에게 보이는 단일 commit 경계를 정의합니다.
R1재개 가능한 업로드
timeout 뒤 서버가 받은 range를 확인하고 미수신 byte만 다시 보냅니다.
R2오프라인 수렴
기기는 저장 cursor 이후 변경을 가져오며 notification만 믿지 않습니다.
R3충돌 보존
stale base version은 덮어쓰지 않고 merge 또는 conflict copy로 보존합니다.
R4권한 우선
파일 ID와 URL을 알아도 현재 ACL·policy version을 통과해야 읽습니다.
02 · HIGH-LEVEL DESIGN
불변 바이트와 가변 metadata를 commit으로 잇는다
# 아키텍처
object write의 성공은 아직 파일 publish가 아닙니다. staging object를 검증한 뒤 metadata namespace의 current version과 change log를 같은 publish 경계에서 확정하고, downstream projection은 outbox에서 재시도합니다.
업로드 재개부터 다기기 delta sync까지 SVG DIAGRAM · data plane / control plane
정합성 경계: Google Cloud Storage의 object replacement가 원자적이어도, object store·metadata DB·change log 전체가 한 transaction이 되는 것은 아닙니다. 이 설계는 publish marker, transactional outbox, reconciliation으로 그 경계를 명시적으로 관리합니다.
stale base version은 조용히 덮지 않고 merge 또는 conflict copy로 남긴다.
cursor gap, orphan object, stale ACL을 reconciliation과 revision restore drill로 검증한다. 이번 선택: 파일 단위 재개 업로드와 불변 object version으로 시작하고, metadata CAS와 cursor log로 충돌·동기화를 닫는다. 깨지는 신호: object는 존재하지만 change event가 없거나, 같은 base version의 쓰기가 한쪽 변경을 조용히 덮는다. 다음 검증: 실제 파일 크기·중간 수정 비율을 측정해 block dedup이 전송 절감보다 manifest·GC 복잡성을 감수할 가치가 있는지 판단한다.
INTERVIEW ↔ PRACTICE · 면접과 실무의 차이
file-first 동기화 경계를 설명하고 cursor·conflict를 운영하기
INTERVIEW · 면접
object, metadata version, change cursor의 서로 다른 성공 경계를 답합니다.
resumable range와 전체 hash 검증을 구분합니다.
base-version CAS와 delta outbox를 한 publish 경계로 설명합니다.