Skip to content

Latest commit

 

History

History
62 lines (54 loc) · 4 KB

README.md

File metadata and controls

62 lines (54 loc) · 4 KB

gwangya-ticket

image

멜론 티켓, 인터파크와 같은 서비스의 ‘티켓 예매’ 기능에 초점을 맞춘 프로젝트입니다.

프로젝트 목표

  • 특정 시점에 대규모 트래픽이 몰리는 티켓 서비스 특성에 맞춰 유연하면서 데이터 정합성을 보장할 수 있는 환경을 구현하고자 하였습니다.
  • 요구 사항 변경에 유연하게 대응할 수 있도록 객체 지향 원리에 근거한 단단한 설계와 클린 코드 작성을 목표로 하였습니다.
  • 요구 사항 기반 테스트 코드를 작성하여 정상 동작을 보장하는 안정적인 애플리케이션을 개발하고자 하였습니다.

프로젝트 기술 스택

  • Static Badge
  • Spring Boot
  • MySQL
  • Hazelcast
  • Hibernate
  • Spring Data JPA
  • QueryDSL
  • Spring Security
  • JUnit

서비스 아키텍처

Blank document - Page 1 (1)

좌석 선택 Flow

좌석선택

예매 하기 Flow

예매하기

좌석 선택 동시성 이슈

Hazelcast 분산 락으로 동시성 제어하기

✔️ 문제

다중 서버 환경에서 동일한 좌석을 2명 이상의 유저가 선택하는 동시성 이슈 발생

✔️ 해결 및 성과

Hazelcast의 분산 락을 이용하여 좌석 번호(PK)에 잠금을 걸어 좌석 선택 정보를 보장할 수 있었습니다.
AP를 제공하는 Hazelcast Map 저장소에 좌석과 선택한 유저 정보를 저장함으로써 데이터베이스로의 부하를 최소화하였습니다. 또한 데이터 삭제 시점에 이벤트를 통한 락 해제로 잠금 간의 동시성 문제를 방지할 수 있었습니다.

➡️ 부하테스트

Hazelcast 단일 서버 2Core, 8GB 사양으로 오류없이 최대 418 TPS / 전체 좌석에 대한 실질 처리율 약 88%를 확보할 수 있었습니다.

image image


MySQL 서버의 CPU 사용률 25% 미만, 메모리 사용률 17% 미만으로 RDB에 대한 부하를 최소화할 수 있었습니다.

image image



Commit Convention

  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • docs : 문서, 주석 수정
  • refactor : 코드 리팩토링
  • test : 테스트 코드
  • chore : 빌드 업무, 패키지 매니저 수정