System Design 전체 지도

3줄 요약

  • System Design은 기술 이름을 나열하는 일이 아니라 요구사항을 API, 트래픽, 상태, 장애 경계, 운영 지표로 번역하는 일이다.
  • 좋은 설계는 먼저 가장 단순한 구조를 잡고, 어떤 요구사항 때문에 cache, queue, replica, shard, circuit breaker가 필요한지 단계적으로 설명한다.
  • 설계 선택은 항상 성능, 정합성, 장애 격리, 운영 복잡도 중 무엇을 개선하고 무엇을 악화시키는지 함께 남겨야 한다.

핵심 정리

  • 입력은 기능 요구사항, 비기능 요구사항, 트래픽 추정, 데이터 보존, 일관성 요구, 장애 허용 범위다.
  • 출력은 API 계약, 컴포넌트 배치, 상태 저장 위치, read/write 경로, 동기/비동기 경계, 관측 지표다.
  • 첫 질문은 “사용자가 성공으로 기대하는 결과는 무엇인가?”다.
  • 두 번째 질문은 “절대 깨지면 안 되는 상태와 늦게 처리해도 되는 작업은 무엇인가?”다.
  • 세 번째 질문은 “피크, 장애, 재시도, 배치가 어느 컴포넌트에 몰리는가?”다.
  • 핵심 지표는 p95 latency, error rate, saturation, queue age, cache hit ratio, replication lag다.

판단 흐름

  • 요구사항을 쓰기 API, 읽기 API, 운영 API로 나눈다.
  • 각 API의 성공, 지연, 실패 응답을 정의한다.
  • 상태의 owner와 최종 진실의 원천을 정한다.
  • 동기 처리와 비동기 처리를 나눈다.
  • 병목 후보를 계산하고 가장 단순한 완화책부터 검토한다.
  • 장애가 났을 때 포기할 기능과 지킬 기능을 나눈다.
  • 운영자가 볼 지표와 알림 기준을 문서에 남긴다.

상세본 구성

  • 01. 요구사항에서 구조로 가는 흐름 상세.md는 기능 문장을 API, 상태, 병목, 장애 경계로 바꾸는 순서를 다룬다.
  • 02. 백엔드 시스템 구성 요소 지도 상세.md는 Gateway, Spring App, DB, Cache, Queue, 외부 API, Observability의 책임을 분리한다.
  • 03. 성능 확장성 신뢰성 트레이드오프 상세.md는 빠르게 만드는 선택이 정합성, 비용, 복구 난이도를 어떻게 바꾸는지 비교한다.
  • 04. 개인 프로젝트와 기업 설계 수준 비교 상세.md는 같은 구조라도 증거, 관측, 복구, 책임 분리 수준이 어떻게 달라지는지 정리한다.
  • 05. System Design 학습 로드맵 상세.md는 암기 순서가 아니라 설계 판단을 쌓는 연습 순서를 제시한다.

헷갈리는 지점

  • System Design을 큰 그림부터 그리는 일로 오해하기 쉽다. 그림은 설계 결과처럼 보이기 때문이다.
    • 실제 시작점은 사용자 결과, 트래픽, 상태, 실패 응답이다.
  • 많은 컴포넌트가 있으면 좋은 설계라고 착각하기 쉽다. 복잡한 구조가 성숙해 보이기 때문이다.
    • 컴포넌트는 요구사항과 실패 비용을 설명할 수 있을 때만 추가한다.
  • 성능 개선은 항상 이득이라고 생각하기 쉽다. p95가 낮아지면 성공처럼 보이기 때문이다.
    • cache, queue, replica는 stale data, 중복 처리, lag, 운영 절차를 같이 만든다.

확인 질문

  • 확인 질문: System Design에서 가장 먼저 바꿔야 하는 것은 무엇인가?
    • 답변: 기능 목록을 사용자 성공 기준, API 계약, 상태 owner, 트래픽, 장애 경계로 바꾸는 것이다.
  • 확인 질문: 기술 이름만 나열한 설계가 부족한 이유는 무엇인가?
    • 답변: 어떤 요구사항 때문에 필요한지, 없으면 무엇이 깨지는지, 새로 생기는 실패 비용이 무엇인지 알 수 없기 때문이다.
  • 확인 질문: 설계 선택은 어떤 축으로 평가해야 하는가?
    • 답변: 성능, 정합성, 장애 격리, 운영 복잡도 중 무엇이 좋아지고 무엇이 나빠지는지 함께 평가해야 한다.

참고 자료 기준