Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

First Ticket

image

🎫 First Ticket

공정성 · 안정성 · 신뢰성을 갖춘 MSA 기반 공연 티켓 예매 플랫폼

좋아하는 아티스트의 티켓팅, 정각에 접속했는데 이미 매진된 경험.
First Ticket은 매크로 없이, 정각 접속자 모두가 동등하게 경쟁하는 티켓팅을 목표로 설계되었습니다.


개발 기간: 2026年04月16日 ~ 2026年05月20日

Repositories


📑 목차


💎 핵심 가치

⚖️ 공정성 매크로 없이, 정각 접속자 모두가 동등하게 경쟁
🛡️ 안정성 동시 접속 및 요청 폭증 상황에서도 서버 다운 없이 유지
🔒 신뢰성 결제 실패 · 취소 시에도 예매와 좌석이 자동으로 복원

🎯 주요 기능

  • 🎭 공연 조회 및 예매 — 다양한 공연·전시 프로그램을 검색하고, 좌석을 직접 선택하여 예매
  • 🎟️ 대기열 입장 — 티켓 오픈 직후 폭주 상황에서도 매크로 없이 정각 접속자가 동등하게 순번을 부여받고 입장
  • 💺 좌석 선점 — 마음에 드는 좌석을 일정 시간 동안 임시로 선점하고, 그 안에 결제를 완료해 예매 확정
  • 💳 간편 결제 — Toss Payments로 안전하게 결제, 결제 실패·취소 시에도 좌석과 예매가 자동으로 복원
  • 🔄 예매 취소 및 환불 — 예매 취소 요청 시 결제 환불부터 좌석 복구까지 자동으로 처리
  • 🎤 공연 등록 (주최자) — 주최자가 공연장·스케줄·가격등급을 등록하고 판매 시작 시점 제어

🏛️ 설계 원칙

영역 적용 방식
MSA 아키텍처 비즈니스 도메인 단위 서비스 분리 + DDD 적용
트래픽 처리 안정성 nGrinder · k6 기반 부하 테스트로 동시 접속 안정 처리 검증
대기열 시스템 Redis Sorted Set + Hash + String + Set 기반 대기열로 공정한 선착순 처리
이벤트 드리븐 통신 Kafka + Outbox/Inbox 패턴으로 서비스 간 느슨한 결합 및 이벤트 유실 방지
동시성 제어 Redisson 분산 락 + Redis TTL 기반 좌석 선점으로 중복 예매 차단
독립 배포 AWS ECS Fargate + GitHub Actions 기반 서비스별 독립 CI/CD
관찰성 Prometheus · Grafana · Zipkin 통합 관찰성 + Slack 임계치 자동 알림

👥 팀원 (Contributors)

이름 포지션 주요 담당 GitHub
김하진 팀장 대기열 도메인, Config Server, ECS 배포 + CI/CD @rlaxxwls13
조하은 팀원 좌석 도메인, 공통 모듈, 모니터링 @haeun228
신단비 팀원 프로그램 도메인, 공연장 도메인 @sweetRainShin
김두리 팀원 결제 도메인 @DDoori
나웅철 팀원 예매 도메인 @No-366
박동진 팀원 인증·인가, Gateway, Eureka @straycat405
📋 상세 기여 내역 보기

김하진

  • 대기열 도메인 설계 및 구현 (Redis Sorted Set/Hash/역인덱스, Lua Script 원자성, FIFO tie-breaker, Adaptive Polling)
  • Spring Cloud Config Server 구축 (Git + Basic Auth + {cipher} 암호화)
  • ECS Fargate 배포 인프라 + GitHub Actions OIDC 기반 CI/CD

조하은

  • 좌석 도메인 (Redisson 분산락, Redis TTL Hold, JDBC batchUpdate, Redis 캐시)
  • 공통 모듈 설계 (common / common-jpa / common-messaging — Outbox/Inbox/멱등 AOP)
  • Prometheus + Grafana 모니터링 및 Slack 알림 파이프라인

신단비

  • 프로그램·공연장 도메인 (상태 머신, 가격등급, 시간 겹침 이중 방어 — 비관적 락 + tsrange exclusion)
  • Provider 패턴으로 외부 서비스 격리, Outbox 기반 Kafka 발행 설계
  • 전체 계층 테스트 코드 (Testcontainers + PostgreSQL), REST Docs 문서화

김두리

  • 토스페이먼츠 서버 승인 방식 연동, 결제 상태 머신 (PENDING/FAILED/FINAL_FAILED/SUCCESS/REFUNDED)
  • 비관적 락 + Idempotency Key + 금액 대조 검증
  • Outbox/Inbox 패턴 + DLQ로 결제 이벤트 유실 방지

나웅철

  • 예매 도메인 + Saga Orchestration (PENDING → PAID → CONFIRMED / CANCEL_REQUESTED → CANCELED)
  • Redisson @DistributedLock AOP, 입장 토큰/세션 토큰 분리 검증
  • QueryDSL 동적 페이지네이션, 외부 서비스 Feign Client 설계

박동진

  • 인증 시스템 (Keycloak 26 + JWT 이중 토큰 + Redis Lua CAS Token Rotation + Blacklist)
  • API Gateway (AuthorizationHeaderFilter, Caffeine L1 캐시, Circuit Breaker)
  • Eureka Server (Caffeine 응답 캐시, 환경별 Self-Preservation 분리)
  • HOST 권한 신청/승인 Flow + Partial Unique Index 이중 방어

🛠️ 기술 스택

