-
[DBCP] 데이터베이스 커넥션 풀 간단 정리: Database Connection PoolSpring/Study 2023. 6. 14. 16:35
본 정리는 Spring Boot와 관련지어 정리한 내용이다.
Database Connection Pool
Database Connection Pool이 필요한 경우?
유저가 특정 서비스를 요청했을 때, 서비스가 서버에서 DB에 접근을 해서 처리를 해야 하는 서비스라면?
서버는 DB에 연결을 하기위해 TCP/IP 연결을 수행한다. 이때 3-way 핸드셰이크도 수행하게 될 것이다.
그렇게 되면 데이터 베이스에서 SQL을 실행시키는 시간 + 연결 시간이 소요된다.
매번 연결하는 시간이 진행된다면 매우 비효율적이기 때문에 서버와 DB간의 커넥션을 미리 저장 해놓는 공간이 데이터베이스 커넥션 풀이다.
어떻게 동작하는가?
서버가 시작하는 시점에 기본적으로 설정된 커넥션을 미리 확보해서 서버가 보관해둔다.
Spring Boot의 경우 DBCP 기능을 사용하기 위해 오픈소스인 hikariCP를 사용한다.
Spring Boot에서 hikariCP의 default 커넥션 풀의 개수는 10개이다.
10개의 커넥션 풀을 보관해두고 있다가, 사용자의 요청이 발생하고 DB와 연결을 통해 처리해야 하는 요청이라면
DBCP에서 커넥션 하나를 가져와 DB를 이용한다.
작업이 끝나면 커넥션을 반납해야한다.
문제는 발생하지 않는가?
만약 커넥션 풀의 값이 10개로 기본 설정이 되어있고
동시 사용자가 100명이 있다고 가정해본다.
물론 100명의 사용자가 동시에 100개의 DB 작업을 요구하는 요청을 전송하지는 않을 테지만
적어도 10개 이상의 DB 작업을 요구하는 요청을 전송한다면?
DB 커넥션 풀의 경우 큐를 사용하여 요청들을 큐에 저장해두고 순차적으로 작업을 수행하는데,
큐에서 대기하는 시간이 일정시간 넘어가게 되면 타임아웃이 발생하게 될 것이다.
따라서 적절한 커넥션 풀의 개수를 각 서버의 서비스에 맞게 설정해둬야 한다.