- 데이터베이스 연결(Connection)을 관리해 주는 도구(라이브러리)입니다. 이는 커넥션 풀(Connection Pool)이설정된 커넥션의 사이즈만큼의 연결을 허용하며 HTTP 요청에 대해 순차적으로 DB 커넥션을 처리해 주는 기능을 수행합니다.
- DBCP(Database Connection Pool)이며 HikariCP, Common DBCP 등 라이브러리가 존재하는데 가볍고 빠르게 처리할 수 있다는 장점이 있는 HikariCP를 사용합니다. - 빠르고, 간단하고 믿을 수 있는 HikariCP는 "오버헤드 제로"의 프로덕션 지원 JDBC 연결 풀입니다. 대략 130KB이며 이 라이브러리는 매우 가볍습니다.
1. 애플리케이션과 데이터 베이스와의 연결(Connection)을 줄여서 비용을 줄입니다. 2. 'Pool'내에 미리 연결(Connection)되어 있기에 매번 생성하는 비용을 줄일 수 있습니다. 3. 연결(Connection)에 대해서 조정을 할 수 있습니다. (단, 인프라의 DB Connection 수와 맞추어야 합니다.
-Connection Pool을 크게 설정하면 메모리 소모가 큰 대신 많은 사람의 대기시간이 줄어듭니다. - Coonection Pool을 적게 설정하면 사용자의 대기시간이 길어집니다.
2.4. HikariCP Benchmark
💡 HikariCP Benchmark
- 해당 이미지는 JDBC와 HikariCP 간의 밴치마크를 수행한 결과입니다.
- Connection Cycle ops/ms는 DataSource.getConnection(), Connection.close()에 대한 DB 연결과 연결해제를 비교 측정한 내용입니다. - Statement Cycle ops/ms는 Connection.prepareStatement(), Statement.execute(), Statement.close() 데이터 베이스의 상태로 준비 > 수행 > 종료 단계를 비교 측정한 내용입니다
https://github.com/brettwooldridge/HikariCP
[ 더 알아보기 ]
💡 벤치마크(benchmark)
- 컴퓨팅에서 특정 오브젝트(하드웨어 또는 소프트웨어 등)에 대해 일반적으로 수많은 표준 테스트와 시도를 수행함으로써 오브젝트의 상대적인 성능 측정을 목적으로 컴퓨터 프로그램을 실행하는 행위입니다.
- 해당 클래스에서는 JPA와 HikariCP간의 연결을 설정하는 환경 클래스입니다. 1. DataSourceConfig
- @Configuration 어노테이션을 통해 HikariCP의 설정을 담당합니다. - @ConfigurationProperties(prefix = "spring.datasource.hikari") 어노테이션을 통해서 application.properties의 속성 값을 가져와서 객체와 바인딩을 수행합니다.
2. hikariConfig
- @ConfigurationProperties(prefix = "spring.datasource.hikari") 어노테이션을 통해서 application.properties의 속성 값을 가져와서 객체와 바인딩을 수행합니다. - 클래스 내의 추가 설정이 필요한 경우 해당 생성한 객체 내에 setXX 메서드를 통해서 속성을 수정합니다.
3. dataSource()
- HikariConfig 객체를 통해 설정된 hikariConfig 객체 정보를 가져와서 데이터베이스 연결 풀을 설정합니다.
package com.adjh.multiflex.config;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
/**
* Spring Boot 애플리케이션에서 HikariCP를 사용하여 데이터베이스 연결 풀을 설정하고 관리하는 역할을 합니다.
*
* @author : lee
* @fileName : DataSourceConfig
* @since : 24. 7. 18.
*/@Configuration// application.properties 파일을 소스 경로에서 불러와 사용할 수 있도록 합니다.@PropertySource("classpath:/application.properties")publicclassDataSourceConfig {
final ApplicationContext applicationContext;
publicDataSourceConfig(ApplicationContext ac) {
this.applicationContext = ac;
}
/**
* spring.datasource.hikari 설정을 HikariConfig 객체에 바인딩합니다.
*
* @return {HikariConfig}
*/@Bean@ConfigurationProperties(prefix = "spring.datasource.hikari")public HikariConfig hikariConfig() {
HikariConfighikariConfig=newHikariConfig();
// [참고] 소스코드 내에서 수정이 필요한 경우 이를 이용합니다.// hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");// hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/multiflex");// hikariConfig.setUsername("root");// hikariConfig.setPassword("root");// hikariConfig.setAutoCommit(true);// hikariConfig.setMaximumPoolSize(5);// hikariConfig.setMinimumIdle(1);// hikariConfig.setConnectionTestQuery("SELECT 1");// hikariConfig.addDataSourceProperty("useUnicode", "true");return hikariConfig;
}
/**
* hikari의 설정정보를 받아서 HikariDataSource 객체로 생성하고 반환합니다.
*
* @return {DataSource}
*/@Beanpublic DataSource dataSource() {
HikariDataSourcedataSource=newHikariDataSource(hikariConfig());
return dataSource;
}
}
[ 더 알아보기 ] 💡 위에 메서드들은 application.properties 파일 내에 있는 속성들을 가져오는데 추가적으로 속성을 지정할 필요가 없지 않은가?
- 위에 메서드들은 application.properties 파일 내에 있는 속성들을 가져오므로, 일반적으로 추가적인 속성을 지정할 필요는 없습니다. 그러나 특정한 상황에서는 추가적인 커스터마이징이 필요할 수도 있습니다. - 예를 들어, 기본 설정 외에 추가적인 설정이 필요하거나, 특정 상황에 맞게 설정을 조정해야 할 때는 메서드 내에서 속성을 지정할 수 있습니다. 그렇지 않다면, application.properties 파일에 정의된 속성들만으로 충분히 설정이 가능합니다.