데이터베이스 연결 관리

Java에서 PostgreSQL 데이터베이스 질의하기

Miller Trujillo

Staff Software Engineer

왜 연결 관리를 해야 할까요?

$$

  • 각 연결은 네트워크 소켓을 엽니다
  • 인증과 리소스 할당이 필요합니다
  • 닫지 않은 연결은 리소스 누수를 유발합니다
  • 새 연결은 실패할 수 있습니다

여러 데이터베이스 연결이 쌓이고, 사용되지 않는 열린 "좀비" 연결이 표시된 다이어그램

Java에서 PostgreSQL 데이터베이스 질의하기

try-with-resources

String sql = "SELECT COUNT(*) FROM books";


try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) { System.out.println("Total books: " + rs.getInt(1)); } }
  • 연결은 자동으로 닫힙니다
Java에서 PostgreSQL 데이터베이스 질의하기

커넥션 풀링

  • 신규 연결은 비용 큰 설정을 반복합니다
  • 풀링은 기존 연결을 재사용합니다
  • 완료되면 연결이 풀로 돌아갑니다

택시 승강장 비유

사전에 생성된 여러 연결을 가진 커넥션 풀에서 대여와 반납이 화살표로 표시된 다이어그램

Java에서 PostgreSQL 데이터베이스 질의하기

HikariCP 예시

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;


HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:postgresql://localhost:5432/library"); config.setUsername("postgres"); config.setPassword("secret");
HikariDataSource ds = new HikariDataSource(config);
try (Connection conn = ds.getConnection()) { System.out.println("Connected with HikariCP!"); }
Java에서 PostgreSQL 데이터베이스 질의하기

HikariCP 콘솔 로그

[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
[main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - 
    Added connection org.postgresql.jdbc.PgConnection@ID
[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
Java에서 PostgreSQL 데이터베이스 질의하기

연습해 봅시다!

Java에서 PostgreSQL 데이터베이스 질의하기

Preparing Video For Download...