이것저것
DBCP 본문
[DBCP란?]
서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재한다.
일반적으로 Connection Pool을 이용하지 않으면 동시 접속자 수를 벗아나게 될 경우 에러(예외)가 발생하게 됩다. 예외가 발생하게 된다면 접속자는 더 이상 처리를 하지 못하므로, 사이트 이용자는 다시 접속을 시도해야하는 불편함이 있다. 이를 해결하기 위해 탄생한 것이 Connection Pool이다.
Connection Pool이란 동시 접속자가 가질 수 있는 Connection을 하나로 모아두고 관리한다는 개념이다. 누군가 접속하면 자신이 관리하는 Pool에서 남아있는 Connection을 제공한다. 하지만 남아있는 Connection이 없는 경우라면 해당 클라이언트는 대기 상태로 전화시킨다. 그리고 Connection이 다시 Pool에 들어오면 대기 상태에 있는 클라이언트에게 순서대로 제공한다.
즉, 다시 말해 데이터베이스와 연결된 Connection을 미리 만들어서 Pool 속에 저장해 두고 있다가 필요할 때 Connection Pool에서 쓰고 다시 Pool에 반환하는 기법이다. 미리 생성해두기 때문에 데이터베이스에 부하를 줄이고 유동적으로 연결을 관리할 수 있습니다.
만약 한명의 접속자가 웹사이트에 접속했다고 가정한다. 해당 웹사이트 접속자는 게시판을 확인하고 자신이 쓴 게시물을 수정하고 새로운 게시물을 등록한다. 이 한명의 접속자로 인하여 db접속은 다음과 같이 발생한다.
- 데이터 취득
- 검색 후 데이터 취득
- 데이터 갱신
- 데이터 삽입
한명의 접속자로 인해 단 시간에 4번의 db 접속이 일어난다. 접속자가 증가할 수록 db 접속의 횟수도 기하급수적으로 증가하게 될 것이다. 이러한 오버헤드를 방지하기 위해 미리 Connection 객체를 생성하고 해당 Connection 객체를 관리하는 것을 의미한다.
"db에 Connection 이 필요할 때마다 Pool에서 Connection을 빌려오고 다 쓰면 반납하자!" 라고 한줄로 쉽게 설명할 수 있을 것 같다.
Connection Pool을 너무 크게 해놓으면 당연히 그만큼 메모리 소모가 커질 것이고, 적게 해놓으면 Connection이 증가할 수록 대기 시간이 증가할 것이다.
Connection Pool에 생성되어 있는 Connection의 갯수는 한정적이다. 동시 접속자가 많아져서 Connection Pool에 남아있는 Connection 이 없을 경우 해당 클라이언트(접속자)는 대기 상태로 전환이 되고, 누군가 Connection이 반환되면 대기하고 있는 순서대로 Connection이 제공된다.
'Database' 카테고리의 다른 글
NOSQL 에 대하여 (0) | 2021.04.17 |
---|---|
Transaction - ACID (0) | 2021.02.17 |
2PL (0) | 2021.01.10 |
데드락 (0) | 2021.01.07 |
WAL (Write-Ahead-Logging) (0) | 2021.01.07 |