- 특정 시점에 대규모 트래픽이 몰리는 티켓 서비스 특성에 맞춰 유연하면서 데이터 정합성을 보장할 수 있는 환경을 구현하고자 하였습니다.
- 요구 사항 변경에 유연하게 대응할 수 있도록 객체 지향 원리에 근거한 단단한 설계와 클린 코드 작성을 목표로 하였습니다.
- 요구 사항 기반 테스트 코드를 작성하여 정상 동작을 보장하는 안정적인 애플리케이션을 개발하고자 하였습니다.
다중 서버 환경에서 동일한 좌석을 2명 이상의 유저가 선택하는 동시성 이슈 발생
Hazelcast의 분산 락을 이용하여 좌석 번호(PK)에 잠금을 걸어 좌석 선택 정보를 보장할 수 있었습니다.
AP를 제공하는 Hazelcast Map 저장소에 좌석과 선택한 유저 정보를 저장함으로써 데이터베이스로의 부하를 최소화하였습니다. 또한 데이터 삭제 시점에 이벤트를 통한 락 해제로 잠금 간의 동시성 문제를 방지할 수 있었습니다.
Hazelcast 단일 서버 2Core, 8GB 사양으로 오류없이 최대 418 TPS / 전체 좌석에 대한 실질 처리율 약 88%를 확보할 수 있었습니다.
MySQL 서버의 CPU 사용률 25% 미만, 메모리 사용률 17% 미만으로 RDB에 대한 부하를 최소화할 수 있었습니다.
- feat : 새로운 기능 추가
- fix : 버그 수정
- docs : 문서, 주석 수정
- refactor : 코드 리팩토링
- test : 테스트 코드
- chore : 빌드 업무, 패키지 매니저 수정