Backend/Java

[Java] 커넥션 풀

해로몬 2024. 10. 31. 17:17

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 객체를 새로 만드는 것 : 많은 비용 & 비효율적.

 

[커넥션 풀의 작동 방식]

  1. 풀 초기화: 애플리케이션 시작 시 미리 일정 수의 데이터베이스 커넥션을 생성해 풀에 넣습니다.
  2. 커넥션 요청 및 할당: 애플리케이션이 데이터베이스에 접근하려고 할 때, 커넥션 풀에서 사용 가능한 커넥션을 할당합니다.
  3. 커넥션 반환: 사용이 끝난 커넥션은 닫지 않고 풀로 반환하여 재사용할 수 있도록 합니다.
  4. 풀 관리: 커넥션 풀은 최소 및 최대 커넥션 수를 설정하여, 필요 시 새로운 커넥션을 추가로 생성하거나 사용하지 않는 커넥션을 닫습니다.

➡️ DB 드라이버를 통해 커넥션을 조회, 연결, 인증, SQL을 실행하는 시간 등 커넥션 객체를 생성하기 위한 과정 생략

 

 

[주요 커넥션 풀 라이브러리]

  • Apache DBCP (Database Connection Pooling): 성능과 안정성이 검증된 커넥션 풀 라이브러리로, Apache Commons 라이브러리의 일부로 제공됩니다.
  • HikariCP: 빠른 성능과 가벼운 구조로 인기 있는 커넥션 풀 라이브러리로, 특히 고성능을 요구하는 애플리케이션에 적합합니다.
  • C3P0: 널리 사용되는 커넥션 풀 라이브러리 중 하나로, 설정이 용이하고 안정성이 높은 편입니다.

 

 

 

 

[참고]

https://shuu.tistory.com/130

'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