DB

database connection pool(dbcp)

커넥션 풀이란 DB와 미리 연결(connection)을 해놓은 객체들을 웅덩이(pool)에 저장해두었다가 클라이언트 요청이 오면 커넥션을 빌려주고, 볼일이 끝나면 다시 커넥션을 반납받아 pool에 저장하는 방식을 말한다.

일반적으로 한명의 유저가 서비스에 접속 하려고 하면 DB에 접근하기위해서 커넥션을 생성하고 유저에게 해당 커넥션을 주었다가 유저가 접속을 종료하면 해당 커넥션을 끊어야한다.

이러한 경우 유저가 많아지면 많아질수록 커넥션을 생성/끊기를 많이 하게 되는데 이때 커넥션 풀을 사용하게 되면 미리 연결을 맺고 있는 커넥션들을 유저에게 주었다가 반납받아서 커넥션을 생성/끊기라는 불필요한 과정을 거치지 않아도 되서 성능 향상을 기대 할수 있는것이다.

커넥션 풀을 사용할때는 유저의 수에 맞게 적절한 커넥션 수를 유지해야한다.

커넥션 수에 비해서 서비스에 접속하는 유저가 많아질 경우 커넥션을 받지 못한 유저의 경우 커넥션이 반납되어 배부 받기 전까지 기다려야한다.

그러나 커넥션을 막 늘리는것은 커넥션이라는 객체가 차지하는 메모리가 많아지게 되고 성능이 떨어지게 된다.

커넥션 풀의 속성

속성

설명

maxActive

커넥션 풀이 제공할 최대 커넥션 갯수

whenExhaustedAction

커넥션 풀에서 가져올 수 있는 커넥션이 없을 때 어떻게 동작할지를 지정.

0일 경우 에러 발생

1일 경우 maxWait 속성에서 지정한 시간만큼 커넥션을 구할때까지 기다림.

2일 경우 일시적으로 커넥션을 생성해서 사용

maxWait

whenExhaustedAction 속성의 값이 1일 때 사용되는 대기 시간.

단위는 1/1000초, 0보다 작을 경우 무한히 대기

maxIdle

사용되지 않고 풀에 저장될 수 있는 최대 커넥션 갯수.

음수일 경우 제한이 없음

minIdle

사용되지 않고 풀에 저장될 수 있는 최소 커넥션 갯수.

testOnBorrow

true일 경우 커넥션 풀에서 커넥션을 가져올 때 커넥션이 유효한지의 여부를 검사

testOnReturn

true일 경우 커넥션 풀에 커넥션을 반환할 때 커넥션이 유효한지의 여부를 검사

timeBetweenEvctionRunsMillis

사용되지 않는 커넥션을 추출하는 쓰레드의 실행 주기 지정.

양수가 아닐 경우 실행되지 않는다.

시간 단위는 1/1000초.

numTestsPerEvictionRun

사용되지 않는 커넥션을 몇 개 검사할 지 지정

minEvictableIdleTimeMillis

사용되지 않는 커넥션을 추출할 때 이 속석에서 지정한 시간 이상 비활성화 상태인 커넥션만 추출.

양수가 아닌 경우 비활성화된 시간으로는 풀에서 제거되지 않음.

시간 단위는 1/1000초

testWhileIdle

true일 경우 비활성화 커넥션을 추출할 때 커넥션이 유효한지의 여부를 검사해서 유효하지 않은 커넥션은 풀에서 제거.

jsp의 경우

이러한 커넥션 풀은 jocl 파일에 설정하게 됨.

poo.jocl 에 설정 예)

이렇게 설정파일을 만들고

db 연결때 Strng jdbcDriver = jdbc:apache:commons:dbcp:/pool 이렇게 사용한다.

여기서 pool은 jocl 파일의 이름이다.

spring의경우

dataSource 에 property로 설정한다.

예)

'DB' 카테고리의 다른 글

인덱스 알고리즘 B tree 간단 개념 정리  (0) 2021.04.23
인덱스 개념 간단 정리  (0) 2021.04.22