yahayaha

4. 커넥션 풀 설정하기(HikariCP) 본문

spring/환경설정

4. 커넥션 풀 설정하기(HikariCP)

yaha 2024. 1. 14. 16:03

여러 명의 사용자를 동시에 처리하는 웹 어플리케이션 경우 데이터베이스 연결을 이용할 떄는 커넥션 풀(Connection Pool)을 이용하기에 스프링에 커넥션 풀을 등록해서 사용하는것이 좋음.

 

Java에서는 DataSource라는 인터페이스를 통해서 커넥션 풀을 사용함. 하지만 매번 데이터베이스와 연결 하기에는 번거로움이 많으니 미리 연결을 맺어주고 반환하는 구조를 이용하여 성능을 향상 시킴.

 

커넥션 풀은 여러 종류가 있고, spring-jdbc 라이브러리를 이용하는 방법도 있지만.

 

공부하면서 HikariCP를 사용 할 예정임.

 

1. 라이브러리 추가와 DataSource 설정

JDK버전별 maven설정이나 기타 설정은 HikariCp github에서 참고해보는 것이 좋음.

https://github.com/brettwooldridge/HikariCP

 

GitHub - brettwooldridge/HikariCP: 光 HikariCP・A solid, high-performance, JDBC connection pool at last.

光 HikariCP・A solid, high-performance, JDBC connection pool at last. - GitHub - brettwooldridge/HikariCP: 光 HikariCP・A solid, high-performance, JDBC connection pool at last.

github.com

 

 

pom.xml을 수정해서 HikariCp를 추가

 

추가 완료 후 

 

root-context.xml 안에 설정은 직접 <bean>태그를 정의해서 작성.

 

<bean> 태그 내에는 <property>를 이용해서 여러 속성에 대해서 설정할 수 있음.

 

 

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
	<property name="driverClassName"
		value="oracle.jdbc.driver.OracleDriver"></property>
	<property name="jdbcUrl"
		value="jdbc:oracle:thin:@localhost:1521:XE"></property>
	<property name="username" value="book"></property>
	<property name="password" value="????"></property>
	
	</bean>
	
	<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig"></constructor-arg>
	</bean>
	
	<!-- HikariCP configuration -->

 

password는 기억해둔 오라클 SQL Developer 비밀번호를 입력

 

스프링에서 root-context.xml은 스프링이 로딩되면서 읽어 들이는 문서. 

 

주로 이미 만들어진 클래스들을 이용해서 스프링의 빈(Bean)으로 등록할 때 사용됨.

 

일반적인 상황이라면 프로젝트에 직접 작성하는 클래스들은 어노테이션을 이용하는 경우가 많고. 외부 jar 파일 등으로 사용하는 클래스들은 <bean> 태그를 이용해서 작성하는 경우가 대부분.

 

2. 테스트 해보기

이제 제대로 되었는지 테스트 코드를 돌려봐야함.

 

클래스 생성

클래스 생성 후 연결이 잘 되었는지 확인 하기위해 테스트 코드를 입력.

import java.sql.Connection;

import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class DataSourceTests {

	@Setter(onMethod_ = { @Autowired })
	private DataSource dataSource;
	@Test
	public void testConnection() {
		
		try (Connection con = dataSource.getConnection()){
			log.info(con);
		
			
		} catch (Exception e) {
			fail(e.getMessage());
		}
	}
}

 

이걸 테스트를 돌려보면 

 

갑자기 안되었는데 오류를 찾아보니까. 

 

오라클 연동 오류가 뜸. 

 

일단 root-context로 이동해보니.

 

아 ㅋㅋ

블로그에 올린다고 패스워드를 입력을 개판으로 해둔것. 이걸 수정하고 다시 테스트를 돌려보니 

 

굿 ㅋㅋ;

HikariCP가 시작되고 종료되는걸 확인. 

 

하지만 다른 여러 설정이 필요한 상태이므로 이건 공부하면서 추후 추가 예정.