Skip to content

earlybird-ticket/backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

526 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Earlybird-Ticket

ServiceMainImage

📝 프로젝트 소개

  • 저희 프로젝트는 1만명의 동시 예매 요청을 안정적으로 수용할 수 있는 티켓 예매 시스템 구축을 목표로 합니다.
  • 고객은 웹 사이트에서 VIP 선예매 와 일반 예매를 통해 티켓 예매를 할 수 있고, 쿠폰을 발급 받아 할인 된 가격으로 결제를 진행 할 수 있습니다.

🚩 프로젝트 목표

목표 트래픽

  • 기존 서비스(인터파크) 참고하여 MAU 100만명으로 설정하였습니다.
    • 10,000석의 좌석 기준 5분 내 매진되며 오픈 직후 10초 이내의 전체 요청의 20% 몰린다고 가정했습니다.
  • 트로트 콘서트 참고하여 경쟁률 10:1으로 예상했으며 인당 평균 20건의 재시도가 이루어진다고 가정했습니다.
항목
실제 예매 성공 수 10,000건
전체 요청 수 2,000,000건
평균 TPS 6,667 TPS
버스트 TPS 40,000 TPS

티켓 예매 과정

  • 티켓 예매 Sequence Flow

    SequenceDiagram

📌 주요기능

💳 VIP 선예매

VIP 고객을 위한 선예매 기능을 제공합니다.

원하는 좌석 선점에 실패했을 경우, 해당 좌석에 대기열에 등록하여 순번을 기다릴 수 있습니다.

RedisSorted Set을 활용해 고성능 대기열 시스템을 구현했으며, 예약 실패나 취소가 발생하면 Kafka를 통해 좌석 반환 이벤트를 처리하고 다음 순번의 고객을 입장 시키는 방식의 서비스를 지원합니다.

🎟️ 일반 예매

일반 고객을 위한 일반 예매 기능을 제공합니다.

좌석 맵에서 원하는 좌석을 선택한 뒤, 선점 가능 여부를 확인하고, 선점에 성공하면 결제를 진행할 수 있습니다.

수많은 요청이 동시에 몰리는 환경에서도 빠른 처리를 위해,

Redis를 사용해 좌석 선점 처리를 수행하고, Lua 스크립트를 통해 원자성을 확보하여 안정적인 예매 서비스를 제공합니다.

💌 쿠폰

고객에게 다양한 쿠폰 서비스를 제공합니다.

특히, 생일 기념 할인 쿠폰을 발급하여, 할인된 가격으로 결제할 수 있도록 지원하고 있습니다.

Spring Batch를 적용해 생일 쿠폰을 일괄 발급하고,

기간이 지난 쿠폰은 자동으로 회수할 수 있도록 처리하고 있습니다.

💰 결제

토스페이(Toss Payments)를 PG사로 연동하여 결제 기능을 제공합니다.

쿠폰을 적용해 할인된 가격으로 결제할 수 있으며, 선점한 좌석은 10분 이내에 결제를 완료해야 합니다.

결제 시간 제한을 위해, RedisTTL기능을 활용해 예매 타임아웃기능을 구현하여,

시간 초과 시 좌석 선점이 취소되도록 처리하고 있습니다.

👨‍👩‍👧‍👦‍ 팀원 소개


최용석


이선로


권수연


정균민

⚙️ 프로젝트 아키텍처

📄 MSA 통신 아키텍처

스크린샷 2025-05-16 오후 2 53 52

💻 기술 스택

⚒️ 성능 개선 사항

Kafka 성능 개선


단일 파티션, 단일 컨슈머 -> 500명 결과

50 파티션, 50 컨슈머 -> 6500명 결과

티켓 예매 부하 테스트

1. Redisson 분산락 + DB Transaction


1000명

3000명

6500명

2. Redis + Lua Script


1000명

3000명

6500명

💣 트러블 슈팅

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •