[DB] Connection Pool

박세건·2024년 4월 12일
0

CS 학습

목록 보기
8/23

Connection Pool 이란

JDBC API를 사용해서 DB와 연결하기 위해서는 Connection 객체를 생성해야한다. 이때 Connection 객체를 생성하는 작업을 많은 비용이 드는 작업이다. 때문에 매번 DB를 사용할때마다 Connection 객체를 생성해서 연결해주는 과정은 비효율적이다. 이러한 상황을 해결하기위해 어플리케이션 로딩 시점에 Connection 객체들을 미리 생성해두고 DB를 접근해야할때 미리 생성했던 Connection 객체들을 사용하는 Connection Pool이라고 한다.


일반 Connection 객체를 생성하는 과정

  1. 어플리케이션에서 DB 드라이버를 통해 Connection을 조회한다.
  2. DB 드라이버는 DB와 TCP/IP Connection을 연결해준다.(3 way handshake 동작)
  3. 연결 후에 아이디, 패스워드, 기타 정보를 DB에 전달한다.
  4. 인증을 통해 내부에 DB를 생성한다.
  5. DB드라이버는 Connection 생성이 완료되었다는 응답을 보낸뒤 클라이언트에게 반환한다.

Connection Pool을 생성하는 과정

  1. 어플리케이션이 시작하는 시점에 커넥션 풀은 필요한 만큼의 커넥션을 보관하게된다.
  2. 서비스마다 생성되는 커넥션 개수는 다르지만 일반적으로 10개를 생성한다.
  3. Connection을 미리 생성했기에 TCP/IP로 DB와 연결되어있는 상태이고 즉시 DB에 접근이 가능하다.
  4. Connection을 사용한 후에는 다시 Connection Pool에 반납합니다.

동작 구조


Connection Pool을 직접 구현할 수 있지만, 성능이 뛰어난 오픈소스가 많기에 오픈소스 사용을 권장한다.

  • Spring Boot 2.0 이전에는 Apache Commons DBCP를 주로 사용하였지만, Spring Boot 2.0 이후로는 HikariCP를 기본 DBCP로 채택하였다.
  • 다른 오픈 소스 들과 비교했을때에 뛰어난 성능을 보여준다.

관련 코드

주의사항

  • Connection 수를 설정하는데에 너무 많은 Connection을 생성하거나 너무 적은 Connection을 생성하게도면 오히려 성능을 떨어뜨릴 수도 있다.
  • 그렇기에 Connection 수를 적절하게 생성하는 것이 중요하다.

무조건 Connection Pool을 사용하는 것이 좋을까

사용자의 요청이 많다면 Connection Pool을 사용하는 것을 권장하지만 사용자의 요청이 적고 동시 접속자 수가 거의 없다면 DB의 접근이 필요할때마다 Connection을 생성해서 빠르게 연결하고 끊어주는 것이 성능 향상에 도움이 될 수 있다. 즉, 상황에 맞춰서 사용하는 것이 중요하다!

profile
멋있는 사람 - 일단 하자

0개의 댓글

관련 채용 정보