Spring-jdbc 설정 - Spring-jdbc seoljeong

Verity's Daily Logs_

[참고도서: https://book.naver.com/bookdb/book_detail.nhn?bid=13993776]

스프링 프로젝트에 JDBC 연결을 하려면 JDBC Driver가 필요하다. 사용할 데이터베이스는 Oracle 이나, Oracle 데이터베이스의 JDBC Driver는 11g까지 공식적으로 Maven으로는 지원되지 않기 때문에 예지는 직접 jar 파일을 프로젝트에 추가시켜줘야 한다.

(책에 더 올바른 방법으로 소개되어있으나, 팀 프로젝트 기준으로 정리하기 위해 다른 방법을 정리함)

1. pom.xml Dependency 추가

원하는 버전으로 Dependency 를 추가한다.

<dependency>
	<groupId>com.oracle.jdbc</groupId>
	<artifactId>com.springsource.oracle.jdbc</artifactId>
	<version>10.2.0.2</version>
</dependency>

Maven > Update Project 실행 시 원하는 jar파일을 찾을 수 없다고 오류가 발생할 수 있다. 그럴땐 아래 주소로 접속 해 jar 파일을 다운로드하여 오류나는 위치에 그대로 넣어주면 된다.

주소: mvnrepository.com/artifact/com.oracle.jdbc/com.springsource.oracle.jdbc

Maven Repository: com.oracle.jdbc » com.springsource.oracle.jdbc

mvnrepository.com

2. JDBC 연결 테스트 (JUnit)

JDBC 드라이버가 정상적으로 추가되었고, 데이터베이스 연결이 잘 되는지 확인하기 위해 테스트 코드를 작성한다.

제대로 연결이 된다면 데이터베이스가 연결된 Connection 객체가 출력될 수 있다.

package com.package.itapp.persistence;

import static org.junit.Assert.fail;

import java.sql.Connection;
import java.sql.DriverManager;

import org.junit.Test;

import lombok.extern.log4j.Log4j;

@Log4j
public class JDBCTests {
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testConnection() {
		try(Connection con =
				DriverManager.getConnection("jdbc:oracle:thin:@000.00.0.00:1521:USERNAME",
						"USERNAME",
						"USERPWD")){
			log.info("연결완료");
			log.info(con);
		} catch (Exception e) {
			fail(e.getMessage());
		}
		
	}
}

3. 커넥션 풀 설정

다수의 사용자를 동시에 처리해야 하는 웹 애플리케이션의 경우, 데이터베이스 연결을 위해 커넥션 풀(Connection Pool)을 이용한다. 커넥션 풀은 매번 데이터베이스와 연결하는 방식이 아닌, 미리 연결을 맺어주고 반환하는 구조를 이용하여 성능향상을 꾀한다.

커넥션 풀은 여러 종류가 있지만, 이번 예제에서는 HikariCP 를 이용하여 설정해본다.

- pom.xml 추가

<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>2.7.4</version>
</dependency>

- Java Configuration 설정

package com.happynarae.itapp.config;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@ComponentScan(basePackages= {"com.package.itapp.sample"})
public class RootConfig {
	
	@Bean
	public DataSource dataSource() {
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		hikariConfig.setJdbcUrl("jdbc:oracle:thin:@000.00.0.00:1521:DEV");
		hikariConfig.setUsername("USERNAME");
		hikariConfig.setPassword("USERPWD");
		
		HikariDataSource dataSource = new HikariDataSource(hikariConfig);
		
		return dataSource;
	}
}

4. DataSource 생성 테스트 (JUnit)

Bean 객체가 잘 생성되는지 확인하기 위해 테스트케이스를 생성한다.

package com.happynarae.itapp.persistence;

import static org.junit.Assert.fail;

import java.sql.Connection;

import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.package.itapp.config.RootConfig;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes= {RootConfig.class})
@Log4j
public class DataSourceTests {
	
	@Setter(onMethod_ = @Autowired)
	private DataSource dataSource;
	
	@Test
	public void testConnection() {
		try (Connection con = dataSource.getConnection()) {
			log.info(con);
		} catch(Exception e) {
			fail(e.getMessage());
		}
	}
}

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

<!-- tomcat context.xml 소스 수정 후 사용하세요 -->
<Resource auth="Container"
description="Global Address Database"
driverClassName="com.mysql.jdbc.Driver"
maxActive="8"
maxIdle="10"
maxWait="10"
name="jdbc/mysql"
password=""
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/tests?characterEncoding=UTF-8"
username="root"/>
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="com.mysql.jdbc.Driver"/>
<!-- servlet-context.xml 소스 수정 후 사용하세요 -->
<beans:bean
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
name="dataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<beans:property name="url" value="jdbc:mysql://localhost:3306/tests"/>
<beans:property name="username" value="root"/>
<beans:property name="password" value=""/>
</beans:bean>
<beans:bean class="org.springframework.jdbc.core.JdbcTemplate"
name="template">
<beans:property name="dataSource" ref="dataSource">
</beans:property>
</beans:bean>
<!--메이븐 spring-jdbc 설정-->