본문 바로가기

개발 공부/Spring

[Spring]Hikari CP(Connection Pool)

우선 JDBC에 대해서 알아야 한다.

 

JDBC(Java DataBase Connectivity)란 자바에서 DB에 접속하기 위해 사용되는 API이다.

 

JDBC API

DBMS 제조사들이 자신들의 DB에 맞게 Interface의 메소드를 구현하여 제공한다.

 

JDBC 연결 순서

1. JDBC Driver 로딩

2. DataBase 연결 - DB서버의 IP, ID, PW등을 DriverManager 클래스의 getConnection 메소드를 사용하여 Connection 객체 생성

3. SQL 문장 실행 - Connection으로 부터 PreparedStatement 체를 받고, executeQuery를 수행하고 ResultSet 객체를 받아 데이터를 처리한다.

4. 연결 종료 - 사용했던 ResultSet, PreparedStatement, Connection을 close한다. (역순으로 닫는다.)

 

연결을 종료하지 않으면 계속 연결이 유지되어 불필요한 자원(네트워크 or 메모리)을 낭비한다.

 

이러한 일련의 과정을 거쳐 Java 애플리케이션과 Database가 연동이 되어 원하는 데이터를 처리할 수 있다.

이 과정중에서 가장 오래 걸리는 부분을 예상한다면 2번 과정의 Connection 객체를 얻는 부분이다.

만일, 사용자가 급증한다면 서버 환경에선 반복적으로 Connection 객체를 얻기 위해 많은 시간을 소모하게 된다.

 

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

이때 등장한 개념이 DB Connection Pool이다.

 

 

DB Connection Pool이란,

사용자의 요청에 따라 무수한 Connection을 생성하다보면 서버에 과부하가 걸리게 되는데

이러한 상황을 방지하기 위해 미리 설정해놓은 일정 수의 Connection을 만들어 놓고 Connection Pool에 보관해둔다.

그 후 요청이 발생하면 제공을 해주고 Connection의 사용이 끝난다면 다시 이러한 DB Connection Pool에 반환하여 보관한다. 

 

DB Connection Pool의 장점

  • DB접속 설정 객체를 미리 만들어 연결하여 메모리상에 등록해놓기 때문에 클라이언트가 빠르게 DB에 접속 가능.
  • DB Connection 수를 제한할 수 있어서 과도한 접속으로 인한 서버 자원 고갈 방지 가능
  • DB 접속 모듈을 공통화해 DB서버의 환경이 바뀔 경우 쉬운 유지보수가 가능하다.
  • 연결이 끝난 Connection을 재 사용함으로써 새로 객체를 만드는 비용을 줄일 수 있다.

 

 

Hikari CP

Springboot 2.0부터 기본으로 설정되어 있는 DB Connection Pool로써 Zero-Overhead가 특징으로 높은 성능을 자랑하는 DB Connection Pool이다.

Hikari CP는 미리 정해놓은 만큼의 Connection을 Connection Pool에 담아놓는다.

그 후 요청이 들어오면 Thread가 Connection을 요청하고, Hikari는 Connection Pool내에 있는 Connection을 연결해주는 역할을 한다.

 

JAVA에서 Connection Pool을 사용할 때는 데이터 소스 타입의 객체로 준비해서 사용했는데, 이러한 데이터 소스를 구현하는 게 Hikari CP이다. 즉, 데이터 소스를 객체로써 제공해준다.

 

출처: https://blog.naver.com/dong4726/222387057990

 

 

용어 설명

  • Process - 컴퓨터에서 실행할 수 있는 파일. 즉 컴퓨터가 어떤 일을 하고 있는 상태를 프로세스라고 한다.
  • Thread 하나의 프로세스 내에서도 여러 갈래의 작업들이 동시에 진행될 필요가 있는데, 이 갈래를 쓰레드라고 한다.