코드 저장소.

커넥션 풀 본문

ComputerScience/DB

커넥션 풀

slown 2026. 4. 8. 21:13

목차

1. DBCP?

2. DBCP의 작동방식

3. 설정 방법 및 예시

 

1. DBCP?

DBCP(Database Connection Pool)는 데이터베이스와의 연결(Connection)을 미리 여러 개 만들어 풀(Pool)에 보관해두고, 요청이 들어올 때마다 꺼내 쓰고 반납하는 방식입니다. 일반적으로 DB Connection을 하나 새로 만드는 데는 아래 과정이 필요합니다.

  • TCP 소켓 연결
  • DB 인증 (아이디/비밀번호 검증)
  • 세션 생성

요청마다 이 과정을 반복하면 응답이 느려지고, 트래픽이 몰릴 경우 DB 서버가 버티지 못합니다. DBCP는 이 비용을 최소화하기 위해 등장했습니다.

 

2. DBCP의 작동방식

DBCP는 크게 4단계로 동작합니다.

 

 

서버 시작시 -> 설정한 개수만큼 Connection을 미리 생성해 Pool에 보관합니다.

 

요청이 들어오면 -> Pool에서 유휴 Connection을 꺼내 줍니다. (getConnection())

 

쿼리 실행후 -> Connection을 끊지 않고 Pool에 반납합니다.(close() -> 실제로는 반납)

 

Pool이 꽉 찼을 때 -> 반납될 때까지 요청을 대기시킵니다. 대기 시간 초과 시 예외를 발생합니다.

3. 설정 방법 및 예시

주요 설정값

설정 키설명권장값
maxTotal Pool이 가질 수 있는 최대 커넥션 수 8 ~ 20
maxIdle 유휴 상태로 유지할 최대 커넥션 수 maxTotal의 절반
minIdle 항상 유지할 최소 커넥션 수 2 ~ 5
maxWaitMillis 커넥션 반납 대기 최대 시간 3000ms

Spring Boot + HikariCP (권장)

Spring Boot는 기본적으로 HikariCP를 내장합니다. 별도 의존성 추가 없이 application.yml만 설정하면 됩니다.

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 1234
    hikari:
      maximum-pool-size: 10      # maxTotal
      minimum-idle: 3           # minIdle
      connection-timeout: 3000   # maxWaitMillis (ms)
      idle-timeout: 600000      # 유휴 커넥션 유지 시간 (ms)

Apache Commons DBCP (레거시 프로젝트)

Spring Boot 이전 환경이나 레거시 프로젝트라면 Apache Commons DBCP를 직접 설정합니다.

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("1234");

dataSource.setMaxTotal(10);          // 최대 커넥션 수
dataSource.setMaxIdle(5);           // 유휴 상태 최대 수
dataSource.setMinIdle(2);           // 최소 유지 수
dataSource.setMaxWaitMillis(3000);  // 대기 최대 시간

Connection Leak 주의

커넥션을 빌려가고 반납하지 않으면 Pool이 고갈되어 장애로 이어집니다. 반드시 try-with-resources로 자동 반납을 보장해야 합니다.

// try-with-resources: 블록을 벗어나면 자동으로 반납됨
try (Connection conn = dataSource.getConnection();
     PreparedStatement ps = conn.prepareStatement(sql)) {

    ResultSet rs = ps.executeQuery();
    // 결과 처리...

} // ← 여기서 자동으로 Pool에 반납

 

Pool 사이즈 튜닝 공식 (HikariCP 공식 권장)

CPU 코어 수 × 2 + 유효 디스크 수

무조건 크게 설정하면 오히려 DB 서버의 최대 허용 연결 수를 초과해 에러가 발생합니다.

한 줄 요약

매번 DB 연결을 새로 만들지 말고, 미리 만들어둔 연결을 빌려 쓰고 반납하자. 신규 프로젝트라면 HikariCP를 쓰고, maximum-pool-size부터 설정하면 됩니다.

'ComputerScience > DB' 카테고리의 다른 글

With 구문  (0) 2024.09.12
인덱스를 적용한 성능 개선  (0) 2024.04.06
[데이터 베이스] Lock 에 대해 알아보자.  (0) 2023.12.20
MySql[MariaDB] join  (0) 2023.03.11
[MySql] 조건문 (if,case문)  (0) 2023.03.01