Recent Posts
Recent Comments
Link
10-06 15:08
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

자바 커넥션 풀 고갈 예방 본문

DEV&OPS/Java

자바 커넥션 풀 고갈 예방

ALEPH.GEM 2026. 10. 6. 14:00
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