dbcp
Connection Pool의 구현체의 역할은 이렇다:
WAS가 실행되면서 미리 일정량의 DB Connection 객체를 생성하고 Pool 이라는 공간에 저장해 둔다.
HTTP 요청에 따라 필요할 때 Pool에서 Connection 객체를 가져다 쓰고 반환한다.
이와 같은 방식으로 HTTP 요청 마다 DB Driver를 로드하고 물리적인 연결에 의한 Connection 객체를 생성하는 비용이 줄어들게 된다.
더 구체적으로 살펴보자:
Connection Pool를 효율적으로 관리하기 위한 값들이 존재하는데 이러한 값들은 DBCP 구현체를 제공하는 라이브러리를 통해 설정 할 수가 있다.
Value Description
maxActive 동시에 사용할 수 있는 최대 커넥션 개수
maxIdle Connection Pool에 반납할 때 최대로 유지될 수 있는 커넥션 개수
minIdle 최소한으로 유지할 커넥션 개수
initialSize 최초로 getConnection() Method를 통해 커넥션 풀에 채워 넣을 커넥
션 개수
아래의 그림을 살펴보면 Pool에 Connection 을 Idle(대기) 상태로 두었다고, 실제 사용하는(Active) 모습인데 DBCP를 관리하기 위한 올바른 설정 값에 대해 살펴 보도록 하자.
maxActive >= initialSize
최대 커넥션 개수는 초기에 생성할 커넥션 개수와 같거나 크게 설정해야 한다.
maxActive = maxIdle
maxActive 값과 maxIdle 값은 같은 것이 바람직하다. 만약 둘의 값이 아래와 같다고 가정해보자.
maxActive = 10
maxIdle = 5
항상 커넥션을 동시에 5개는 사용하고 있는 상황에서 1개의 커넥션이 추가로 요청된다면 maxActive = 10이므로 1개의 추가 커넥션을 데이터베이스에 연결한 후 Pool은 비즈니스 로직으로 커넥션을 전달한다. 이후 비즈니스 로직이 커넥션을 사용 후 풀에 반납할 경우, maxIdle = 5에 영향을 받아 커넥션을 실제로 닫아버리므로, 일부 커넥션을 매번 생성했다 닫는 비용이 발생할 수 있다.
Leave dbcp to:
Read more #dbcp posts
Best Posts From 조각이론
We have not curated any of kimdonghyun76's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.