
백엔드
DB 트랜잭션 중심 대량요청 처리 최적화
두줄요약
대량 요청 환경의 병목을 DB 트랜잭션 관점에서 분석하고 개선한 사례입니다. 비관적 락을 낙관적 락과 재시도로 전환해 커넥션 효율과 안정성을 높였습니다.
문제 상황
- 수강신청·예약신청처럼 짧은 시간에 수만 건이 몰리는 선착순 시스템의 DB 트랜잭션 병목
- 긴 트랜잭션 유지로 인한 커넥션 풀 부족, 요청 지연, 타임아웃, 데드락, 정합성 오류 발생
원인 분석
- 신청 가능 여부 확인과 집계 갱신이 하나의 긴 트랜잭션에 묶인 구조
- 비관적 락과 추가 커넥션 요구가 겹치며 커넥션 풀이 교착 상태의 원인으로 작용
- 단순 스케일아웃이나 커넥션 증설만으로는 DB 병목 해소가 어려운 구조
해결 방법
- 트랜잭션 범위 최소화, 비실시간 조회 분리, DB 인덱스 추가와 SQL 튜닝 적용
- 요청 대기 솔루션 재도입과 WAS 스레드 수, DB 커넥션 수의 균형 재조정
- 비관적 락을 낙관적 락으로 전환하고 Spring Retry로 충돌 시 자동 재시도 구성
