시스템 디자인 문제(면접이나 실무에서)에 접근할 때는 구조화된 방법 — 요구사항 명확화, 규모 추정, 상위 수준 그다음 세부 설계, 트레이드오프 논의 — 이 도움이 됩니다. 체계적인 접근은 더 나은 디자인으로 이어집니다.
구조화된 접근법
1. 요구사항 명확화 → 기능적(무엇을 하는가) + 비기능적(규모, latency,
가용성, 일관성); 범위 설정 (가정하지 말고 — 질문하고 문제를 좁힘)
2. 규모 추정 → 사용자, 초당 요청, 데이터량, 읽기/쓰기 비율 → 디자인에 정보 제공
3. 상위 수준 설계 → 주요 구성 요소와 데이터 흐름 (클라이언트, 서비스, 데이터베이스, 캐시,
load balancer, 큐); 아키텍처를 그림
4. 세부 설계 → 데이터 모델/스키마; 핵심 구성 요소 심층; API; 구체적 과제
5. 확장 & 최적화 → 병목 식별; 기법 적용 (캐싱, load balancing,
sharding, replication, 비동기); 트레이드오프 논의
6. 관심사 다루기 → 신뢰성, 일관성, 엣지 케이스, 장애
핵심 원칙
✓ 넓게 시작한 뒤 깊이 → 상위 수준 먼저, 그다음 중요한 것을 상세히
✓ 결정을 정당화 → 이유를 설명; 트레이드오프 논의 (완벽한 디자인은 없음)
✓ 규모, 장애, 현실적 관심사를 고려
✓ 소통 → 토론임; 소리 내어 생각; 협업
✓ 단 하나의 정답은 없음 → 요구사항과 트레이드오프에 따라 달라짐
