CS

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

그레고리력 2021. 7. 8. 18:35

Connection Pool(커넥션풀)


  • Database에서 데이터를 얻어 오기 까지 가장 느린 부분은 웹 서버에서 DB서버에 처음 연결 후 Connection 객체를 생성하는 부분
  • 웹 애플리케이션은 HTTP 요청에 따라 Thread를 생성하고 DB 서버로부터 데이터를 얻어옴
  • DBCP(Database Connection Pool)를 이용하면 DB Connection 객체를 생성하는 부분에 대한 비용과 시간을 줄이고, 네트워크 연결 부하 감소
  • Connection pool은 Connection을 여러 개 생성해 두어 저장해 놓은 공간(캐시), 또는 이 공간의 Connection을 필요할 때 꺼내 쓰고 반환하는 기법을 뜻함
  • 롤백 기능은 connection 객체에서만 가능함, 브라우저의 각 요청마다 개별 db connection 객체를 사용해야함
  • 모든 요청이 DB에 접근하고 있고 남은 Conncetion이 없다면, 해당 클라이언트는 대기 상태로 전환시키고 Pool에 Connection이 반환되면 대기 상태에 있는 클라이언트에게 순차적으로 제공

고려사항

  • 커넥션풀이 작으면 대기 요청이 많아짐
  • 너무 크면 메모리 낭비가 심함

Thread Pool

  • 비슷한 맥락으로 Thread pool이라는 개념도 있음
  • 이 역시 매 요청마다 요청을 처리할 Thread를 만드는것이 아닌, 미리 생성한 pool 내의 Thread를 소멸시키지 않고 재사용하여 효율적으로 자원을 활용하는 기법