데이터베이스 커넥션 풀(DBCP)은 애플리케이션과 데이터베이스 간의 연결(Connection)을 미리 생성해 두고, 이를 재사용하는 기법을 말합니다. 데이터베이스에 접근할 때마다 새로운 연결을 생성하고 종료하는 대신, 미리 준비된 연결을 재사용함으로써 성능을 향상시키고 자원 사용을 최적화할 수 있습니다.
커넥션 풀의 주요 설정 요소는 초기 풀 크기(Initial Pool Size), 최소 풀 크기(Minimum Pool Size), 최대 풀 크기(Maximum Pool Size), 연결 대기 시간(Connection Timeout) 등이 있고, 이를 적절하게 설정하여 커넥션을 효율적으로 관리하고 사용할 수 있습니다.
데이터베이스 커넥션 풀을 사용하지 않으면 어떤 문제가 발생할 수 있나요?
애플리케이션과 데이터베이스가 통신을 하기 위해서는 데이터베이스 커넥션이 필요합니다.
커넥션 풀이 없다면 애플리케이션에서 데이터베이스에 접근해야하는 요청을 처리할 때마다 커넥션을 새로 생성해서 연결하고 해제하는 과정을 반복해야 합니다. 이 과정은 비용이 많이 들기 때문에 요청의 응답시간이 길어집니다.
또 동시에 많은 요청이 들어올 경우 매번 새로운 커넥션을 생성하게 되는데, 데이터베이스의 최대 연결 수를 초과할 수 있습니다. 데이터베이스는 일반적으로 동시에 처리할 수 있는 요청 개수에 제한이 있습니다. 이 제한을 초과하면 요청이 거부되어 사라지거나, 데이터베이스 자체가 비정상적으로 종료될 수 있습니다.
커넥션 풀 사이즈는 클수록 좋나요?
커넥션을 사용하는 주체는 스레드이기 때문에, 커넥션과 스레드를 연결 지어 생각해야 합니다. 만약 커넥션 풀 사이즈가 스레드 풀 사이즈보다 크면, 스레드가 모두 사용하지 못해서 리소스가 낭비됩니다. 반대로 커넥션 풀 사이즈가 스레드 풀 사이즈보다 작으면, 스레드가 커넥션이 반환되기를 기다려야 하기 때문에 작업이 지연됩니다.
커넥션 풀 사이즈와 스레드 풀 사이즈의 균형이 맞더라도 너무 큰 사이즈로 설정하면 데이터베이스 서버, 애플리케이션 서버의 메모리와 CPU를 과도하기 사용하게 되므로 성능이 저하됩니다.