Skip to content

kodesalon/kopang

Repository files navigation

Kopang (코팡)

선착순 이벤트 주문 처리 플랫폼 서버 구현


프로젝트 개요

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

CI/CD

GitHub push부터 EC2 WAS 기동까지 AWS CodePipeline으로 자동화된 배포 파이프라인을 구성했습니다.

스크린샷 2026-03-31 오후 2 20 17
단계 주체 핵심 동작
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) 연결

요청 흐름

주문 흐름 (v1 - 공정성 보장 x)

스크린샷 2026-03-31 오전 1 20 34

주문 흐름 (v2 - 공정성 보장 o)

스크린샷 2026-03-31 오전 2 45 47

결제 흐름

스크린샷 2026-03-31 오전 1 21 22 스크린샷 2026-03-31 오전 1 22 07

기술적 문제와 해결 과정

도메인 설계

동시성 제어

Eventual Consistency

Redis 운용

결제 & 주문 취소

성능 테스트 & 튜닝

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors