Skip to content

archan0621/limit_coupon_lab

Repository files navigation

🎫 선착순 쿠폰 발급 시스템 실험실

선착순 쿠폰 이벤트의 다양한 구현 방식과 성능 개선을 실험하는 프로젝트입니다.

📊 성능 테스트 결과는 Result.md 파일을 참고하세요

📌 프로젝트 개요

이 프로젝트는 선착순 쿠폰 발급 시스템의 여러 구현 방식을 비교하고, 각 방식의 성능을 측정하기 위한 실험실입니다.

현재 환경 (main 브랜치)

  • 구현 방식: 비관적 락(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

📊 모니터링

접속 URL

🧪 부하 테스트

테스트 시나리오

각 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

📖 학습 포인트

이 프로젝트를 통해 다음을 학습할 수 있습니다:

  1. 동시성 제어: 비관적 락, 낙관적 락, 분산 락 등의 구현과 트레이드오프
  2. 성능 최적화: 인덱스, 쿼리 최적화, 커넥션 풀 튜닝 등
  3. 모니터링: Prometheus, Grafana를 통한 시스템 메트릭 수집 및 시각화
  4. 부하 테스트: k6를 이용한 TPS 기반 성능 측정
  5. APM: SkyWalking을 통한 애플리케이션 성능 분석

⚠️ 주의사항

  • 이 프로젝트는 학습 및 실험 목적입니다
  • main 브랜치는 의도적으로 최적화하지 않은 원시적인 구현입니다. 실제 프로덕션에 이대로 사용하면 안 됩니다.
  • 성능 수치는 상대적 비교를 위한 것이며, 절대적인 지표가 아닙니다
  • ⚠️ 네트워크 오버헤드 미구현: 모든 서비스가 로컬 Docker 네트워크에서 실행되므로, 실제 프로덕션 환경의 네트워크 지연(레이턴시)이 반영되지 않았습니다. 실제 환경에서는 네트워크 지연으로 인해 성능이 크게 달라질 수 있습니다.
  • 프로덕션 환경에서는 더 많은 고려사항(보안, 장애 대응, 모니터링, 스케일링 등)이 필요합니다

📝 라이선스

이 프로젝트는 학습 목적으로 제공됩니다.


Happy Experimenting! 🚀

About

쿠폰 발급 이벤트 동시성 제어를 여러 방법으로 시도하고 성능을 테스트 하는 실험실입니다

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors