선착순 쿠폰 이벤트의 다양한 구현 방식과 성능 개선을 실험하는 프로젝트입니다.
📊 성능 테스트 결과는
Result.md파일을 참고하세요
이 프로젝트는 선착순 쿠폰 발급 시스템의 여러 구현 방식을 비교하고, 각 방식의 성능을 측정하기 위한 실험실입니다.
-
구현 방식: 비관적 락(Pessimistic Lock)을 이용한 가장 원시적인 동시성 제어
-
⚠️ 최적화 수준: 아무런 최적화도 적용되지 않은 베이스라인 구현 -
Application: Spring Boot (1 vCPU, 1GB RAM)
-
Database: MySQL 8.0 (1 vCPU, 1GB RAM)
-
⚠️ 네트워크 오버헤드: 미구현 (로컬 Docker 환경, 실제 네트워크 지연 없음)
각 브랜치는 서로 다른 동시성 제어 및 성능 최적화 방식을 구현합니다.
main: 🔴 베이스라인 - 비관적 락을 이용한 가장 원시적인 구현 (최적화 없음)feature/optimistic-lock: 낙관적 락(Optimistic Lock) 구현 (예시)feature/redis-distributed-lock: Redis 분산 락 구현 (예시)feature/message-queue: 메시지 큐를 이용한 비동기 처리 (예시)
💡 중요:
- main 브랜치는 의도적으로 최적화하지 않은 원시적인 구현입니다. 다른 브랜치들과의 성능 비교를 위한 베이스라인 역할을 합니다.
- 이 프로젝트의 성능 지표는 절대적인 수치가 아닙니다. 각 브랜치별 구현 방식에 따른 상대적인 성능 변화를 비교하고, 인사이트를 얻는 것이 목적입니다.
- Docker & Docker Compose
- k6 (부하 테스트용)
# 1. 저장소 클론
git clone https://github.com/archan0621/limit_coupon_lab
cd limit_coupon
# 2. 서비스 시작 (초기 쿠폰이 자동으로 생성됩니다)
./start.sh
# 또는 직접 Docker Compose 실행
docker-compose up -d
# 3. k6 부하 테스트 실행
k6 run k6/tps-100.js # 100 TPS 테스트
k6 run k6/tps-500.js # 500 TPS 테스트
k6 run k6/tps-1000.js # 1000 TPS 테스트
k6 run k6/tps-2000.js # 2000 TPS 테스트docker-compose down
# 데이터까지 삭제
docker-compose down -v- 애플리케이션: http://localhost:8080
- Grafana: http://localhost:3000 (admin/admin)
- Prometheus: http://localhost:9090
- SkyWalking: http://localhost:8079
- MySQL Exporter: http://localhost:9104/metrics
각 TPS(Transaction Per Second) 테스트는 10,000개의 쿠폰을 모두 소진합니다.
| 테스트 | TPS | 예상 시간 | 목표 |
|---|---|---|---|
| tps-100.js | 100 | ~110초 | p95 < 1초, p99 < 1초 |
| tps-500.js | 500 | ~25초 | p95 < 1초, p99 < 1초 |
| tps-1000.js | 1000 | ~15초 | p95 < 1초, p99 < 1초 |
| tps-2000.js | 2000 | ~10초 | p95 < 1초, p99 < 1초 |
- 각 테스트 사이에 쿠폰을 재생성해야 합니다
- 테스트는 순차적으로 실행하세요 (동시 실행 금지)
- Language: Kotlin
- Framework: Spring Boot 3.x
- Database: MySQL 8.0
- ORM: JPA (Hibernate)
- Migration: Flyway
- Monitoring: Prometheus, Grafana, SkyWalking
- Load Test: k6
- Container: Docker, Docker Compose
이 프로젝트를 통해 다음을 학습할 수 있습니다:
- 동시성 제어: 비관적 락, 낙관적 락, 분산 락 등의 구현과 트레이드오프
- 성능 최적화: 인덱스, 쿼리 최적화, 커넥션 풀 튜닝 등
- 모니터링: Prometheus, Grafana를 통한 시스템 메트릭 수집 및 시각화
- 부하 테스트: k6를 이용한 TPS 기반 성능 측정
- APM: SkyWalking을 통한 애플리케이션 성능 분석
- 이 프로젝트는 학습 및 실험 목적입니다
- main 브랜치는 의도적으로 최적화하지 않은 원시적인 구현입니다. 실제 프로덕션에 이대로 사용하면 안 됩니다.
- 성능 수치는 상대적 비교를 위한 것이며, 절대적인 지표가 아닙니다
⚠️ 네트워크 오버헤드 미구현: 모든 서비스가 로컬 Docker 네트워크에서 실행되므로, 실제 프로덕션 환경의 네트워크 지연(레이턴시)이 반영되지 않았습니다. 실제 환경에서는 네트워크 지연으로 인해 성능이 크게 달라질 수 있습니다.- 프로덕션 환경에서는 더 많은 고려사항(보안, 장애 대응, 모니터링, 스케일링 등)이 필요합니다
이 프로젝트는 학습 목적으로 제공됩니다.
Happy Experimenting! 🚀