HikariCP를 사용한 연결 풀링
연결을 효율적으로 재사용합니다
HikariCP를 사용한 연결 풀링은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
연결 풀을 사용하는 이유
데이터베이스 연결을 여는 작업은 비용이 큽니다. TCP 핸드셰이크, 인증, 세션 설정에 수십 밀리초가 걸릴 수 있습니다.
연결 풀은 여러 개의 열린 연결을 미리 준비해 둡니다. 코드는 연결 하나를 빌려 사용한 다음 반환하므로, 비용이 큰 연결 열기 작업을 저렴한 대여 작업으로 바꿀 수 있습니다.
HikariCP 소개
HikariCP는 Java의 사실상 표준 연결 풀입니다. 크기가 작고 빠르며 Spring Boot의 기본값입니다.
javax.sql.DataSource를 구현하므로 나머지 JDBC 코드는 그대로 유지됩니다. DriverManager 대신 풀에서 연결을 가져오기만 하면 됩니다.
연결 풀 구성하기
HikariConfig 객체를 사용해 HikariCP를 구성합니다. JDBC URL, 인증 정보, 풀 크기 등을 설정합니다.
그런 다음 이 객체로 HikariDataSource를 생성합니다. 일반적으로 애플리케이션 시작 시 한 번 수행하고 공유합니다.
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class Main {
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/shop");
config.setUsername("app");
config.setPassword("secret");
config.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(config);
System.out.println("Pool ready, max size " + config.getMaximumPoolSize());
ds.close();
}
}연결 대여하기
ds.getConnection()을 호출해 연결을 빌리세요. 평소처럼 리소스 자동 관리 try 구문으로 감싸세요.
핵심은 다음과 같습니다. 풀링된 연결을 닫아도 물리적인 소켓은 닫히지 않습니다. 대신 연결이 재사용되도록 풀에 반환됩니다.
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
public class Main {
public static void main(String[] args) {
DataSource ds = new HikariDataSource();
try (Connection conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT count(*) FROM users");
ResultSet rs = ps.executeQuery()) {
if (rs.next()) System.out.println("Users: " + rs.getInt(1));
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}close()는 반납을 의미합니다
많은 개발자가 여기서 혼동합니다. 연결 풀을 사용하면 다음과 같습니다.
conn.close()는 연결을 풀에 반환합니다.- 풀은 다음에 빌릴 사용자를 위해 실제 소켓을 열린 상태로 유지합니다.
따라서 여전히 항상 close해야 합니다. 리소스 자동 관리 try 구문이 올바른 방법입니다. 연결을 폐기하는 것이 아니라 반납하는 것입니다.
풀 크기 설정
더 크다고 더 좋은 것은 아닙니다. 풀이 너무 크면 데이터베이스에 동시 작업이 과도하게 몰립니다.
HikariCP의 지침에 따르면 (core_count * 2) + effective_spindle_count 정도의 작은 풀이 대규모 풀보다 대개 더 좋은 성능을 냅니다. maximumPoolSize는 상한이며, minimumIdle은 몇 개의 연결을 미리 준비해 둡니다.
public class Main {
public static void main(String[] args) {
int cores = 4;
int spindles = 1; // SSD-ish
int recommended = (cores * 2) + spindles;
System.out.println("Suggested max pool size: " + recommended);
}
}주요 시간 제한
HikariCP는 데이터베이스가 멈췄을 때 애플리케이션을 보호하는 시간 제한을 제공합니다.
connectionTimeout— 연결 대여가 실패하기 전에 기다리는 시간입니다(기본값 30초).idleTimeout— 유휴 연결이 유지되는 시간입니다.maxLifetime— 이 수명이 지나면 연결을 폐기합니다(데이터베이스 자체의 시간 제한보다 짧게 설정하세요).
연결 검증
네트워크는 연결을 조용히 끊을 수 있습니다. HikariCP는 연결을 전달하기 전에 연결이 유효한지 확인할 수 있습니다.
최신 JDBC 드라이버는 Connection.isValid(timeout)을 사용하며, HikariCP가 이를 자동으로 호출합니다. isValid가 없는 오래된 드라이버에는 connectionTestQuery를 설정할 수도 있습니다.
누수 감지
연결 누수는 코드가 연결을 빌린 후 닫지 않을 때 발생합니다. 결국 풀이 고갈되어 모든 대여 작업이 시간 초과됩니다.
leakDetectionThreshold를 설정하세요(예: 20000밀리초). 그러면 HikariCP가 이 시간보다 오래 점유된 연결에 대해 호출 스택을 기록하여 문제를 일으킨 코드를 바로 찾을 수 있게 합니다.
애플리케이션마다 풀 하나
HikariDataSource를 한 번 생성한 후 애플리케이션의 전체 수명 동안 재사용하세요.
요청마다 새 풀을 만들면 연결 풀의 목적이 사라집니다. 매번 시작 비용을 지불해야 하기 때문입니다. 풀은 종료할 때만 ds.close()로 닫으세요.
풀 모니터링
HikariCP는 실행 중인 지표를 제공하므로 풀의 상태를 확인할 수 있습니다.
- 활성 연결, 유휴 연결, 전체 연결
- 현재 연결을 기다리는 스레드
Micrometer, Dropwizard Metrics, JMX와 연동됩니다. '대기 중'인 수가 계속 높다면 풀이 너무 작거나 연결이 지나치게 오래 점유되고 있다는 뜻입니다.
빠른 확인
HikariCP를 사용할 때 빌린 연결에서 close()를 호출하면 어떻게 되나요?
복습
HikariCP를 사용하면 연결을 효율적으로 재사용할 수 있습니다.
- 시작 시
HikariDataSource를 한 번 구성합니다. - 리소스 자동 관리 try 구문에서
getConnection()으로 연결을 빌리고,close()로 풀에 반환합니다. maximumPoolSize를 적절히 작게 유지합니다.connectionTimeout,maxLifetime, 연결 검증을 조정합니다.leakDetectionThreshold를 사용해 반환되지 않은 연결을 찾습니다.
자주 묻는 질문
“HikariCP를 사용한 연결 풀링” 강의는 무료인가요?
네 — “HikariCP를 사용한 연결 풀링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“HikariCP를 사용한 연결 풀링”에서 뭘 배우나요?
연결을 효율적으로 재사용합니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Java Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“HikariCP를 사용한 연결 풀링” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- JDBC 기초
- PreparedStatement
- 트랜잭션
- HikariCP를 사용한 연결 풀링