수십만명이 참여하는 경쟁이 치열한 티켓팅을 시도해보신적이 있으신가요? 기회는 단 한번 뿐, 티켓팅 성공률은 매우 낮고, 원하는 시간과 좌석을 선택하기 어렵습니다. 하지만, 지정된 시각에만 오픈되는 티켓팅을 사전에 연습하기는 어렵고, 실패하면 다시 기회가 오지 않습니다.
실전과 가장 유사한 티켓팅 연습 환경을 제공하는 티켓팅 시뮬레이터
이에 저희는 경쟁이 치열한 공연 티켓팅을 앞둔 사람들을 위한 실전 연습 서비스인 티켓팅 시뮬레이터 를 기획하고 개발하게 되었습니다.
개발팀노션 | Wiki | Github Project
default.mp4
![]() Jerry |
![]() Parrot |
![]() Happy |
![]() Jude |
![]() Chad |
| J285_함형민 | J042_김서연 | J110_박서현 | J124_박지찬 | J277_최현호 |
- 실제 티켓팅 환경과 동일한 환경에서 단계별 티켓팅 프로세스 제공
- 공연 정보에 따라 플랫폼 별 UI/UX 제공 ( 인터파크, Yes24, 티켓링크, 멜론티켓 )
| 공연 상세 화면 조회(인터파크) | 공연 상세 화면 조회(Yes24) |
![]() |
![]() |
| 대기열 진입 | 보안문자 입력 | 구역 및 회차 선택 |
![]() |
![]() |
![]() |
- 봇을 활용해 실제 상황과 유사한 수준의 가상 트래픽을 생성
- 실존 트래픽 경쟁에 가까운 환경을 제공
- 각 단계별 소요 시간 측정(접속, 대기열, 보안문자, 좌석선택)
- 전체 소요 시간, 전체 사용자 대비 순위를 제공하여 피드백
- 각 티켓팅(예매) 진행 이후 랭킹(순위) 제공
| 예매 피드백 | 랭킹 시스템 |
![]() |
![]() |
- 실제 티켓팅 정보를 받아와 예정된 티켓팅 일정을 제공
| 메인화면 | 다가오는 티켓팅 공연 정보 제공 |
![]() |
![]() |
- 현재 환경의 네트워크 속도·ping 값을 확인
- 성공률에 중요한 네트워크 상태 정보를 표시
- 각 플랫폼 (인터파크·YES24·멜론티켓) 별로 실제 예매 사이트 UI/UX 를 기준으로 최적화된 연습을 진행
수십만명 트래픽을 감당할 수 있는 대규모 시스템 설계를 목적으로 안정성, 가용성을 중시한 아키텍처를 설계했습니다. 더 자세한 기술적 설계 여정은 Wiki ADR 문서를 참고해주세요.
- 기술 스택 선정 이유
- 모노레포 pnpm을 도입한 이유
- 공연장 좌석 렌더링 방식
- 티켓팅 중복 예매 방지
- 모의 트래픽(봇) 발생 원리
- 티켓팅 대기열 시스템 동작 알고리즘
- 티켓팅 스케쥴링 방식
- 대규모 트래픽을 감당하는 예매 시스템 아키텍처 확장
본 프로젝트는 MSA 환경에서의 모노레포 아키텍처로 구성되어 있습니다.
ticketing-system/
├── pnpm-workspace.yaml # 모노레포 workspace 설정
├── package.json # 루트 package.json (모노레포 스크립트)
├── pnpm-lock.yaml # 전역 lock file
│
├── frontend/ # 프론트엔드 (Next.js)
│ ├── src/
│ └── package.json
│
├── backend/ # 백엔드 서버들
│ ├── api-server/ # 일반 API 서버
│ │ ├── src/
│ │ └── package.json
│ │
│ └── ticket-server/ # 티켓 예매 전용 서버
│ ├── src/
│ └── package.json
│
├── queue-backend/ # 대기열 큐 서버
│ ├── src/
│ └── package.json
│
└── packages/ # 공유 패키지
└── shared-types/ # 공통 타입 정의
├── src/
│ ├── booking.ts
│ ├── queue.ts
│ └── events.ts
└── package.json
프로젝트 루트에서 다음 명령어를 실행하여 모든 workspace의 의존성을 설치합니다.
pnpm install모노레포 구조이므로 루트에서 한 번만 실행하면 모든 하위 프로젝트의 의존성이 자동으로 설치됩니다.
각 서버를 개별적으로 실행할 수 있습니다.
# API 서버 실행
pnpm dev:api
# 티켓 서버 실행
pnpm dev:ticket
# 대기열 큐 서버 실행
pnpm dev:queue
# 프론트엔드 실행
pnpm dev:frontend











