Spring

[Spring] 스프링 데이터베이스(3) - DataSource 설정

재담 2022. 4. 19. 23:33

DataSource 설정

스프링은 다음과 같이 3가지 방식의 DataSource 설정을 지원하고 있다.

  • 커넥션 풀을 이용한 DataSource 설정
  • JNDI를 이용한 DataSource 설정
  • DriverManager를 이용한 DataSourcr 설정 (테스트 목적)

 

 

커넥션 풀을 이용한 Data Source 설정

스프링은 c3p0와 같은 커넥션 풀 라이브러리를 이용해서 커넥션 풀을 지원하는 DataSoure를 설정할 수 있다. 이를 위해 먼저 다음과 같이 라이브러리를 추가해야 한다.

<!-- pom.xml 설정 부분 -->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.0.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.0.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.2.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.30</version>
    </dependency>
</dependencies>

 

그리고 다음과 같이 c3p0가 제공하는 ComboPooledDataSource 클래스를 이용해서 DataSource를 설정할 수 있다.

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost/guestbook?characterEncoding=utf8"/>
    <property name="user" value="spring4"/>
    <property name="password" value="spring4"/>
</bean>

 

ComboPooledDataSource 클래스는 커넥션 풀을 관리하기 위해 다음과 같이 다양한 프로퍼티를 제공한다.

  • acquireIncrement : 풀에 커넥션이 없을 때 증가시킬 커넥션의 개수. 기본값은 3이다.
  • initialPoolSize : 초기 커넥션 풀의 크기. 기본값은 3이다.
  • maxPoolSize : 커넥션 풀의 최대 크기. 기본값은 15이다.
  • minPoolSize : 커넥션 풀의 최소 크기. 기본값은 3이다.
  • maxConnectionAge : 커넥션의 유효 시간. 단위는 초이며 지정한 시간이 지나면 풀에서 제거된다. 값이 0일 경우 제거되지 않고 기본값은 0이다.
  • maxIdleTime : 지정한 시간 동인 사용되지 않는 커넥션을 제거한다. 단위는 초이며 값이 0일 경우 제거하지 않는다. 기본값은 0이다.
  • checkoutTimeout : 풀에서 커넥션을 가져올 때 대기 시간. 단위는 밀리 초이며, 값이 0이면 무한히 기다린다. 지정한 시간 동안 풀에서 커넥션을 가져오지 못할 경우 SQLException을 발생시킨다. 기본값은 0이다.
  • automaticTestTable : 값이 존재할 경우 지정한 이름의 테이블을 생성한 뒤, 해당 테이블을 이용해서 커넥션이 유효한 지의 여부를 검사한다. 기본값은 null이며, 이 값을 제공하면 preferredTestQuery는 무시된다.
  • idleConnectionTestPeriod : 풀 속에 있는 커넥션의 테스트 주기. 단위는 초이며, 값이 0인 경우 검사하지 않는다. 기본값은 0이다.
  • preferredTestQuery : 커넥션을 테스트할 때 사용할 쿼리. 기본값은 null이다.
  • testConnectionOnCheckin : true인 경우 커넥션을 풀에 반환할 때 커넥션이 유효한지의 여부를 비동기로 검사한다. 기본값은 false이다.
  • testConnectionOnCheckout : true인 경우 커넥션을 풀에서 가져올 때 유효한지의 여부를 검사한다. 기본값은 false이며, 추가적인 검사로 인한 성능 저하가 발생할 수 있기 때문에, 이 값을 true로 하기보다는 idleConnectionTestPeriod를 이용해서 주기적으로 검사하는 방법이 더 나은 선택이다.

 

JNDI를 이용한 DataSource 설정

JNDI로부터 DataSource를 가져오고 싶다면, 다음과 같이 <jae:jndi-lookup> 태그를 이용하면 된다.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:jae="http://www.springframework.org/schema.jae"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/jae
        http://www.springframework.org/schema/jae/spring-jae.xsd">
    
    <jae:jndi-lookup id="dataSource" jndi-name="jdbc/guestbook" resource-ref="true" />
    
    <bean id="jdbcMessageDao" class="[패키지경로].JdbcMessageDao">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <!-- 이하 생략 -->
    ...
</beans>

 

<jae:jndi-lookup> 태그의 jndi-name 속성은 JNDI에서 객체를 검색할 때 사용할 이름을 입력한다. resource-ref 속성의 값이 true일 경우 검색할 이름 앞에 "java:comp/env"가 붙는다.

 

DriverManager를 이용한 DataSource 설정

로컬 테스트 목적으로 DataSource가 필요한 경우, DriverManager를 이용해서 커넥션을 제공하는 DriverManagerDataSource 클래스를 사용할 수 있다. 설정 방법은 다음과 같다.

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost/test?characterEncoding=euckr"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

Reference

  • 웹 개발자를 위한 Spring 4.0 프로그래밍 (최범균 저)