커넥션 풀(Connection Pool)?

Ruinak·2021년 8월 16일
0

Glossary

목록 보기
15/26
post-thumbnail

1. 커넥션 풀(DBCP)이란?

  • 웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection(연결)을 해놓은 객체들을 pool에 저장해두었다가, 클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식을 말합니다.

2. 커넥션 풀(DBCP)을 사용하는 이유

  • 자바에서 DB에 직접 연결해서 처리하는 경우(JDBC) 드라이버(Driver)를 로드하고 커넥션(connection) 객체를 받아와야 합니다.

  • 매번 사용자가 요청을 할 때마다 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 매우 비효율적입니다.

  • 위와 같은 문제를 해결하기 위해서 커넥션풀(DBCP)를 사용합니다.

DBCP란?

  • DataBase Connection Pool 의 약자로 DB와 커넥션을 맺고 있는 객체를 관리하는 역할을 합니다.

3. 커넥션 풀(DBCP) 특징

  • 웹 컨테이너(WAS)가 실행되면서 connection 객체를 미리 pool에 생성해 둡니다.

  • HTTP 요청에 따라 pool에서 connection객체를 가져다 쓰고 반환합니다.

  • 이와 같은 방식으로 물리적인 데이터베이스 connection(연결)부하를 줄이고 연결 관리합니다.

  • pool에 미리 connection이 생성되어 있기 때문에 connection을 생성하는 데 드는 요정 마다 연결 시간이 소비되지 않는다.

  • 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수를 제한적으로 설정합니다.

동시 접속자가 많을 경우

  • 위에 커넥션 풀 설명에 따르면, 동시 접속 할 경우 pool에서 미리 생성 된 connection을 제공하고 없을 경우는 사용자는 connection이 반환될 때까지 번호순대로 대기상태로 기다린다.

  • 여기서 WAS에서 커넥션 풀을 크게 설정하면 메모리 소모가 큰 대신 많은 사용자가 대기시간이 줄어들고, 반대로 커넥션 풀을 적게 설정하면 그 만큼 대기시간이 길어진다.

4. Apache의 Commons DBCP

  • 커넥션 풀에는 Commons DBCP와 Tomcat-JDBC, BoneCP, HikariCP 등이 있는데, 우리는 이미 스프링 웹 프로젝트에서 자신도 모르게 사용하고 있을 수 있습니다.

Commons DBCP 구조

  • 8개의 커넥션을 최대로 활용할 수 있는 상태

  • 4개는 사용 중이고 4개는 대기 중인 상태

  • 커넥션 개수와 관련된 속성은 다음과 같은 조건을 논리적 오류가 없게 설정하는걸 추천합니다.
    - maxActive >= initialSize
    - maxIdle >= minIdle
    - maxActive = maxIdle

JSP

  • JSP 수업 들을 때 Blog 프로젝트 수업을 진행하면서 CP를 사용 안한게 아니라, DataSource란 DBCP를 사용했었습니다.

DataSource

  • DataSource는 java.sql 패키지의 기능을 보조하기 위한 javax.sql 패키지에 들어있다.

  • DataSource는 java.sql 패키지의 DriverManager를 통해 DB 커넥션을 얻는 것에 비해 다음과 같은 장점을 가지고 있다.
    - 서버에서 관리하기 때문에 데이터베이스나 JDBC 드라이버가 변경되더라도 애플리케이션을 바꿀 필요가 없습니다.
    - 자체적으로 커넥션풀 기능을 구현하기 때문에 웹 애플리케이션 쪽에서 따로 작업할 것이 없습니다.
    - Connection과 Statement 객체를 풀링할 수 있습니다.
    - 분산 트랜잭션을 다룰 수 있습니다.

profile
Nil Desperandum <절대 절망하지 마라>

0개의 댓글