DB/개념 정리

[DB] Connection Pool 정리

꾸준함. 2023. 3. 20. 16:06

기존에 작성한 JDBC 정리글을 먼저 읽고 오시면 내용을 이해하는데 도움이 될 것 같습니다.

https://jaimemin.tistory.com/2266

 

JDBC 정리

JDBC란? JDBC(Java Database Connectivity)는 Java에서 DB에 접속할 수 있도록 하는 자바 API입니다. 시중에 다양한 DB가 존재하는데 각각의 데이터베이스마다 연결하는 방법, SQL을 전달하는 방법, 그리고 응답

jaimemin.tistory.com

 

Connection Pool

데이터베이스에 연결을 할 때는 아래와 같이 복잡한 과정을 거쳐야 합니다.

  • 비즈니스 로직이 JDBC 드라이버를 통해 커넥션을 조회
  • JDBC 드라이버는 DB와 TCP/IP 연결을 진행 (3 way handshake)
  • TCP/IP 연결되면 아이디, 비밀번호와 같은 부가정보를 DB에 전달
  • DB는 받은 부가정보를 통해 인증을 완료하고 내부에 DB 세션 생성
  • DB는 커넥션 생성이 완료 응답
  • JDBC 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환

 

이처럼  DB에 연결하는 과정은 복잡하고 애플리케이션 서버에도 TCP/IP 커넥션을 생성하기 위한 리소스를 사용하기 때문에 응답속도에 유의미한 영향을 줄 수 있는 과정입니다.

따라서 쿼리가 실행될 때마다 커넥션을 연결하는 것이 아니라 커넥션을 미리 생성해 두고 사용하는 커넥션 풀이라는 개념이 등장했습니다.

 

커넥션 풀은 애플리케이션이 로딩하는 시점에 설정값만큼 DB 커넥션을 미리 확보해서 풀 내에 관리하고 각각의 커넥션들은 TCP/IP 연결로 DB와 연결되어 있는 상태이기 때문에 언제든지 SQL을 DB에 전달할 수 있습니다.

 

커넥션 풀이라는 개념이 도입되면서 비즈니스 로직은 기존처럼 JDBC 드라이버를 통해 새로운 DB 커넥션을 획득하는 것이 아니라 풀에서 관리되는 커넥션을 그냥 가져다 쓰면 되게 바뀌었습니다.

비즈니스 로직은 connection pool로부터 받은 커넥션을 사용해서 SQL을 DB에 전달하고 그 결과를 받아서 처리한 뒤 다음에 해당 커넥션을 다시 사용할 수 있도록 커넥션이 살아있는 상태로 커넥션 풀에 반환합니다.

 

정리하자면 커넥션 풀은 애플리케이션이 로딩하는 시점에 DB 커넥션을 설정한 만큼 확보함에 따라 클라이언트가 매번 요청할 때마다 커넥션을 생성하는 것보다 시간을 단축시켜 주는 장점을 가지고 있습니다.

또한, 커넥션 풀은 DB에 무한정 연결이 생성되는 것을 막아주기 때문에 DB를 보호하는 효과도 있습니다.

  • 커넥션 풀의 한도보다 많은 커넥션이 생성될 경우 지정된 timeout 시간만큼 대기하다가 커넥션이 확보가 안될 경우 예외를 뱉기 때문에 timeout 시간은 비교적 짧게 가져가는 것이 좋습니다. (사용자가 마냥 대기할 수 없기 때문에)

 

위와 같은 장점 때문에 커넥션 풀은 실무에서 항상 기본적으로 사용되며 편리하고 성능이 뛰어난 오픈소스도 다수 존재합니다.

주로 사용되는 오픈소스로는 HikariCP가 있고 Springboot 2.X부터는 해당 오픈소스가 기본적으로 탑재되어 있기 때문에 레거시 프로젝트가 아닌 이상 대부분 HikariCP를 사용하고 있습니다.

 

참고

스프링 DB 1편 - 데이터 접근 핵심 원리 (김영한 강사님)

반응형

'DB > 개념 정리' 카테고리의 다른 글

[용어 정리] DAO, DTO, VO, Mapper, Repository, Entity  (0) 2023.11.06
[DB] 트랜잭션과 DB Lock 정리  (0) 2023.03.20
[DB] JDBC 정리  (2) 2023.03.17