Spring Boot에서 자동으로 설정되는 커넥션 풀로 API 요청 속도 향상

들어가며

특별히 무엇인가를 해결한 내용은 아니고, 개발 도중에 궁금해서 찾아본 내용을 정리해놓은 글이다.

카풀 프로젝트인 MIO 에서 Fetch.LAZY 와 EAGER 로 인한 성능을 AOP를 이용하여 메서드 실행시간을 측정하다 보니, 중복 API 요청에 대한 속도 차이가 굉장히 크게 나는 것을 확인했다.

1

위 사진은 중복 API 요청에 대한 속도 차이를 확인한 사진이다.

왜 이런 결과가 나오는 지 궁금해져서 검색을 하던 도중 커넥션 풀에 대해 알게되었다.

커넥션 풀

커넥션 풀이란 추가 요청이 필요할 때 연결을 재사용할 수 있도록 관리되는 데이터베이스 연결의 캐시라고 한다.

Spring 2.0 부터는 Default 커넥션 풀로 hikariCP를 자동으로 제공해준다고 한다.

커넥션 풀

  1. 애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼의 커넥션을 미리 확보해서 커넥션 풀에 보관한다.

  2. 보통 커넥션의 개수는 Default로 10개다.

  3. 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 즉시 SQL을 DB에 전달할 수 있다.

커넥션 풀 사용 과정

2

  1. 애플리케이션에서 DB 커넥션을 요청한다.

  2. 커넥션 풀에서 사용 가능한 커넥션을 찾는다.

  3. 애플리케이션 로직은 커넥션 풀에서 받은 커넥션을 사용해서 SQL을 DB에 전달하고, 그 결과를 받아서 처리한다.

  4. 애플리케이션 로직이 SQL 처리를 마치면 커넥션을 커넥션 풀에 반환한다.

결과

결과적으로 커넥션 풀은 사용 중인 연결을 재사용한다는 것이다.

클아이언트가 연결을 반환하면 이 연결을 다시 사용 가능한 상태로 설정하고 다음 요청에 재사용한다.

이 과정에서 중복 연결 생성 및 해제로 인한 오버헤드를 방지하고 애플리케이션의 응답속도를 빠르게 유지하는 데 도움이 된다.

Leave a comment