이번 포스팅에서는 HikariCP로 DB에 접속해보고 springframework의 jdbc driver와의 속도 차이를 확인해보도록 하겠습니다.
springframework의 jdbc 설정은 다음 링크를 참조하시기 바랍니다.
JUnit 테스트 환경은 다음을 참조하시기 바랍니다.
2020/12/14 - [프로그래밍/Spring Framework] - [JUnit] JUnit으로 테스트 환경 설정하기
springframework의 jdbc 설정은 Spring Bean Configuration File에 다음과 같이 입력합니다.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config/db.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
테이블 한개 조회하는 시간을 측정하기 위해 JUnit 테스트를 생성하도록 하겠습니다.
프로젝트 선택 후 마우스 오른쪽 -> New ->JUnit Test Case를 클릭하고 자바 파일을 생성합니다.
다음과 같이 코드를 입력합니다.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/root-context.xml"})
public class dataSourceSpeedTest {
@Autowired
private ApplicationContext context;
@Test
public void test() {
Connection conn = null;
Statement state = null;
long start = System.currentTimeMillis();
DataSource ds = (DataSource) context.getBean("dataSource");
try {
conn = ds.getConnection();
state = conn.createStatement();
String sql; //SQL문을 저장할 String
sql = "SELECT * FROM 테이블명 ";
ResultSet rs = state.executeQuery(sql); //SQL문을 전달하여 실행
while(rs.next()){
String dpt_cd = rs.getString("DPT_CD"); //조회하려는 필드1
String dpt_nm = rs.getString("DPT_NM"); //조회하려는 필드2
System.out.println("dpt_cd: "+ dpt_cd + "\ndpt_nm: " + dpt_nm);
}
rs.close();
state.close();
conn.close();
long end = System.currentTimeMillis();
long secDiffTime = (end - start);
System.out.println("조회시간 : "+secDiffTime/1e3 + "초");
} catch(Exception e){
//예외 발생 시 처리부분
}
}
}
<Ctrl> + <F11>로 빌드하면 콘솔 창에 다음과 같이 조회시간이 표시됩니다.
이번에는 Hikari Connection Pool로 DataSource를 연결 후 같은 소스로 조회시간을 측정해보도록 하겠습니다.
먼저 HikariCP 환경 설정을 위해 Maven Repository 사이트에 접속합니다.
검색창에 hikaricp를 입력하고 조회합니다.
Maven dependency 코드를 복사해서 pom.xml에 붙여넣기합니다.
Spring Bean Configuration File에 다음과 같이 Hikari Connection Pool 정보를 입력합니다.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config/db.properties</value>
</list>
</property>
</bean>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
다시 JUnit Test 소스를 실행해보도록 하겠습니다.
자바 파일을 선택 후 <Ctrl> + <F11>을 누릅니다.
조회시간이 0.204초가 나옵니다.
springframework의 jdbc로 설정했을 때보다 무려 3% 밖에 시간이 안 걸리는 것을 확인할 수 있습니다.
조건별로 다른 결과가 나오겠지만 Hikari Connection Pool을 사용하면 시간을 꽤 단축시킬 수 있을 것이라 판단됩니다.
지금까지 Hikari Connection Pool로 DB접속할 수 있게 환경을 구성하고 springframework의 jdbc 와 테이블 Full Scan할 때 시간을 비교해보았습니다.
'프로그래밍 > Spring Framework' 카테고리의 다른 글
[MockMvc] Spring Framework servlet test(VO에 임의 데이터만 넣고 controller 테스트) (0) | 2020.12.23 |
---|---|
[MyBatis] Spring Framework에 마이바티스(MyBatis) 설정하기 (0) | 2020.12.16 |
[JUnit] JUnit으로 테스트 환경 설정하기 (0) | 2020.12.14 |
[JDBC] Spring Maven 프로젝트에 MS-SQL Server 2019 JDBC Driver 설정 방법 (0) | 2020.12.11 |
[STS4] The all-new Spring Tools Suite 4 설치(windows기준) (0) | 2020.12.10 |