LEAK

커넥션 리크는 반환 경로가 끊긴 상태다

빌린 커넥션을 반환하지 않으면 풀은 점점 줄어들고, 결국 모든 요청이 대기하다 timeout 된다.

BorrowExceptionReturn
leak

위험한 흐름

getConnection 후 예외가 발생하고 close()가 실행되지 않으면 연결이 풀로 돌아오지 않는다.

safe

안전한 흐름

try-with-resources 또는 프레임워크 트랜잭션 경계가 예외 상황에서도 반환을 보장한다.

try (Connection conn = dataSource.getConnection();
     PreparedStatement ps = conn.prepareStatement(sql);
     ResultSet rs = ps.executeQuery()) {
  // 작업
} // rs, ps, conn 순서로 자동 close