[QueryDSL] Transform 사용 시 HikariCP Connection Leak 문제 해결
QueryDSL Transform 사용 시 HikariCP Connection Leak 문제QueryDSL의 transform() 메서드는 쿼리 결과를 그룹화하고 Map으로 변환할 때 매우 유용한 기능입니다. 하지만 부적절하게 사용할 경우 심각한 데이터베이스 커넥션 누수(Connection Leak)를 발생시킬 수 있습니다. 문제 상황운영 중인 서비스에서 다음과 같은 에러가 발생했습니다: HikariPool-1 - Connection is not available, request timed out after 30000ms. DB 커넥션 수는 POD 당 20개(max-connection-pool) 로 충분한 상태였고, 트랜잭션이 길게 잡히는 슬로우 쿼리도 없는 상황이라 아무래도 Connection Leak 이 발생하는 상황이라 생각 했습니다. 원인 분석QueryDSL의 transform() 메서드 특징문제의 원인은 QueryDSL의 transform() 메서드의 내부 동작 방식에 있었습니다. // 문제가 되는 코드 예시public Map<Long, List<OrderItem>> getOrderItemsByOrderId(List<Long> orderIds) { return queryFactory .selectFrom(orderItem) .where(orderItem.orderId.in(orderIds)) .transform( groupBy(orderItem.orderId) .as(list(orderItem)) );}