[Spring] DB커넥션풀과 Hikari CP란?

    [Spring] DB커넥션풀과 Hikari CP 알아보기

    1. DB커넥션 풀이란?

    DB 커넥션 풀은 DB 연결을 관리하는 기술입니다. DB 연결은 매우 비싼 작업이며, 매번 연결을 생성하는 것은 성능적으로 비효율적입니다. 따라서, DB 연결을 미리 생성하여 풀(pool)에 저장해 두었다가 필요할 때마다 풀에서 연결을 가져와 사용하고, 사용이 끝난 연결을 다시 풀에 반환하는 방식으로 동작합니다.

    2. Hikari CP란?

    HikariCP는 Java에서 사용되는 DB 커넥션 풀 라이브러리 중 하나입니다. HikariCP는 가볍고 빠른 성능을 제공하면서도 안정적이다.

    1. Hikari CP 특징은?

    1.빠르고 가벼움

    HikariCP는 코드가 간단하고 가벼워서 빠른 속도와 적은 메모리 사용량을 제공합니다. 그리고 작은 라이브러리이므로 의존성 관리도 쉽습니다.

    2. 커넥션 유지 및 최소화

    HikariCP는 커넥션 풀의 동작을 최적화하여 커넥션 유지를 최소화합니다. 이를 통해 애플리케이션의 성능을 향상시키고, 서버의 부하를 줄일 수 있습니다.

    3. 세부 구성 기능

    HikariCP는 많은 구성 가능한 옵션을 제공하여 애플리케이션의 요구 사항에 맞게 조정할 수 있습니다. 이를 통해 애플리케이션의 성능과 안정성을 높일 수 있습니다.

     

    Spring Boot에서는 기본적으로 HikariCP가 사용되므로 별도의 설정 없이 쉽게 사용할 수 있습니다. HikariCP는 매우 빠르고 안정적인 DB 커넥션 풀 라이브러리 중 하나이며, 많은 구성 가능한 옵션을 제공하여 사용자가 원하는 방식으로 조정할 수 있습니다.

    2. HIKariCP 예시 및 사용법은?

    1.HikariCP 라이브러리를 프로젝트에 추가
    dependencies {
        implementation 'com.zaxxer:HikariCP:4.1.0'
    }
    2.application.properties 또는 application.yml 파일에서 HikariCP 구성을 지정
    spring.datasource.url=jdbc:mysql://localhost/mydb
    spring.datasource.username=myuser
    spring.datasource.password=mypassword
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.hikari.connection-timeout=30000
    spring.datasource.hikari.idle-timeout=600000
    spring.datasource.hikari.max-lifetime=1800000
    spring.datasource.hikari.maximum-pool-size=10

    HikariCP의 구성 옵션 중 일부를 사용 한 예시 이며,

    • connection-timeout은 커넥션을 가져오기 위해 대기하는 최대 시간을 설정
    • idle-timeout은 유휴 커넥션을 유지할 최대 시간을 설정
    • max-lifetime은 커넥션의 최대 생존 시간을 설정
    • maximum-pool-size는 커넥션 풀에서 생성할 최대 커넥션 수
    3.HikariCP를 사용하기 위해서는 DataSource 객체를 생성
    import com.zaxxer.hikari.HikariDataSource;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class Example {
        public static void main(String[] args) {
            HikariDataSource dataSource = new HikariDataSource();
            dataSource.setJdbcUrl("jdbc:mysql://localhost/mydb");
            dataSource.setUsername("myuser");
            dataSource.setPassword("mypassword");
            dataSource.setMaximumPoolSize(10);
    
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
    
            try {
                connection = dataSource.getConnection();
                preparedStatement = connection.prepareStatement("SELECT * FROM mytable");
                resultSet = preparedStatement.executeQuery();
    
                while (resultSet.next()) {
                    System.out.println(resultSet.getString("column1"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try { resultSet.close(); } catch (Exception ignored) { }
                try { preparedStatement.close(); } catch (Exception ignored) { }
                try { connection.close(); } catch (Exception ignored) { }
                dataSource.close();
            }
        }
    }

    HikariDataSource 클래스를 사용하여 DataSource 객체를 생성합니다. 이어서 HikariCP의 옵션을 설정하고, getConnection() 메서드를 사용하여 Connection 객체를 가져와 SQL을 실행

     

    커넥션 풀에서 커넥션을 가져와 사용한 후, 커넥션을 닫을 때는 Connection.close() 메서드 대신에 HikariDataSource.close() 메서드를 사용해야 합니다. HikariCP가 생성한 모든 커넥션을 닫아 자원을 확보합니다.

    HikariCP는 다양한 옵션을 제공하며, 다양한 상황에 대응할 수 있습니다. 예를 들어, maximumPoolSize 옵션을 사용하여 최대 커넥션 풀 크기를 설정하거나, connectionTimeout 옵션을 사용하여 커넥션을 얻기 위해 대기할 시간을 설정할 수 있습니다. 이러한 옵션을 적절히 조정함으로써 성능과 안정성을 최적화할 수 있습니다.

    또한, HikariCP는 Spring Boot에서 기본적으로 사용되는 DB 커넥션 풀 라이브러리입니다. 따라서, Spring Boot를 사용하는 경우 별도의 설정 없이 쉽게 HikariCP를 사용할 수 있습니다.

    3. HikariCP 주요 옵션은?

    • 1. jdbcUrl: DB 연결 URL입니다.
    • 2. username: DB 사용자 이름입니다.
    • 3. password: DB 비밀번호입니다.
    • 4. driverClassName: JDBC 드라이버 클래스 이름입니다.
    • 5. maximumPoolSize: 최대 커넥션 수입니다.
    • 6. connectionTimeout: 커넥션 타임아웃 시간입니다.
    • 7. idleTimeout: 커넥션 유휴 타임아웃 시간입니다.
    • 8. maxLifetime: 커넥션 최대 생존 시간입니다.

    4. HiKariCP 사용이유는?

    • 매우 빠르고 가볍기 때문에
    • 다른 라이브러리에 비해 빠른 연결 수립 및 커넥션 획득 속도
    • 커넥션을 최소화하는 기능
    • 안정성 높은 기능
    • 다양한 설정 옵션
    • Spring Boot 애플리케이션을 개발하는 경우 별도의 설정 없이 쉽게 사용
    • 매우 경량화되어 있기 때문에 메모리 사용량이 적다
    • Apache 2.0 라이선스를 사용하여 무료

    댓글

    Designed by JB FACTORY