Connection Pool 이란?
- Connection Pool을 사용하는 이유
- Connection Pool 살펴보기
- Connection Pool은 필수
에 대해 다룹니다.
Connection Pool을 사용하는 이유
JDBC는 기본적으로 DriverManager를 제공하며
DriverManager는 매번 새로운 Connection을 획득합니다.
하지만 DB Connection을 매번 획득하는 것은 좋지 않습니다.
그 이유는 DB Connection을 획득할 때는
다음과 같은 복잡한 과정을 거치기 때문입니다.
애플리케이션 로직은 DB Driver를 통해 Connection을 조회합니다.
DB Driver는
DB와 TCP/IP를 통해 Connection을 연결합니다.
TCP/IP는 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생합니다.
TCP/IP Connection이 연결되면
ID, PW와 같은 기타 부가 정보를 DB에 전달합니다.
DB는 ID, PW를 통해 내부 인증을 완료하고
내부에 DB Session을 생성합니다.
그리고 Connection 생성이 완료되었다는 응답을 보냅니다.
DB Driver는
Connection 객체를 생성해서
클라이언트에 반환합니다.
서버 또한 클라이언트가 될 수 있습니다.
Connection을 새로 만드는 것은
과정도 복잡하고 시간도 많이 소모되는 일입니다.
DB, WAS(Web Application Server)에서
TCP/IP Connection을 새로 생성하기 위한 리소스를 매번 사용해야 합니다.
가장 큰 문제는
클라이언트의 요청에 응답할 때
SQL을 실행하는 시간 + Connection을 새로 만드는 시간
이 소요되기 때문에 결과적으로 응답 속도에 큰 영향을 미친다는 것입니다.
사용자에게 좋지 않은 경험을 줄 수 있습니다.
DB Connection을 매번 획득하는 게 문제라면
Connection을 미리 생성해두고 사용하면 되지 않는가?라는 생각에서 나온 방법이
Connection Pool입니다.
Connection Pool 살펴보기
Connection Pool을 사용하는 것을
시점을 나누어서 살펴보겠습니다.
애플리케이션을 시작하는 시점
- 초기화
애플리케이션을 시작하는 시점에
Connection Pool은 필요한 만큼 Connection을 미리 확보해서 Pool에 보관합니다.
보통 얼마나 보관할지는
서비스의 특징과 서버 스펙에 따라 다르다.
기본값은 보통 10개이다.
- 연결 상태
Connection Pool에 들어있는 Connection은
TCP/IP로 DB와 Connection 이 연결되어 있는 상태이기 때문에
언제든지 즉시 SQL을 DB에 전달할 수 있습니다.
Connection Pool을 사용하는 시점
- Connection 획득
애플리케이션 로직에서
더 이상 DB Driver를 통해 새로운 Connection을 획득하지 않습니다.
Connection Pool을 통해 이미 생성되어 있는 Connection을
객체 참조로 가져다 사용하기만 하면 됩니다.
Connection Pool에 Connection을 요청하면
Connection Pool은 자신이 가지고 있는 Connection 중에 하나를 반환해 줍니다.
- Connection 사용
애플리케이션 로직은
Connection Pool에서 받은 Connection을 사용해서
SQL을 데이터베이스에 전달하고, 그 결과를 받아서 처리합니다.
Connection Pool을 사용한다면,
Connection을 모두 사용하고 나서도
Connection을 종료하지 않습니다.
다음에 다시 사용할 수 있도록
해당 Connection을 그대로 Connection Pool에 반환합니다.
Connection Pool은 필수
적절한 Connection Pool 숫자는
서비스의 특징과 애플리케이션 서버 스펙, DB 서버 스펙에 따라 다르기 때문에
성능 테스트를 통해서 정해야 합니다.
Connection Pool은
서버당 최대 Connection 수를 제한할 수 있습니다.
따라서 DB에 과하게 많은 Connection이 한 번에 생성되는 것을 막아주기 때문에
DB를 보호해주는 효과도 있습니다.
이런 Connection Pool은 얻는 이점이 매우 크기 때문에 항상 기본으로 사용됩니다.
참고로 Connection Pool은 직접 구현하기보다는
사용도 편리하고 성능도 뛰어난 오픈소스 Connection Pool을 사용합니다.
대표적인 Connection Pool 오픈 소스로는
HikariCP 등이 있습니다.
HikariCP
스프링 부트(Spring Boot) 2.0부터는
기본 Connection Pool로 HikariCP를 제공하며 대부분 이를 사용하고 있습니다.
다음 글로 Connection Pool을 사용하기 위해 Connection을 획득하는 DataSource에 대해 알아보겠습니다.
DataSource와 Connection Pool - DataSource 란?
이전 글로 Connection Pool에 대해 알아보았습니다. DataSource와 Connection Pool - Connection Pool 이란? Connection Pool 이란? Connection Pool을 사용하는 이유 Connection Pool 살펴보기 Connection Pool은 필수 에 대해 다룹
hhhhicode.tistory.com
'Spring Data > DataSource와 Connection Pool' 카테고리의 다른 글
DataSource와 Connection Pool - DataSource 란? (0) | 2022.12.08 |
---|
댓글