이전 글에서 이어집니다.
이전글에서 DB 서버 설정관련된 내용을 살펴봤습니다.
이번글은 백엔드 쪽(HicariCP 기준)에서 DBCP 설정 관련된 내용을 보겠습니다.
minimumIdle은 커넥션 풀이 유지하는 최소한의 유휴 연결 수를 의미합니다. 만약 idle(유휴) 상태인 연결 수가 minimumIdle보다 작다면, minimumIdle의 수 만큼 연결을 신속하게 생성합니다.
maximumPoolSize는 커넥션 풀이 가질 수 있는 최대 연결 수를 나타냅니다. 이는 idle(유휴) 및 active(사용 중) 상태의 연결을 합쳐서 정의됩니다.
만약 minimumldle이 2, maximumPoolSize 4라면?
초기 상태에서 커넥션 풀은 2개의 idle 연결을 생성합니다.
요청이 들어와 1개의 연결이 활성화됩니다. 이로 인해 idle 연결 수는 1개가 됩니다. 그러면 minimumIdle이 2이므로 추가적으로 1개의 idle 연결이 생성됩니다.
다시 트래픽이 몰려 2개의 연결이 활성화됩니다. 이 경우 idle 연결 수는 1개가 되므로, 그러면 minimumIdle이 2이므로 추가적으로 1개의 idle 연결이 생성됩니다.
다시 트래픽이 몰려 3개의 연결이 활성화됩니다. 이 경우 idle 연결 수는 1개가 되므로, minimumIdle에도 충족하지만, maximumPoolSize가 4이므로 새로운 연결을 생성하지 않습니다.
시간이 지난 후, 모든 연결이 idle 상태가 되면, minimumIdle이 2이므로 남은 2개의 연결을 끊어줍니다.
이처럼 설정을 조절함으로써 커넥션 풀은 필요한 수의 연결을 효율적으로 관리하고, 트래픽 변화에 대응할 수 있습니다. minimumIdle과 maximumPoolSize 값을 동일하게 설정하는 이유는, 연결을 맺고 끊는 과정의 오버헤드를 최소화하면서도 적절한 리소스 관리를 할 수 있도록 하는 것입니다.
일반적으로, minimumIdle과 maximumPoolSize 값을 동일한 값으로 설정하는 것이 권장됩니다.
만약 minimumIdle과, maximumPoolSize의 값이 서로 다르다면 다음과 같은 상황이 발생할 수 있습니다.
예를 들어, minimumIdle이 더 작은 값이고 트래픽이 갑자기 증가한다면, 커넥션 풀은 트래픽을 감당하기 위해 새로운 연결을 만들어야 합니다. 이때 연결을 맺는 과정은 시간이 오래 걸리는 오버헤드를 유발할 수 있습니다. 따라서 응답 시간이 길어질 수 있습니다.
반대로 maximumPoolSize와 minimumIdle을 동일한 값으로 설정하면, 커넥션 풀은 항상 고정된 수의 연결을 유지하게 됩니다. 이 경우 트래픽이 갑자기 증가하더라도 새로운 연결을 생성할 필요 없이 기존 연결을 활용할 수 있습니다.
minimumIdle과 maximumPoolSize를 같은 값으로 설정하여 커넥션 풀의 효율성을 극대화하는 것이 좋습니다.
connectionTimeout은 커넥션 풀에서 연결을 얻기 위해 대기하는 시간을 나타냅니다.
만약 connectionTimeout 30초라면?
트래픽이 증가하여 connection pool의 모든 연결이 활성 상태인 경우, 새로운 요청이 들어올 때 연결을 얻기 위해 최대 30초까지 기다릴 수 있습니다. 그러나 connectionTimeout이 30초로 설정되어 있으므로, 30초를 초과하는 대기 시간이 발생한 경우 해당 요청은 예외(exception)를 받게 됩니다.
이를 통해 너무 오랜 시간 동안 연결을 기다리는 상황을 방지하고, 효율적인 리소스 관리를 할 수 있게 됩니다. 따라서 connectionTimeout 설정은 연결을 빠르게 얻기 위한 대기 시간을 조절하는 중요한 요소입니다.