Connection Pool
: 데이터베이스와의 연결을 효율적으로 관리하기 위한 미리 생성된 데이터베이스 연결의 집합.
애플리케이션이 데이터베이스에 연결할 때마다 새로운 커넥션을 생성하고 닫으면 성능 저하가 발생할 수 있기 때문에, 이러한 과정을 최적화하기 위해 커넥션 풀을 사용합니다.
미리 일정 수의 커넥션을 준비해 두고, 애플리케이션이 요청할 때 즉시 사용할 수 있도록 하여 성능을 향상시킵니다.
[Connection 객체 생성 과정]
1️⃣ 애플리케이션에서 DB 드라이버를 통해 커넥션 조회
2️⃣DB 드라이버는 DB와 TCP/IP 커넥션을 연결
3️⃣DB 드라이버는 TCP/IP 커넥션이 연결되면 아이디와 패스워드, 기타 부가 정보를 DB에 전달
4️⃣DB는 ID,Password를 통해 내부 인증을 거친 후 내부에 DB 생성
5️⃣DB는 커넥션 생성이 완료되었다는 응답을 보냄.
6️⃣DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환
➡️DB 연결할 때마다 Connection 객체를 새로 만드는 것 : 많은 비용 & 비효율적.
[커넥션 풀의 작동 방식]
- 풀 초기화: 애플리케이션 시작 시 미리 일정 수의 데이터베이스 커넥션을 생성해 풀에 넣습니다.
- 커넥션 요청 및 할당: 애플리케이션이 데이터베이스에 접근하려고 할 때, 커넥션 풀에서 사용 가능한 커넥션을 할당합니다.
- 커넥션 반환: 사용이 끝난 커넥션은 닫지 않고 풀로 반환하여 재사용할 수 있도록 합니다.
- 풀 관리: 커넥션 풀은 최소 및 최대 커넥션 수를 설정하여, 필요 시 새로운 커넥션을 추가로 생성하거나 사용하지 않는 커넥션을 닫습니다.
➡️ DB 드라이버를 통해 커넥션을 조회, 연결, 인증, SQL을 실행하는 시간 등 커넥션 객체를 생성하기 위한 과정 생략
[주요 커넥션 풀 라이브러리]
- Apache DBCP (Database Connection Pooling): 성능과 안정성이 검증된 커넥션 풀 라이브러리로, Apache Commons 라이브러리의 일부로 제공됩니다.
- HikariCP: 빠른 성능과 가벼운 구조로 인기 있는 커넥션 풀 라이브러리로, 특히 고성능을 요구하는 애플리케이션에 적합합니다.
- C3P0: 널리 사용되는 커넥션 풀 라이브러리 중 하나로, 설정이 용이하고 안정성이 높은 편입니다.
[참고]
'Backend > Java' 카테고리의 다른 글
| [Java]Thread (0) | 2024.11.01 |
|---|---|
| [Java]Enum(열거형) (2) | 2024.10.31 |
| [Java] 중첩클래스 (0) | 2024.10.31 |
| [Java]Java IO(Exception/throw/File/스트림) (0) | 2024.10.24 |
| [Java] Collection (2) | 2024.10.23 |