이번 포스팅에서는 HikariCP로 DB에 접속해보고 springframework의 jdbc driver와의 속도 차이를 확인해보도록 하겠습니다.

 

springframework의 jdbc 설정은 다음 링크를 참조하시기 바랍니다.

2020/12/11 - [프로그래밍/Spring Framework] - [JDBC] Spring Maven 프로젝트에 MS-SQL Server 2019 JDBC Driver 설정 방법

 

[JDBC] Spring Maven 프로젝트에 MS-SQL Server 2019 JDBC Driver 설정 방법

이번 포스팅에서는 Spring Maven 프로젝트를 생성 후 MS-SQL과 연결하는 과정을 설명드리겠습니다. MS SQL Server 2019 JDBC Driver 정보가 있는 다음 사이트에 접속합니다. docs.microsoft.com/en-us/sql/connec..

grand-unified-engine.tistory.com

JUnit 테스트 환경은 다음을 참조하시기 바랍니다.

2020/12/14 - [프로그래밍/Spring Framework] - [JUnit] JUnit으로 테스트 환경 설정하기

 

[JUnit] JUnit으로 테스트 환경 설정하기

안녕하세요 이번 포스팅에서는 이클립스에 JUnit 라이브러리를 추가하고 JUnit 테스트를 할 수 있게 환경을 구성해보겠습니다. 1. Maven Dependancies 추가 JUnit 테스트를 하기 위해서는 두 가지 라이브

grand-unified-engine.tistory.com

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 사이트에 접속합니다.

 

mvnrepository.com/

 

Maven Repository: Search/Browse/Explore

yang-maven-plugin-spi Last Release on Dec 14, 2020

mvnrepository.com

검색창에 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할 때 시간을 비교해보았습니다.    

+ Recent posts