DBCP?

최민수·2023년 3월 27일
0

CS 전공지식

목록 보기
18/36

movie


DBCP 가 왜 필요해졌는지

Backend 애플리케이션 서버와 DB server 사이의 Api request 상황을 생각해보자.

Api request가 앱에 요청되면 앱은 서버에서 데이터 참조를 시도할 것이다.
그렇게 하려면 서버와 connection을 열어야 하고, 이것은 높은 송수신 신뢰성을 바탕으로 이루어져야 하기 때문에 TCP 기반의 3-way handshake 과정으로 진행된다.

정상적으로 쿼리를 요청하고 전달받으면 connection을 끊고 api response를 보내 상황이 마무리된다. 이 또한 TCP 기반의 4-way handshake 과정으로 이루어진다.

하지만 매번 이렇게 한 번의 api 요청이 들어올 때마다 connection 을 열고 닫는 것은 시간적인 비용에도 좋지 않은 영향이며 결국 서비스의 성능에도 문제가 된다.

따라서, 이를 해결하기 위해 미리 connection을 만들어 놓고 가져다 쓰면 어떨까 에서 나온 개념이 DBCP, 즉 DB Connection Pool이다.


DBCP 의 효과

앞서 이야기한 대로 DBCP는 미리 몇 개의 connection을 만들어 놓은 connection pool을 운영하고, api 요청이 올 때 pool에 맺어둔 connection 을 가져와 처리를 한 뒤 끝나면 다시 반환하는 개념이다.

이렇게 되면 connection을 재사용하기 때문에 DB 서버와 connection을 열고 닫는 시간을 절약할 수 있어 시간적인 손해를 줄일 수 있다.


DBCP 를 잘 사용하려면?

DBCP를 잘 사용하기 위해서 알아야 할 설정 방법은 설정할 수 있는 파라미터에 대해 이해를 하는 것이다.
파라미터는 크게 DB 쪽에서 설정할 수 있는 것과 backend app 쪽에서 설정할 수 있는 것이 존재한다.

Backend와 DB에서 설정할 수 있는 파라미터를 적절한 값으로 맞추는 것이 중요하다!

먼저 DB 쪽 파라미터에서 중요한 파라미터는 max_connections, 즉 클라이언트와 맺을 수 있는 최대 커넥션 수이다.

만약 max_connection=4, 그리고 현재 DBCP 쪽의 최대 connection=4 인 상황을 생각해보자. 여기에 서비스가 너무 잘돼서 트래픽이 마구 몰려온다.
여기에 문제를 해결하기 위해서 backend app 서버를 한 대 더 두면 해결이 될까?
그렇지 않다.
DB쪽의 최대 연결이 4, 즉 모두 쓰고 있는 상황이기 때문에 backend 서버를 한 대 더 둔다고 해서 효과를 볼 수는 없다.

DB 쪽의 중요한 파라미터에는 wait_timeout 도 있다.

다시 요청이 올 때까지 얼마의 시간을 기다린 뒤 connection을 닫을 지 결정을 하는 파라미터인데, 예를 들어 Backend 서버쪽에서 비정상적으로 종료가 된 connection에 대해 DB 서버는 아직 인지하지 못하고 있는 상태이기 때문에 그대로 두면 아무런 일도 하지 못한 채 점유되어 있는 connection이 된다.
따라서, 적절한 시간을 설정해 주어야 이런 상황을 방지할 수 있다.

이제 Backend Server 쪽에서 중요한 파라미터를 살펴보자.

먼저 MinimumIdle, maximumPoolSize 파라미터가 있다. 즉, pool에서 유지하는 최소한의 connection 수와 pool이 가질 수 있는 최대 connection 수를 뜻한다.

즉, DBCP에서의 connection 생성 과정은 minimumIdle 수 이상으로, 또 maximumPoolSize 이하로 항상 맞추기 위해 생기고 없어지고를 반복하며 그 수를 조절하게 된다.

MySql에서 권장하는 Default 값은 minimumIdle = maximumPoolSize 이다. 즉, connection을 계속 만들고 없애고 하는 과정 자체가 시간, 성능 면에서 좋지 않다는 뜻이겠다.

Backend server 쪽에서도 타임아웃과 비슷한 maxLifeTime 파라미터가 있다.
pool에서 connection의 최대 수명을 뜻하며 마찬가지로 적절한 값으로 비정상적인 종료에 대한 버그를 막을 수 있다.


영상 출처: DBCP (DB connection pool)의 개념부터 설정 방법까지! hikariCP와 MySQL을 예제로 설명합니다! 이거 잘 모르면 힘들..
https://www.youtube.com/watch?v=zowzVqx3MQ4

profile
CS, 개발 공부기록 🌱

0개의 댓글