CS/DataBase

DB ConnectionPool

prden 2022. 12. 30. 19:54

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

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

 

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

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

 

DBCP는 웹 컨테이너(WAS)가 실행되면서 connection객체를 미리 pool에 생성해 두고, HTTP 요청에 따라  pool에서 connection객체를 가져다 쓰고 반환한다. 이런 방식으로 물리적인 데이터베이스 connection 부하를 줄이고 연결 관리한다. pool에 미리 connection이 생성되어 있어서 connection을 생성하는 데 드는 요청마다 연결 시간이 소비되지 않는다. 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수를 제한적으로 설정해야 한다. 

 

동접자 수가 많을 경우 pool에서 미리 생성된 connection을 제공하고 없을 경우는 사용자가 connection이 반환될 때까지 번호순대로 대기 상태로 기다린다. 이 때, WAS에서 커넥션 풀을 크게 설정한다면 메모리 소모가 큰 대신 사용자들의 대기시간이 줄어들고, 반대로 커넥션 풀을 적게 설정하면 그만큼 대기시간이 길어진다. 

 

 

https://linked2ev.github.io/spring/2019/08/14/Spring-3-%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80%EC%9D%B4%EB%9E%80/

 

[Spring] 커넥션 풀(Connection pool)이란?

커넥션 풀(Connection pool)에 대해서 그래도 알고 사용하자. 쉽게 알고 갔으면 좋겠습니다.

linked2ev.github.io

2. HikariCP?

HikariCP는 가벼운 용량과 빠른 속도를 가지는 JDBC 커넥션 풀 프레임워크이다.  SpringBoot는 커넥션 풀을 관리하기 위해 HikariCP를 사용한다. 

커넥션 풀의 크기와 성능

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

MySQL은 최대 연결 수를 무제한으로 설정한 뒤 부하 테스트를 진행하면서 최적화된 값을 찾는 게 좋다.

 

pool size = Tn *(Cm - 1) +1

Tn : 전체 Thread의 개수

Cm : 하나의 Task에서 동시에 필요한 Connection 수

https://techblog.woowahan.com/2663/

 

HikariCP Dead lock에서 벗어나기 (실전편) | 우아한형제들 기술블로그

{{item.name}} 1부 HikariCP Dead lock에서 벗어나기 (이론편)은 잘 보셨나요? 2부 HikariCP Dead lock에서 벗어나기 (실전편)에서는 실제 장애 사례를 기반으로 장애 원인을 설명하고 해결 사례를 공유하고자

techblog.woowahan.com

 

'CS > DataBase' 카테고리의 다른 글

ORACLE 실행계획, Hint, SQL 튜닝  (0) 2022.12.31
ORACLE 식별자  (0) 2022.12.31
Lock 과 트랜잭션 동시성 제어  (0) 2022.12.29
Oracle PL/SQL  (0) 2022.12.29
ORACLE 프로시저  (0) 2022.12.21