
문제 상황 oneToMany 관계에서 Fetch Join과 Limit을 같이 사용해 아래와 같은 경고 메시지가 발생했다. HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory 쿼리 결과를 전부 메모리에 적재한 뒤 Pagination 작업을 어플리케이션 레벨에서 하기 때문에 위험하다는 로그이다. limit에 의해 제한된 개수의 쿼리 결과를 가져올 것이라는 예상과는 다르게 작동하고 있었다. 이처럼, One에서 Many를 fetch 하는 경우 limit절 (Pagination을 위해) 포함 시 원하는 대로 결과가 나오지 않고, 성능상 문제가 발생할 수 있다. 문제 상황 재현 문제 상황 재현을 위한 ERD이다..

[ 개요 ] 서버를 운영하다 보면 hikari connection과 관련된 에러를 겪게 된다. 빈번하게 발생 가능한 에러라 정리해보려 한다. 먼저 ConnectionPool이 뭔지, HikariCP는 어떻게 동작하는지에 대해 알아보자. [ ConnectionPool ] ConnectionPool 이란 커넥션을 미리 생성해두고 사용하는 방법이다. 데이터베이스 커넥션을 새로 생성하는 것은 과정도 복잡하고, 많은 시간이 소요되므로 커넥션 풀을 사용한다. 커넥션 풀에 커넥션을 요청하면, 커넥션 풀은 자신이 갖고 있는 커넥션 중 하나를 반환한다. 커넥션을 모두 사용하고 나면 커넥션을 종료하는 것이 아니라 커넥션 풀에 반환한다. 커넥션 풀을 사용하면 커넥션 수를 제한할 수 있어 과도한 접속으로 인한 서버 자원 고갈..