선 조치 후 분석

커넥션 풀 (Connection Pool) 본문

ETC/IT Knowledge

커넥션 풀 (Connection Pool)

JB1104 2023. 9. 12. 20:47
728x90
반응형
SMALL

커넥션 풀(Connection Pool) 개념을 이해하려고 개념을 정리하려고 시작했다. 커넥션 풀을 이해하려면 JDBC도 같이 이해하고 있어야 한다는 것을 느껴서 같이 정리해 본다.


JDBC

Java DataBase Connectivity의 약자로서 자바에서 데이터베이스와 관련된 작업을 처리할 때 사용하는 API

 

특징

  • DBMS의 종류 (ex: Oracle, MySql 등)에 상관없이 하나의 JDBC API 사용해서 데이터베이스 작업 처리

DB 커넥션 구조

 

2 Tier : 클라이언트로서의 자바 프로그램(JSP)이 직접 데이터베이스 서버로 접근하여 데이터 액세스하는 구조

구조 - Web Server -> DataBase

 

3 Tier : 자바 프로그램과 데이터베이스 서버 중간에 미들웨어 층(WAS)을 두어, 그 미들웨어 층에서 로직 구현, 트랜잭션 처리, 리소스 관리 등을 전부 밭기는 구조

구조 - Web Server -> Web Application Server -> DataBase


커넥션 풀 (Connection Pool)

데이터베이스 연결을 미리 생성하여 관리하는 기술로, 데이터 베이스 연결을 필요할 때마다 매번 새로운 연결을 생성하는 것이 아니라, 미리 생성된 연결을 풀(Pool)에 보관하고 필요할 때마다 재사용함으로써 성능과 자원 관리를 효율적으로 할 수 있게 해주는 개념

 

일반적으로 DB 연결 생성은 상대적으로 시간이 많이 소요되는 작업이다.

커넥션 풀은 이런 연결 생성 비용을 줄여주고, 동시에 연결을 재사용하여 더 빠른 응답 시간과 높은 성능을 달성할 수 있도록 도와준다. 커넥션 풀은 애플리케이션 서버나 웹 서버 같은 환경에서 많이 사용된다.

특징

  1. 성능 향상 : 커넥션을 미리 생성하고 관리하기 때문에 연결 생성 시간을 줄여준다.
  2. 자원 관리 : 커넥션을 재사용하므로 동시 접속자 수가 많은 상황에서도 안정적인 서비스를 제공할 수 있다.
  3. 부하 분산 : 여러 개의 커넥션을 동시에 관리하므로 부하가 분산되고 병목현상을 방지할 수 있다.
  4. 커넥션 리소스 해제 : 사용이 끝난 커넥션은 풀에 반환되어 리소스가 해제되므로 누수를 방지한다.
  5. 풀 사이즈 조절 : 풀의 크기를 조절하여 동시 접속자 수나 애플리케이션의 요구에 맞게 최적화된 설정 가능

Spring과 MyBatis와 같은 기술에서는 커넥션 풀을 사용하면서 DB 연결 관리를 더욱 편리하게 할 수 있도록 지원한다.

 

이를 통해 개발자는 복잡한 연결 관리 작업을 신경 쓰지 않고도 안정적이고 성능 좋은 애플리케이션을 개발할 수 있다.

 

 

커넥션 형성 시점

Connection Pool은 일반적으로 웹 애플리케이션 서버나 웹 서버가 시작될 때 형성된다.

애플리케이션이 시작되면서 미리 정해진 개수의 DB 연결이 생성되고 풀에 저장된다.

 

커넥션은 크면 클수록 좋은 건가?

무조건 크면 좋은 것은 아니다. 커넥션 풀의 크기는 애플리케이션의 트래픽과 요구사항에 맞게 조절되어야 한다.

커넥션도 객체이기에 너무 큰 커넥션 풀은 메모리 사용량을 증가시키고 자원을 낭비할 수 있다.

그리고 너무 적은 커넥션 풀은 동시에 처리할 수 있는 요청의 수를 제한한다.

 

조금 더 풀어서 설명하면, 커넥션을 사용하는 Thread의 개수보다 커넥션 풀의 크기가 크다면 사용되지 않고 남는 커넥션이 생겨서 메모리의 낭비가 발생하게 된다는 의미이다.

 

MySQL의 공식레퍼런스에서는 600여 명의 유저를 대응하는 데 있어서 15~20개의 커넥션 풀만으로도 충분하다고 한다.

 

대표적인 Connection Pool

  1. HikariCP : Spring 2.0부터 기본 JDBC Connection Pool, zero-overhead 
  2. Apache Commons DBCP : Apache에서 제공하는 대표적인 커넥션 풀 라이브러리
  3. Tomcat JDBC Pool :  Tomcat에 내장, Apache Commons DBCP  기반, Spring boot 2.0 이전의 기본 CP
Spring 2.0 이전에는 Tomcat-JDBC Pool을 사용했지만, 2.0 이후로는 HikariCP를 기본 옵션으로 채택하고 있다.

 

 

728x90
반응형
LIST