https://brownbears.tistory.com/289
[DB]Connection Pool
Connection Pool이란?서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재합니다. 일반적인 Connection Pool을 이용하면 동시 접속자 수를 벗어나게 될 경우 에러(예외)가 발생하게 됩니다. 예외가
brownbears.tistory.com
Connection Pool이란?
동시 접속자가 가질 수 있는 Connection을 하나로 모아 놓고 관리한다는 개념이다.
누군가 접속하는 경우 자신이 관리하는 Pool에서 남아있는 Connection을 제공한다. 남아있는 Connection이 없는 경우라면 해당 클라이언트는 대기 상태로 전환시킨다. Connection이 다시 Pool에 들어오면 대기 상태에 있는 클라이언트에게 순서대로 제공한다.
데이터베이스와 연결된 Connection을 미리 만들어서 pool 속에 저장해 두고 있다가 필요할 때 Connection Pool에서 쓰고 다시 Pool에 반환하는 기법을 말한다.
웹 컨테이너가 실행되면서 Connection 객체를 미리 Pool에 생성해 둔다. DB와 연결된 Connection을 미리 생성해서 Pool 속에 저장해 두고 있다가 필요할 때에 가져다 쓰고 반환한다. 미리 생성하기 때문에 데이터베이스에 부하를 줄이고, 유동적으로 연결을 관리할 수 있다.
Pool에 미리 생성되어 있는 Connection을 가져다가 사용하고, 사용이 끝나면 Connection을 Pool에 반환한다.
상황 예시
한 유저가 웹 사이트에 접속한 상황이다. 해당 웹 사이트에서 접속자는 게시판을 확인하고, 자신이 쓴 게시물을 수정하고 또 새로운 게시글을 등록한다. 이러한 상황에서 DB 접속은 아래와 같이 발생한다.
(1) 데이터 취득(게시판)
(2) 검색 후 데이터 취득(자신이 작성한 데이터)
(3) 데이터 갱신(게시물 수정)
(4) 갱신된 데이터 등록(수정한 게시물 등록)
한 명의 접속자로 인해 4번의 DB 접속이 일어난다.
접속자가 1000명인 경우에는 4000번의 DB접속이 빠른시간 내에 발생하게 된다.
이러한 오버헤드 방지를 위해 미리 Connection 객체를 생성하고 해당 Connection 객체를 관리해야 한다.
Connection Pool에 DB와 연결을 해놓은 객체를 두고 필요할 때마다 Connection Pool에서 빌려 오는 것이다. 연결이 끝나면 다시 Pool 에 connection 객체를 반납한다.
Connection Pool을 너무 크게 해놓는 경우 메모리 소모가 크고, 너무 적게 해놓는 경우 Connection이 많이 발생하는 경우 대기시간이 발생하게된다.
Connection Pool은 유동적으로 동시 접속자나 서버 부하에 따라 크기를 조정해야 한다.
특징
Pool 속에 미리 Connection을 생성해 두기 때문에, Connection을 생성하는 데 드는 연결 시간이 소비되지 않는다.
Connection을 계속해서 재사용하므로 생성되는 Connection의 수가 많지 않다. Connection을 생성하고 닫는 시간이 소모되지 않기 때문에 어플리케이션의 실행 속도가 빨라지며, 한 번에 생성될 수 있는 Connection 수를 제어하기 때문에 동시 접속자 수가 몰려도 웹 어플리케이션이 쉽게 다운되지 않는다.
Connection Pool이 생성되어 있는 Connection 갯수는 한정적이다.
동시 접속자가 많아지는 경우 Connection Pool은 누군가 접속하면 Connection Pool에 남아 있는 Connection을 제공하는 식이다.
남아있는 Connection이 없을 경우 해당 클라이언트는 대기 상태로 전환이 되고, Connection이 반환되면 대기하고 있는 순서로 Connection이 제공된다.