영역 기술
Language Java 21
Framework Spring Boot 3.5.13 · Spring Cloud 202502 · Spring Data JPA · QueryDSL
인증 · 보안 Keycloak 26 · JWT
장애 격리 Resilience4j (Circuit Breaker · Bulkhead)
Database PostgreSQL · Redis · Redisson
DB Migration Flyway
Messaging Apache Kafka
External API Toss Payments
Test JUnit 5 · Testcontainers · nGrinder · k6 · JMeter
Infra AWS ECS Fargate · AWS EC2 · AWS RDS · AWS ALB · AWS ECR
CI / CD Docker · GitHub Actions
Monitoring Prometheus · Grafana · Zipkin
Collaboration Notion · Slack · GitHub · draw.io

🧩 서비스 구성 (Repositories)

도메인 단위 MSA. 각 서비스는 독립 배포 · 독립 확장 가능합니다.

서비스 역할 레포
🚪 Gateway Server 단일 진입점, JWT 서명 검증, Caffeine L1 캐시, Circuit Breaker Gateway Server
🧭 Eureka Server 서비스 디스커버리 Eureka Server
⚙️ Config Server 중앙 집중 설정 관리 (Git + 암호화) Config Server
👤 User Service 회원, 인증(Keycloak), Token Rotation, HOST 권한 User Service
🏛️ Venue Service 공연장 · 구역 · 좌석 구조 관리 Venue Service
🎭 Program Service 공연/스케줄/가격등급 등록 및 상태 머신 Program Service
🎟️ Queue Service Redis 기반 대기열, Adaptive Polling, 예매 입장 토큰 발급 Queue Service
💺 Booking Service 좌석 선점(Redisson) + 예매 Saga 오케스트레이터 Booking Service
💳 Payment Service Toss Payments 연동, 결제 상태 머신, Outbox Payment Service
📦 Common Modules common / common-jpa / common-messaging common, common-jpa, common-messaging

🏗️ 아키텍처

티켓팅 전체 흐름

1 대기열 진입 사용자 → Queue Service (Redis Sorted Set + Hash)
2 입장 확인 사용자 폴링 → Queue Service (Adaptive Polling, EntryToken JWT)
3 예매 세션 생성 사용자 → Booking Service (EntryToken 검증 + 블랙리스트)
4 좌석 선점 사용자 → Booking Service (Redisson 분산락 + TTL 10분)
5 예매 생성 사용자 → Booking Service (Saga 시작)
6 결제 Booking → Payment Service (Toss PG 서버 승인)
 └─ 성공/실패에 따라 Kafka 이벤트 발행 → 보상 트랜잭션

인증 흐름

클라이언트
 │ Authorization: Bearer <AccessToken>
 ▼
API Gateway
 │ Keycloak 공개키로 서명 검증
 │ 검증 성공 → X-User-Id, X-User-Role 헤더 추가
 ▼
각 마이크로서비스 (헤더 신뢰, 자체 재검증 없음)

프로그램 & 공연장 흐름

주최자가 공연장 → 프로그램(DRAFT) → 스케줄 → 가격 등급을 순차 등록하고
판매 시작(ON_SALE) 시점에 예매 서비스·대기열 서비스가 Kafka로 동기화

주최자 (HOST / ADMIN)
├─ 1 공연장 등록 → Venue Service
│ └─ 구역(SEATED/STANDING/FREE) 포함 시 좌석 자동 생성
│
├─ 2 프로그램 등록 (DRAFT) → Program Service
│ └─ Kafka: program.created → 대기열 초기화
│
├─ 3 스케줄 등록 → Program Service
│ └─ 비관적 락 + tsrange exclusion 으로 공연장 시간 겹침 차단
│
├─ 4 가격 등급 등록 → Program Service
│ └─ 좌석 타입별 sectionId 규칙 검증 (Feign)
│
└─ 5 판매 시작 (DRAFT → ON_SALE)
└─ Kafka: schedule.created → 예매 서비스가 BookingSeat 생성
└─ Kafka: program.time.updated → 대기열 서비스가 openAt·closeAt 등록

인프라 설계도

image

ERD

image

🚀 Local 실행 가이드

자세한 실행 가이드는 각 레포의 README 참조

# 1. 인프라 컴포넌트 기동 (PostgreSQL, Redis, Kafka, Keycloak)
docker compose up -d
# 2. 인프라 서비스 (순서 중요)
./gradlew :eureka-server:bootRun # 1순위
./gradlew :config-server:bootRun # 2순위
./gradlew :gateway-server:bootRun # 3순위
# 3. 도메인 서비스
./gradlew :user-service:bootRun
./gradlew :program-service:bootRun
./gradlew :venue-service:bootRun
./gradlew :queue-service:bootRun
./gradlew :booking-service:bootRun
./gradlew :payment-service:bootRun

환경 요구사항

  • Java 21
  • Docker & Docker Compose
  • Gradle 8.x

🎫 First Ticket · MSA Ticketing Platform

Popular repositories Loading

  1. .github .github Public

    Github 설정, 템플릿 관리 repo입니다.

  2. common common Public

    Java

  3. config-server config-server Public

    Java

  4. booking-service booking-service Public

    [first-ticket 프로젝트] : 예매 서비스 파트

    Java

  5. payment-service payment-service Public

    Java

  6. program-service program-service Public

    공연·전시·팝업·경기 등 — 어떤 형태의 프로그램이라도 정확하게 관리/제공하는 서비스

    Java

Repositories

Loading
Type
Select type
Language
Select language
Sort
Select order
Showing 10 of 16 repositories

Top languages

Loading...

Most used topics

Loading...

AltStyle によって変換されたページ (->オリジナル) /