1. 커넥션 풀( Connection pool )

커넥션 풀이란 DB와 미리 connection( 연결 )을 해놓은 객체들을 pool( 웅덩이 )에 저장해두었다가,

클라이언트 요청이 오면 커넥션을 빌려주고, 볼일이 끝나면 다시 커넥션을 반납받아 pool에 저장하는 방식을 말합니다.


클라이언트가 DB와 연결이 필요할 때, connection pool에서 connection을 빌려와 DB에 접근해서 쿼리를 막 날린 후,

볼 일이 끝나면 사용했던 connection을 다시 pool에 반납을 하는 과정을 표현했습니다.





2. 특징 / 장단점

예를 들어, 게시판 웹 애플레케이션을 가정해보겠습니다. 

어떤 유저가 게시글을 작성하는 과정을 살펴보면, 그 과정은 다음과 같습니다.

  1. 클라이언트가 서버로 게시글 데이터를 전달
  2. 비즈니스 로직 처리
  3. DB와 커넥션을 맺은 후, DB에 게시글 데이터를 저장
  4. DB와 커넥션을 끊고, 비즈니스 로직 처리
  5. 클라이언트에 응답


그런데 서비스가 커져서 유저가 한 명이 아니라, 100명의 유저가 동시 접속 중이라고 가정해보겠습니다.

위와 같은 경우 매번 DB와 커넥션을 맺고 끊는 과정이 필요한데 커넥션 풀을 사용하게 되면,

미리 연결을 맺고 있는 커넥션들이 있기 때문에 커넥션을 맺고 끊는 과정이 불필요합니다.

즉, DB 접근 시 불필요한 작업( 커넥션 생성, 끊기 )이 사라지므로 성능향상을 기대할 수 있습니다.



DB에서는 기본적으로 커넥션을 일정량 제공해줍니다.

그런데 유저가 많아져서 커넥션이 모자랄 경우, 즉 기본으로 제공된 커넥션이 모자랄 경우 원활한 서비스가 이루어지지 않습니다.

커넥션이 반납될 때까지 기다려야 하기 때문이죠.

따라서 유저수에 따라 커넥션을 조절할 필요가 있습니다.



그렇다고 커넥션을 막 늘리는 것은 좋지 않습니다.

컴퓨터 세계에서는 항상 trade off가 있듯이, 커넥션 풀을 통한 장점도 있지만 단점도 있습니다.

커넥션 또한 객체이므로 메모리를 차지하게 됩니다.

따라서 무작정 많이 늘리는 것은 메모리를 많이 차지하게 되므로 오히려 성능이 떨어지는 결과를 가져옵니다.





이상으로 커넥션 풀에 대해 알아보았습니다.