Spring Model/01. Model

Connection Pool

  • -

이번 포스트에서는 Connection Pool에 대해 살펴보자.

 

Connection Pool

 

개념과 필요성

"Connection Pool"이란 말 그대로 DB에 접속하기 위한 Connection들이 놀고 있는 수영장(Pool)이다.

DB에 접속하기 위해서는 Connection이라는 리소스가 필요하다. 이 리소스는 특정 요청이 지속적으로 점유하게 되면 리소스 누수가 발생할 수 있기 때문에, 사용 후에는 반드시 종료해서 다른 요청이 사용할 수 있게 해야 한다. 그런데 일반적으로 DB는 네트워크 저~멀리 있기 때문에 매번 접속하는데 상당한 비용이 든다. 따라서  한번 쓰고 종료하는것은 매우 비효율적이다.

Connection Pool

이런 문제를 해결하기 위해서 Connection Pool 개념이 등장했다. Connection Pool은 Connection을 미리 만들어서 Pool에 담아두고 필요할 때 Pool에 있는 Connection을 얻어서 사용하게 한다. 사용이 완료된 Connection은 종료시켜버리지 않고 다시 Pool에 반환해서 다음 요청을  처리하는데 재사용한다.

Connection Pool의 개념을 정의해 놓은 interface는 DataSource라는 녀석이다. 대표적인 DataSource의 구현체로는 HikariCP, Apache DBCP, Tomcat JDBC Connection Pool 등이 있는데 SpringBoot에서는 HikariCP가 기본으로 설정되어있다.

 

Connection 관리 방식

일반적으로 Connection Pool은 Connection 관리를 위해 MAX_POOL_SIZE, MIN_IDLE, IDLE_TIMEOUT 같은 속성을 사용한다.

속성 설명
MAX_POOL_SIZE 최대로 유지할 수 있는 Connection 의 개수
MIN_IDLE 실제 사용되지는 않더라도 최소한으로 유지할 유휴 Connection 의 개수
IDLE_TIMEOUT 유휴 Connection이 사용되지 않을 경우 완전 종료시키기 까지의 시간
CONNECTION_TIMEOUT Connection을 얻을 때까지 기다릴 수 있는 시간으로 이 시간을 넘으면 SQLException 발생
  1. 일반적으로 애플리케이션이 시작하면 MIN_IDLE의 개수만큼 Connection을 생성해 둔다.
  2. MIN_IDLE개 까지의 요청이 들어오면 이미 만들어진 Connection들을 이용해서 요청을 처리한다.
  3. MIN_IDLE 개수를 넘어서는 요청이 들어오면 추가적으로 Connection을 생성하는데 이 개수는 MAX_POOL_SIZE를 넘지는 못한다.
  4. 만약 MAX_POOL_SIZE를 넘는 개수의 요청이 들어오면 그 요청은 처리하지 못하므로 CONNECTION_TIMEOUT까지 대기하고 그래도 Connection을 얻지 못하면 SQLException이 발생하며 종료한다.
  5. 이후 요청들이 처리되서 Connection들이 반납되면 MIN_IDLE까지 줄어들 수 있는데 바로 종료시키지는 않고 IDLE_TIMEOUT까지 요청되지 않으면 완전 종료된다.

Connection Pool의 Connection 관리 방식

'Spring Model > 01. Model' 카테고리의 다른 글

@Repository의 역할  (0) 2024.03.22
Entity vs VO vs DTO  (0) 2023.10.19
03. 프로젝트 구성  (0) 2022.11.13
02. Spring Data와 Spring Data JPA  (0) 2020.06.22
01. Model 영역과 Spring  (0) 2019.09.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.