Database

[DB] Database Connection Pool이란

프로그래민 2021. 1. 4. 15:27
반응형

DB Connection Pool에 대해 알아보기 전에 우선 JDBC에 대해 알아보았다. 기본적으로 JDBC는 다음과 같은 과정을 거친다.

  1. DB벤더에 맞는 드라이버 로드
  2. DB서버의 IP, ID, PW등을 DriverManager 클래스의 getConnection 메소드를 사용하여 Connection 객체 생성
  3. Connection으로 부터 PreparedStatement 객체를 받음
  4. executeQurey를 수행하고 ResultSet객체를 받아 데이터를 처리
  5. 사용했던 ResultSet, PreparedStatement, Connection을 close

이러한 일련의 과정을 거쳐 Java 애플리케이션과 Database가 연동이 되어 원하는 데이터를 처리할 수 있다. 이 과정중에서 가장 오래 걸리는 부분을 예상한다면 2번 과정의 Connection 객체를 얻는 부분이다. 이유는 DB서버와 애플리케이션 사이의 통신이기에 같은 장비에 둘다 존재하더라도 시간이 걸리기 때문이다. 만일, 사용자가 급증한다하면 서버 환경에선 반복적으로 Connection 객체를 얻기 위해 엄청난 시간을 소모할 것이다.

만약에 이러한 필요한 양만큼의 Connection 객체를 미리 얻어놓는다면 Connection 객체를 생성하는 부분에서 발생하는 대기 시간을 줄이고 네트워크의 부담을 줄일 수 있을 것이다. 이때 등장한 개념이 DB Connection Pool이다.

 

Database Connection Pool이란?

DB Connection Pool

사용자의 요청에 따라 무수한 Connection을 생성하다보면 서버에 과부하가 걸리게 된다. 이러한 상황을 방지하기 위해 미리 설정해놓은 일정수의 Connection을 만들어 놓고 이것을 Connection Pool에 보관해두었다가 요청이 발생하면 제공을 해주고 Connection의 사용이 끝난다면 다시 Connection Pool에 반환하여 보관하는 기술을 DB Connection Pool이라고 한다. 이러한 DB Connection Pool을 사용한다면 다음과 같은 장점이 있다.

  • DB접속 설정 객체를 미리 만들어 연결하여 메모리 상에 등록해 놓기 때문에 클라이언트가 빠르게 DB에 접속 가능
  • DB Connection 수를 제한 할 수 있어서 과도한 접속으로 인한 서버 자원 고갈 방지 가능
  • DB 접속 모듈을 공통화해 DB서버의 환경이 바뀔 경우 쉬운 유지보수 가능
  • 연결이 끝난 Connection을 재사용함으로써 새로 객체를 만드는 비용을 줄일 수 있음
참고 : DataSource와 DB Connection Pool의 차이
DataSource는 JDK 1.4버전부터 생긴 표준이다. DataSource는 Connection Pool로 연결을 관리해야 하고, 트랜잭션 관리도 가능하게 만들어야 한다. 그러므로 DataSource가 DB Connection Pool을 포함한다고 생각해 두면 된다. 여기서 유의할 점은 DB Connection Pool은 Java 표준으로 지정되어 있는 것이 없다는 점이다. 따라서 WAS 벤더에 따라서 사용법이 상이할 수 있다. 그러나 DataSource는 Java 표준이므로 WAS에 상관없이 사용법은 동일하다.

 

 

HikariCP란?

mybatis-spring-boot-starter내부의 HikariCP

HikariCP란 Springboot 2.0 부터 default로 설정되어 있는 DB Connection Pool로써 Zero-Overhead가 특징으로 높은 성능을 자랑하는 DB Connection Pool이다. HikariCP는 미리 정해놓은 만큼의 Connection을 Connection Pool에 담아 놓는다. 그 후 요청이 들어오면 Thread 가 Connection을 요청하고, Hikari는 Connection Pool내에 있는 Connection을 연결해주는 역할을 한다. 

Springboot 환경에서는 application.properties에서 간단하게 HikariCP의 설정을 할 수 있다. 

HikariCP의 설정

위와 같은 설정을 application.properties에서 해줄 수 있다. 원하는 HikariCP의 연결정보 뿐만 아니라 원하는 Connection Pool의 크기, 시간 등등을 설정해줄 수 있다.

 

출처
linked2ev.github.io/spring/2019/08/14/Spring-3-%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80%EC%9D%B4%EB%9E%80/
www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=18&dbnum=183740&mode=detail&type=techreport
brunch.co.kr/@jehovah/24
반응형

'Database' 카테고리의 다른 글

[DB] Database의 샤딩(Sharding)  (0) 2022.02.08
[NoSQL] Redis란  (2) 2021.07.03
[DB] HikariCP의 옵션  (0) 2021.03.31