/Team3-rdParty

우아한 티켓팅

Primary LanguageJava

우아한 티켓팅

프로젝트 소개

리소스가 한정된 상황에서 대량의 트래픽을 견딜 수 있는 안정적인 티켓팅 서비스입니다.

프로젝트 목표

핵심 목표

  • 좌석 선점이 동시에 이루어져도 안전한 티켓팅 시스템을 설계
  • 새로고침해도 순서가 유지되는 친절한 대기열을 시스템을 설계

부가 목표

  • 사용자 경험을 향상시키기 위해 실시간 좌석 선점 상황을 클라이언트에 반영

👨‍👩‍👧‍👦 팀원 소개

Backend Backend Backend Backend
박혜성 최세민 김현우 이영민

사용 기술




인프라 구성

인프라 구성 excalidraw

해결한 문제들

짝 프로그래밍을 통한 좌석 선점 동시성 제어 방식 비교 및 선정

  • 좌석 선점을 위한 최적의 락 방식을 찾기 위해 낙관, 비관, 분산락을 구현
  • 다음 테스트 조건에 따라 부하 테스트를 진행
  • 결과에 따라 평균 응답 시간이 가장 낮은 비관락을 선정
스크린샷 2024-08-31 오후 10 53 58

짝 프로그래밍을 통한 대기열 시스템 설계

기본 설계

대기열 시스템 구성

문제1. 언제 사용자를 대기열에서 작업 공간으로 옮길까?

대기열시스템_문제1

문제2. 떠나간 사용자와 활성 사용자를 어떻게 구분해야 할까?

대기열 시스템 문제2

10,000명을 견딜수 있는 대기열 시스템 검증

  • 다음 테스트 구성에 따라 부하 테스트를 진행
  • 가상 사용자 2,500명일 때, 대부분의 요청을 1초 안에 처리함을 파악
  • 최종적으로 가상 사용자 10,000명, 남은 순번 조회 폴링 주기 5초일 때, 대기열 시스템이 안정적으로 동작할 수 있음을 검증
스크린샷 2024-08-31 오후 10 09 15 스크린샷 2024-08-31 오후 10 18 01

최종 검증

부하 테스트에 기반한 대기열 페이지 응답 시간 개선

  • Locust RPS, 응답시간 지표에서 그래프 이상을 인지
  • Grafana 모니터링에서 Heap 메모리의 사용과 이상 지점이 유사함을 파악
  • GC 빈도를 낮추기 위해 로직을 개선
  • 가상 사용자 2,500명, 테스트 시간 15분, 시나리오 남은 순서 조회 API를 1초 주기로 폴링하여 검증

응답 시간 개선 excalidraw

응답 시간 개선2

데모

대기열 화면

좌석 선택 화면

전체 시나리오

3rd_Party_.mp4

ERD

스키마

📜 그라운드 룰

  • 스크럼과 회고는 10분 이내로 한다.
  • 화요일에는 야근데이! 9시까지 코딩합니다.
  • 일정이 있으면 미리 공유한다.
  • 평일 10시 ~ 22시 이전까지 온콜타임(코어타임)으로 정한다.
  • 온콜타임 프로젝트 관련 소통은 Discord 에서 진행한다.
    • 용건을 한 번에 육하원칙에 맞게 전송한다.
    • DM 을 사용하지 않고 모든 이슈를 public 하게 공유한다.
  • 질문을 많이, 자유롭게 한다.
  • 해당 주에 완료하지 못한 개발은 주말에 마무리한다. 그 외 주말 시간은 자유롭게 사용한다.
  • 비판은 하되, 감정이 상할 수 있는 비난은 하지 않는다.

🚷 개발 컨벤션

https://github.com/woowa-techcamp-2024/Team3-rdParty/wiki/%EC%BB%A8%EB%B2%A4%EC%85%98