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 프로그래밍 (최범균 저)