커넥션 풀 설정
일반적으로 여러 명의 사용자를 동시에 처리해아하는 웹 애플리케이션의 경우 데이터베이스 연결을 이용할 때는 '커넥션 풀(Connection Pool)'을 이용하므로, 아예 스프링에 커넥션 풀을 등록해서 사용하는 것이 좋다.
Java에서는 DataSource라는 인터페이스를 통해서 커넥션 풀을 사용한다. DataSource를 통해 매번 데이터베이스와 연결하는 방식이 아닌, 미리 연결을 맺어주고 반환하는 구조를 이용하여 성능 향상을 한다.
커넥션 풀은 여러 종류가 있고, spring-jdbc 라이브러리를 이용하는 방식도 있지만, 나는 최근 유행하는 HikariCP를 이용할 것이다.
라이브러리 추가와 DataSource 설정
Maven Repository( https://mvnrepository.com/artifact/com.zaxxer/HikariCP )에서 HikariCP 제일 최신 버전의 Maven 코드를 복사한다.
pom.xml을 수정해서 HikariCP를 추가한다.
root-context.xml 안에 설정은 직접 <bean> 태그를 정의해서 작성한다. <bean> 태그 내에는 <property>를 이용해서 여러 속성에 대해서 설정할 수 있는데 HikariCP에 대한 설정은 https://github.com/brettwooldridge/HikariCP를 참고해서 작성한다.
▶ root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName"
value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="jdbcUrl"
value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"></property>
<property name="username" value="book_ex">
</property>
<property name="password" value="book_ex">
</property>
</bean>
<!-- HikariCP configuration -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
<context:component-scan base-package="org.noel.sample"></context:component-scan>
</beans>
스프링에서 root-context.xml은 스프링이 로딩되면서 읽어 들이는 문서이므로, 주로 이미 만들어진 클래스들을 이용해서 스프링의 빈(Bean)으로 등록할 때 사용된다. 일반적인 상황이라면 프로젝트에 직접 작성하는 클래스들은 어노테이션을 이용하는 경우가 많고, 외부 jar 파일 등으로 사용하는 클래스들은 <bean> 태그를 이용해서 작성하는 경우가 대부분이다.
아까 작성했던 root-context.xml의 빈이 제대로 등록되었는지는 Spring Explorer를 통해서 확인할 수 있다.
스프링이 시작되면 root-context.xml을 읽어서 아래와 같은 형태로 id가 dataSource인 객체가 처리된다.
초기에 스프링에 대한 경험이 많지 않다면 빈(Bean)을 정의한 다음에는 항상 테스트를 작성하는 습관을 가지는 것이 좋다. 그러므로 'src/test'java'에 DataSourceTests 클래스를 작성해서 테스트를 할 것이다.
▶ DataSourceTests 클래스
package org.noel.persistence;
import java.sql.Connection;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.noel.sample.SampleTests;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class DataSourceTests {
@Autowired
private DataSource ds;
@Autowired
private SqlSessionFactory sessionFactory;
@Test
public void testConnection() {
try(Connection con = ds.getConnection()) {
log.info(con);
}catch(Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
테스트 코드는 스프링에 빈(Bean)으로 등록된 DataSource를 이용해서 Connection을 제대로 처리할 수 있는지를 확인해 보는 용도이다. testConnection()을 실행해 보면 내부적으로 HikariCP가 시작되고, 종료되는 로그를 확인할 수 있다.
실행 결과는 서버의 로그를 확인하는 것으로 설정에 문제가 없는지를 확인하는 수준이고, 불행하게도 아직 브라우저에서 최종결과를 확인하지는 못합니다.
'Back-end > Spring Web Project' 카테고리의 다른 글
MyBatis와 스프링 연동(2) - Mapper XML 설정 (0) | 2023.11.15 |
---|---|
MyBatis와 스프링 연동(1) - MyBatis 연동 (0) | 2023.11.14 |
[Spring Web Project] 스프링과 Oracle Database 연동(2) - JDBC 드라이버 연결 확인 (1) | 2023.11.13 |
[Spring Web Project] 스프링과 Oracle Database 연동(1) - Oracle 설치 및 설정 (1) | 2023.11.13 |
[Spring Web Project] 스프링의 특징과 의존성 주입 (0) | 2023.11.13 |