커넥션 풀(Connection Pool) 이해하기 – DB 연결 효율 관리
웹 애플리케이션에서 DB를 사용할 때, 매번 DB에 연결을 새로 만드는 방식은 성능상 부담이 큽니다.
커넥션 풀은 이런 문제를 해결하기 위해 만들어진 DB 연결 재사용 구조입니다.
커넥션 풀의 기본 원리
-
커넥션 생성
- 서버 시작 시 또는 요청 시점에 DB 커넥션을 미리 생성하거나 필요할 때 생성합니다.
-
요청 시 커넥션 할당
- 사용자가 SELECT, UPDATE 같은 쿼리를 요청하면 풀에서 유휴 커넥션을 가져와 사용합니다.
-
쿼리 완료 후 반환
- 쿼리가 끝나면 커넥션을 끊지 않고 풀로 돌려보내 유휴 상태로 유지합니다.
- 다음 요청 시 동일한 커넥션을 재사용할 수 있습니다.
여러 사용자가 동시에 요청할 때
- 커넥션 풀은 요청 단위로 커넥션을 할당합니다.
- 한 사람이 동시에 여러 쿼리를 실행하면 풀에서 여러 커넥션을 할당받고,
- 여러 사용자가 동시에 요청하면 풀에 있는 유휴 커넥션을 나눠 사용합니다.
- 중요한 점: 유휴 커넥션은 현재 사용되지 않고 풀에서 대기 중인 연결을 의미하며, 특정 개인과 매칭되는 것이 아닙니다.
커넥션 풀 주요 설정
| 속성 | 의미 |
|---|
| initialSize | 풀 시작 시 미리 생성할 커넥션 수 |
| maxActive / maxTotal | 동시에 사용할 수 있는 최대 커넥션 수 |
| maxIdle | 풀에 유지할 수 있는 최대 유휴 커넥션 수 |
| minIdle | 풀에 항상 유지할 최소 유휴 커넥션 수 |
| maxWaitMillis | 풀에 커넥션이 없을 때 최대 대기 시간(ms) |
- 적절한 설정을 통해 성능과 DB 리소스 효율을 동시에 확보할 수 있습니다.
결론
- 커넥션 풀은 DB 연결을 재사용하도록 만들어졌습니다.
- 사용자가 SELECT나 UPDATE를 수행해도 커넥션을 끊지 않고 유휴 상태로 돌려보내고, 다음 요청에서 다시 사용합니다.
- 이를 통해 연결 생성/종료 비용을 줄이고, 동시에 여러 사용자의 요청을 효율적으로 처리할 수 있습니다.