[Java] - HikariCP 적용 / 테스트 코드

janjanee·2022년 3월 11일
0

Java

목록 보기
17/19
post-thumbnail

DBCP 란?
DB Connection 객체를 미리 만들어 Connection Pool에 보관하고 필요할 때마다
DB에 연결된 Connection을 꺼내 사용하는 것을 의미한다.

DBCP 사용목적
Connection Pool을 사용하는 이유는 Connection 객체를 만드는 것이
큰 비용을 소모하는 작업이기 때문이다.

미리 만들어진 Connection을 재사용하여 CPU의 부담과 Connection을
생성하는데 필요한 시간을 줄일 수 있다.

1. Maven Dependency

<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>4.0.3</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.36</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.10</version>
</dependency>
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <version>5.8.2</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <version>10.2.0.jre11</version>
</dependency>
  • jdbc connector는 각자 본인이 사용중인 db의 커넥터를 사용한다 (예제는 mssql)

2. DataSource

public class DataSource {

    private static HikariConfig config = new HikariConfig();
    private static HikariDataSource ds;

    public static final String JDBC_URL = "jdbc_url";
    public static final String USER = "user";
    public static final String PASSWORD = "password";

    static {
        config.setJdbcUrl(URL);
        config.setUsername(USER);
        config.setPassword(PASSWORD);
        ds = new HikariDataSource(config);
    }

    private DataSource() {}

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

}
  • HikariCP의 DataSource를 사용해서 싱글 인스턴스를 생성한다.
  • HikariConfig는 데이터 소스를 초기화하는 데 사용되는 구성 클래스이다.
  • jdbcUrl, username, password를 설정한다.

3. Test Code

@Test
void connectionTest() throws SQLException {
	DataSource.getConnection();
}
  • DB Connection 테스트
@Test
void selectQueryTest() {
    String selectQuery = "SELECT 1";
    int result = 0;

    try(Connection con = DataSource.getConnection();
        PreparedStatement pst = con.prepareStatement(selectQuery);
        ResultSet rs = pst.executeQuery()) {

        while(rs.next()) {
            result = rs.getInt(1);
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }

    assertEquals(1, result);

}
  • mssql 기준 "SELECT 1" 쿼리를 호출해서 result 값에 잘 받아오는지 테스트

References

https://www.baeldung.com/hikaricp

profile
얍얍 개발 펀치

0개의 댓글