수만 명이 동시에 몰리는 선착순 티켓 예매 플랫폼. 중복 예매 원천 차단, 재고 정합성 보장, Stateless 수평 확장을 목표로 Hexagonal Architecture 기반으로 설계·구현. Java 25 + Spring Boot 4 최신 스택.
버스트 트래픽 제어, 중복 방지, 재고 정합성까지 — 선착순 예매의 핵심 과제 해결
오픈 순간 집중되는 동시 요청을 Redis 기반 대기열로 제어. 시스템 허용 범위 내에서만 예매 플로우에 진입.
동일 사용자의 중복 예매·주문 생성을 Redis 멱등성 키로 원천 차단. 재시도·더블클릭에도 안전한 요청 처리.
Redis 원자 연산 + DB 레벨 락으로 좌석·티켓 재고의 정확한 차감과 일관성 유지. 동시성 테스트로 경합 시나리오 검증.
결제 전 좌석을 TTL 기반으로 임시 홀드. 이탈 시 자동 해제되어 재고가 잠기지 않고, 확정 시 주문으로 전환.
결제 알림·로깅 등 비핵심 작업은 Kafka로 비동기 처리. 핵심 예매 경로의 지연을 최소화하고 서버는 Stateless 유지.
단위 테스트 + Testcontainers 통합 테스트 + 동시성 테스트(재고 차감, 중복 예매 경합). 버그 수정 시 재현 테스트 필수 원칙.
도메인은 순수 자바로 프레임워크 어노테이션 금지. Inbound/Outbound Port 인터페이스로 REST·JPA·Redis·Kafka 어댑터를 격리. 모든 의존성이 바깥에서 도메인 안쪽으로 향함.
domain / application(ports) / adapter(in·out)Event → Queue → Inventory → Reservation → Order → Payment. 이벤트 정보부터 대기열, 원자적 재고 차감, TTL 홀드, 확정 주문, 결제까지 선착순 예매의 전체 흐름을 도메인으로 분리.
event → queue → inventory → reservation → order → payment단일 노드를 가정하지 않는 설계. Redis 원자 연산(대기열·재고·멱등성 키·임시 홀드) + DB 레벨 락으로 크리티컬 섹션 보호. 애플리케이션 서버는 Stateless로 수평 확장 자유.
atomic ops + DB lock + idempotency keyN+1 쿼리 방지, 이벤트 상세 등 핫 데이터 캐싱, 페이지네이션 필수, 비핵심 작업 Kafka 비동기 처리를 프로젝트 원칙으로 강제.
no N+1 · hot cache · pagination · async고트래픽 시스템은 인프라 교체·확장이 잦음. 도메인을 Redis·Kafka·JPA로부터 격리하면 포트를 Mock으로 교체해 도메인만 빠르게 테스트하고, 어댑터 교체만으로 인프라 전환 가능.
선착순 환경에선 사용자 재시도·더블클릭·네트워크 재전송이 필연. 요청 단위 멱등성 키로 중복 주문 생성을 저장소 레벨에서 차단해 애플리케이션 로직 실수와 무관하게 안전.
결제까지 좌석을 무기한 점유하면 이탈 사용자가 재고를 잠금. TTL 홀드로 일정 시간 내 미결제 시 자동 반환 — 별도 배치 없이 Redis 만료로 해결.
알림·로깅이 예매 크리티컬 패스에 있으면 외부 장애가 예매 실패로 전파. Kafka로 분리해 핵심 경로 지연 최소화 + 장애 격리.