
신규 서비스 배포 전에 실험과 개선을 반복한 이야기
두줄요약
가상 재고 관리 시스템의 성능 테스트에서 DB 데드락과 I/O 병목을 발견해 개선했습니다. 잠금 순서 정렬, commit 축소, MongoDB 로그 분리로 목표 TPS를 넘겼습니다.
문제 상황
- 재고 조회·증감·초기화 부하 테스트에서 목표 1,200 TPS 미달과 DB 데드락 발생
- DB commit과 수량 변경 로그 적재에 따른 I/O·커넥션 점유 병목
원인 분석
- 여러 상품을 서로 다른 순서로 차감하는 트랜잭션 간 순환 대기
- 분산된 commit과 메인 RDB 로그 저장으로 증가한 DB I/O
해결 방법
- 트랜잭션별 차감 대상 상품 정렬로 잠금 순서 통일 및 데드락 제거
- 요청 단위 처리를 묶어 commit 횟수 축소 후, 성능 비교를 거쳐 리팩토링 코드 채택
- 수량 변경 로그를 MongoDB로 분리해 RDB 커넥션 점유 감소
성능/운영 포인트
- 운영 RPS 샘플을 기준으로 물류 증가와 성장률을 반영한 1,200 TPS 목표 설정
- 장시간 성능 테스트에서 1,445~1,462 TPS 기록, 이후 1,500 TPS 이상 유지

