kjp0411 님의 블로그

내일배움캠프 단기심화 Java - 본 캠프 Day 45 본문

TIL

내일배움캠프 단기심화 Java - 본 캠프 Day 45

kjp0411 2026. 4. 16. 16:05

2026.04.16

오늘 한 일

  • 최종 프로젝트 주제 선정: 티켓팅 시스템 (Ticketing System)
  • 프로젝트 방향성 논의
    • 좌석 기반 예약 시스템 중심 설계
    • 실제 티켓팅 서비스(콘서트, 공연 등)를 고려한 구조 고민
  • 좌석 관련 요구사항 명세서 초안 작성
    • 좌석 생성 방식 정의
    • 좌석 상태 관리 정책 설계
    • 좌석 조회 기능 요구사항 정리

오늘 배운 점

1. 단순 기능 구현이 아니라 도메인 설계가 핵심이다

좌석은 단순 데이터가 아니라 상태(State)를 가지는 핵심 도메인

  • AVAILABLE (예약 가능)
  • HELD (임시 점유)
  • RESERVED (결제 완료)
  • 특히 동시성 문제를 고려해야 하는 대표적인 영역

티켓팅 시스템의 핵심은 "좌석을 누가 먼저 차지하느냐"를 정확하게 제어하는 것

 

2. 요구사항 명세서의 중요성

  • 바로 개발에 들어가는 것이 아니라 명확한 요구사항 정의 → 이후 설계/구현의 기준이 됨
  • 특히 좌석 시스템은
    • 상태 변화
    • 시간 제한 (예: 10분 점유)
    • 결제 실패 시 처리
      같은 정책이 명확해야 함

애매한 상태로 개발하면 버그 및 동시성 문제 발생 가능성이 높음

 

3. 좌석 시스템에서 고려해야 할 핵심 요소

좌석 상태 관리

  • 예약 요청 시 → HELD
  • 일정 시간 내 결제 성공 → RESERVED
  • 결제 실패 또는 시간 초과 → AVAILABLE

점유 시간 정책

  • 좌석 선택 후 10분간 점유 유지
  • 이후 자동 해제 필요 (Scheduler 또는 TTL 활용 고려)

동시성 제어 필요성

  • 여러 사용자가 동시에 같은 좌석을 선택할 수 있음
  • 해결 방법 고민 필요
    • DB Lock
    • Redis 기반 분산 락
    • Queue 기반 처리

느낀 점

  • 기존에는 CRUD 중심 개발을 했지만 이번 프로젝트는 실제 서비스 구조를 설계하는 경험에 가까움
  • 좌석 시스템은 단순 조회/등록이 아니라 상태, 시간, 동시성이 결합된 문제라는 점이 중요

내일 할 것

  • SA 문서 작성