삶 가운데 남긴 기록 AACII.TISTORY.COM
자바 커넥션 풀 고갈 예방 본문
728x90
트랜잭션이 수행 시간이 길어지는 경우 커넥션 풀에게 커넥션 반환이 늦어지게 되므로 커넥션 풀이 쉽게 고갈되어 장애가 발생할 수 있습니다.
예를 들어
@Transactional
void order(Long id){
//커넥션 획득
var order = repository.find(id);
payment.approve(order); //외부 API 호출
order.setPaid(true);
} // 커넥션 반납
이처럼 트랜잭션 안에 외부 호출이 있는 경우 외부 호출 결과를 기다리는 시간이 존재해서 수행 시간이 길어질 수 있습니다.
이런 경우 커넥션 풀의 개수에는 제한이 있어서 연결이 많이 증가하면 장애가 발생할 수 있습니다.
외부 호출이 시간이 많이 걸리는 작업이므로, 트랜잭션 안에 포함되어 있으면 효율적이지 않습니다.
외부 호출 결과를 기다리는 동안 커넥션이 연결된 상태로 기다리기 때문입니다.
그래서 트랜잭션을 쪼개서 외부호출을 트랜잭션 밖으로 빼내야 합니다.
void order(Long id){
var order = tx(() -> repository.find(id));
payment.approve(order); //외부 API 호출
tx(() -> repository.setPaid(id));
}
이렇게 구현하면 커넥션 풀을 늘리지 않아도 커넥션 풀을 효율적으로 사용 할 수 있게 됩니다.

728x90
'DEV&OPS > Java' 카테고리의 다른 글
| 스프링 부트 JWT 인증 구현 가이드 3편: 예외 처리, 권한 설정과 운영 보안 (0) | 2026.07.23 |
|---|---|
| 스프링 부트 JWT 인증 구현 가이드 2편: 인증 필터와 보호 API 접근 (0) | 2026.07.23 |
| 스프링 부트 JWT 인증 구현 가이드 1편: 로그인과 액세스 토큰 발급 (0) | 2026.07.23 |
| JWT 인증 (0) | 2026.07.22 |
| 스프링 부트 웹 애플리케이션에서 카카오 로그인 처리 (0) | 2026.07.18 |
