JPA @Transactional, 제대로 사용하고 계신가요?
·2025.01.23 19:00
카카오페이는 JPA의 @Transactional 설정이 DB 성능에 미치는 영향을 분석하고, 불필요한 트랜잭션을 제거하여 조회 성능을 개선했다.
카카오페이 온라인결제 서비스 운영 중, set_option 쿼리가 비정상적으로 높게 발생하는 문제를 발견했다. 분석 결과, autocommit 및 transaction 관련 설정 쿼리가 다수 호출되며 DB 리소스를 점유하고 있었다.
실제 성능 테스트를 통해 단일 조회 시 @Transactional을 제거할 경우, SELECT 성능이 약 2~3배 향상됨을 확인했다. 이는 불필요한 트랜잭션 관리가 DB 조회 성능에 유의미한 영향을 미칠 수 있음을 보여준다.
이에 따라 카카오페이는 다음과 같은 @Transactional 사용 컨벤션을 적용했다.
- 단건 요청 및 단순 조회 시 @Transactional 제거
- 3rd party API 호출이 포함될 수 있는 계층에서는 트랜잭션 사용 지양
- 의도치 않은 설정을 방지하기 위해 클래스 레벨 설정 금지
- CQRS 패턴 대응을 위해 **@Transactional(readOnly=true)**와 전파(propagation) 설정 최적화
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.