『가상 면접 사례로 배우는 대규모 시스템 설계 기초』를 기반으로
대규모 트래픽과 분산 시스템의 주요 설계 문제를 직접 구현하고,
부하 테스트와 메트릭을 통해 설계 선택을 검증하는 프로젝트 모음입니다.
단순히 아키텍처를 그리는 데서 끝내지 않고, 초기 구조의 병목을 측정한 뒤
캐시, 메시지 큐, 데이터 분할, 비동기 처리 등의 설계를 적용해 전후 결과를 비교합니다.
- 시스템 요구사항을 트래픽과 데이터 규모로 구체화합니다.
- 설계 선택의 근거와 트레이드오프를 문서로 기록합니다.
- k6 부하 테스트를 통해 성능 병목을 재현합니다.
- Prometheus와 Grafana를 활용해 시스템 상태를 관찰합니다.
- 개선 전후의 RPS, p95, p99, 오류율과 자원 사용량을 비교합니다.
- 면접에서 설계 과정과 수치를 근거로 설명할 수 있는 결과물을 만듭니다.
| Project | 핵심 주제 | 상태 | Repository |
|---|---|---|---|
| System Design Template | 공통 실행·부하 테스트·모니터링 환경 | 완료 | Repository |
| URL Shortener | ID 생성, 캐시, 읽기 확장, 데이터 분할 | 예정 | - |
| Notification System | 메시지 큐, 재시도, 멱등성, 장애 복구 | 예정 | - |
모든 프로젝트는 가능한 한 동일한 과정으로 진행합니다.
- 문제와 요구사항 정의
- 트래픽 및 저장 용량 산정
- API와 데이터 모델 설계
- 초기 아키텍처 설계
- Baseline 구현
- k6 부하 테스트
- Prometheus와 Grafana를 통한 병목 분석
- 구조 개선
- 동일한 조건으로 재측정
- 결과와 트레이드오프 정리
| 구분 | 기술 |
|---|---|
| Language | Java 25 |
| Framework | Spring Boot 4 |
| Build | Gradle |
| Container | Docker, Docker Compose |
| Load Test | k6 |
| Metrics | Spring Boot Actuator, Micrometer |
| Monitoring | Prometheus, Grafana |
| Automation | GitHub Actions |
프로젝트별로 필요한 기술을 추가합니다.
MySQL
Redis
Kafka
RabbitMQ
Elasticsearch
Spring Batch
각 프로젝트에서는 다음 지표를 중심으로 개선 효과를 비교합니다.
- Requests Per Second
- p95 및 p99 응답 시간
- HTTP 오류율
- CPU 사용률
- JVM Heap 사용량
- 활성 스레드 수
- DB Connection Pool 대기 시간
- 캐시 적중률
- 메시지 처리량과 지연 시간
각 Repository에는 다음 문서를 작성합니다.
docs/
├── 01-requirements.md
├── 02-capacity-estimation.md
├── 03-architecture.md
├── 04-experiment.md
└── 05-retrospective.md
| 문서 | 내용 |
|---|---|
| Requirements | 기능·비기능 요구사항과 프로젝트 범위 |
| Capacity Estimation | 트래픽, 저장량, 네트워크 사용량 산정 |
| Architecture | 구성 요소, 데이터 흐름, 설계 결정 |
| Experiment | 가설, 테스트 조건, 개선 전후 결과 |
| Retrospective | 한계, 트레이드오프, 면접 예상 질문 |
- 기술을 먼저 선택하지 않고 요구사항과 병목을 기준으로 선택합니다.
- 개선 전후에는 동일한 부하 테스트 조건을 사용합니다.
- 평균 응답 시간만이 아니라 p95와 p99를 함께 확인합니다.
- 성능 향상뿐 아니라 정합성, 장애 복구, 운영 복잡도를 함께 고려합니다.
- 로컬 실험 결과와 실제 운영 환경의 차이를 명확히 기록합니다.