커넥션풀 그게 뭔데?

sokojh·2022년 9월 25일
0

DB

목록 보기
2/3

개념

Data Base Connection Pool

데이터베이스 연결 객체를 관리하는 역할입니다.

왜 쓸까요?

먼저 DB에 요청하는 과정을 설명드리겠습니다.

DB에 접근하는 서비스 요청 처리 과정
매번의 요청마다 connection이 필요

매번의 요청마다 connection을 생성 → 생성과정이 모든 요청중 가장 큰 메모리를 잡아먹는다.

connection을 통해 요청을 처리

connection을 닫음

문제

애플리케이션이 느려진다.

사용자 수가 많아져 connection 수가 너무 많아지면 서버가 죽을 수 있다.

이러한 문제를 해결하기 위해 나온 것이 DBCP입니다.

DBCP 동작 과정

Client가 Connection Pool로 DB연결 요청을 보낸다.

Connection Pool은 DB연결 객체를 저장하고 있는데, 해당 연결을 Client 요청에 제공해준다.

Client 요청을 받고나면 다시 Connection Pool로 연결객체를 반환한다.

Connection Pool에 있는 connection 객체보다 요청이 많이 들어오게 되면 순서대로 대기상태로 돌리고 반환이 되었을때 순서대로 객체를 제공해준다.

그런데 여기까지 읽으셨다면 한가지 생각이 나셨을것이라 생각됩니다.

만약 요청이 많아지면 Connection Pool에 있는 connection 객체를 많이 만들어 놓으면 되는 것 아닌가?

라는 합리적인 판단이 생기실텐데,

결론부터 말씀드리자면 상황에 따라 다릅니다.

왜냐하면 connection 객체를 미리 많이 만들었을 때 그만큼 사용하지 않는 메모리 낭비가 심해지고 이는 곧 비용증가로 나타납니다.

하지만 메모리 낭비를 막겠다고 connection 객체를 줄인다면, 고객들은 대기시간에 걸려서 무한 F5를 연타하다 서비스를 떠나게 됩니다.

따라서 상용서비스에서는 대부분 메모리 비용을 감당하고 최대한 고객들의 대기시간을 줄이는 전략을 쓴다고 합니다.

저라도 웹페이지에서 버튼을 누르고 3초이상 반응이 없다면 바로 F5를 누르거나 그 사이트에 대한 경험이 매우 부정적으로 변할 것 같습니다

이글을 읽으시고 좀 더 자세한 DBCP와 연결지연 현상에 대해 알아보고 싶은 분들은 Reference를 참고하셔서 봐주시면 될 것 같습니다 감사합니다.

Reference
DBCP Connection Pool 연결 대기 지연 현상

Commons DBCP 이해하기

profile
데이터팀에서 백엔드-데이터 엔지니어로 일하고 있습니다.

0개의 댓글