선착순 이벤트 주문 처리 플랫폼 서버 구현
Kopang은 선착순 이벤트 상품을 다수의 사용자가 동시에 주문하는 고트래픽 상황에서 공정성 과 일관성 보장을 목표로 하는 커머스 서버입니다.
단순한 기능 구현을 넘어, 실제 대용량 트래픽에서 발생하는 문제를 직접 측정하고 아키텍처를 개선하는 과정을 기록합니다.
- 단순한 기능 구현이 아니라 대용량 트래픽 처리까지 고려하는 것을 목표로 함
- 선착순 재고 차감 시스템의 공정성 보장 (먼저 요청한 사용자가 먼저 처리)
- 원자적 재고 예약으로 중복/초과 차감 방지
- 결제 실패/타임아웃 시 자동 재고 복구
- 장애 상황에서도 데이터 일관성 유지 (스케줄러 기반 자가 복구)
| 분류 | 기술 |
|---|---|
| 언어 / 프레임워크 | Java 21, Spring Boot 3.5.8 |
| 데이터베이스 | MySQL 8.0.41 (운영), H2 (개발) |
| 캐시 / 대기열 | Redis (Sorted Set, Lua Script) |
| 로컬 캐시 | Caffeine |
| ORM | Spring Data JPA / Hibernate |
| 메시징 | Kafka (구현 예정) |
| 모니터링 | Micrometer, Prometheus, Spring Actuator |
| 테스트 | JUnit 5, REST Assured |
| 빌드 | Gradle |
GitHub push부터 EC2 WAS 기동까지 AWS CodePipeline으로 자동화된 배포 파이프라인을 구성했습니다.
| 단계 | 주체 | 핵심 동작 |
|---|---|---|
| Webhook | GitHub(CodeConnections App) | deploy push 감지 → CodePipeline에 이벤트 전달 |
| Source | CodePipeline | GitHub에서 소스 ZIP 취득 → S3 아티팩트 버킷에 직접 업로드 |
| Build | CodePipeline → CodeBuild | StartBuild API 호출 시 S3 버킷+키 전달 → CodeBuild 런타임이 S3에서 자동 다운로드 → ./gradlew build → 빌드 산출물을 S3에 자동 업로드 |
| Deploy | CodePipeline → CodeDeploy | CreateDeployment API 호출 시 S3 revision 위치 전달 → EC2의 CodeDeploy Agent가 폴링으로 지시 수신 → S3에서 직접 아티팩트 pull → appspec.yml lifecycle hooks 실행 |
| Runtime | EC2 + RDS | Spring Boot WAS 기동 후 RDS(MySQL) 연결 |
- Eventual Consistency 전략 1 : Redis-DB 불일치, 세 가지 동기화 전략 비교와 MQ 선택
- Eventual Consistency 전략 2 : RabbitMQ, Kafka, Redis Streams — 그리고 Redis Streams 선택
- Eventual Consistency 전략 3 : Redis Lua Script의 원자성 원리와 Redis Streams 재확인
- Eventual Consistency 전략 4 (최종) : Redis Streams를 포기하고 Kafka + Outbox Pattern으로