[Spring] Hikari Connection Pool JavaConfig로 설정하기

AlBan·2021년 5월 15일
0

Spring

목록 보기
5/13

Connection Pool?

데이터베이스 성능을 개선할 때 가장먼저 고려할 수 있는것은 Connection Pool을 만드는 것이라고 할 수 있다.

DB와 연결을 담당하는 DB Connection은 유지하는것에 비해 생성하는데 자원이 많이 소모된다. 때문에 단시간에 많은 DB연결 요청이 들어오는 경우 매 연결마다 Connection을 생성, 해제하면서 자원을 소모하게 되고 이는 결국 전체적인 서버의 성능저하로 이어 질 수 있다.

이를 방지하기위해 DB Connection을 미리 일정 수 만큼 만들어두고 필요할 때 꺼내쓰는 방법이 제시되었는데, 이 방법이 바로 Connection Pool 기법이다.

Connection Pool 기법을 DB에 적용하였다는 의미에서 DBCP라고도 한다.

Spring의 DBCP

과거 spring에서는 Apache에서 제공하는 Connection Pool을 사용하였다.

HikariCP라는 녀석이 등장하고 기존의 방법보다 성능과 비용측면에서 매우 우수한 효과를 보여주었다.

하지만 Spring 2버전 이후? 부터 기본 Connection Pool로 채택되어 별다른 설정이 없다면 Spring은 기본으로 HikariCP를 사용한다.

Spring boot에서의 Connection Pool 설정

Spring에서 여러가지 설정이 필요할때는 주로 yaml이나 application.properties같은 문서를 작성하지만, 본문에서는 JavaConfig를 통해 설정할것이다.

Spring boot에서 HikariCP를 사용하는 법은 간단한데, Spring에서 DB사용을 위해 DataSource를 Bean으로 등록할 때, HikariDataSource의 인스턴스를 리턴하는 Bean을 작성하면 된다.

@Configuration
public class HikariConfig{
	@Value("${spring.datasource.username}")  // 1
	private String username;

	@Value("${spring.datasource.password}")  // 1
	private String password;

	@Value("${spring.datasource.url}")  // 1
	private String url;

	// 2
	@Bean
	public DataSource dataSource() {
		HikariConfig hikariConfig = new HikariConfig();  // 3

		hikariConfig.setUsername(username);
		hikariConfig.setPassword(password);
		hikariConfig.setJdbcUrl(url);
		hikariConfig.setConnectionTestQuery("SELECT 1");
		hikariConfig.setMaximumPoolSize(100);  // Connection Pool에서 갖고있을 Connection의 갯수
		hikariConfig.setLeakDetectionThreshold(30000);
		hikariConfig.setPoolName("Mariadb-HikariCP");

		return new HikariDataSource(hikariConfig); // 4
    }
}
  1. yaml 파일에 설정되어 있는 DataSource관련 값들을 가져와 사용
  2. DataSource 빈 등록
  3. HikariDataSource설정을 위한 HikariConfig객체를 생성하고 알맞는 값들을 설정
  4. HikariConfig객체를 인자로 하여, HikariDataSource 객체 리턴

이렇게 하면 HikariCP의 설정은 끝이 난다
특히, setMaximumPoolSize의 설정을 통해 미리 생성될 Connection의 갯수를 지정할 수 있다.

profile
[Spring, React를 공부하는 끈질긴 개발자 지망생] 잊어버리지 않도록! 정리 또 정리!

0개의 댓글