Keep going

스프링과 Oracle Database 연동 본문

Records/Spring Framework

스프링과 Oracle Database 연동

코딩천재홍 2021. 2. 3. 19:08

오라클과 SQL DEVELOPER를 설치 완료했다고 가정하고 프로젝트와 JDBC 연결을 해보겠다.

 

◆ 프로젝트와 JDBC 연결

우선 JDBC 연결을 하려면 JDBC Driver가 필요하다. 

Oracle 데이터베이스의 JDBC Driver는 11g까지 공식적으로 Maven으로는 지원되지 않기 때문에, 직접 jar 파일을 프로젝트에 추가시켜야 한다.

 

sqldeveloper>jdbc>lib 에 jar파일 존재

추가 할 프로젝트 선택 후 properties 들어가기

Build path에 jar 파일 추가
Web Deployment Assembly에 jar 파일 추가

 

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

테스트 코드

테스트 코드는 Java와 JDBC 드라이버만으로 구현해서 먼저 테스트해야 한다.

데이터 베이스 연결이 가능하다면 데이터베이스가 연결된 Connection 객체가 출력된다.

실행 결과

 

 

◆ 커넥션 풀 설정

여러 명의 사용자를 동시에 처리해야 하는 웹 애플리케이션의 경우 데이터베이스 연결을 이용할 때는 '커넥션 풀' 을 이용하므로 아예 스프링에 커넥션 풀을 등록해서 사용하는 것이 좋다.

Java에서는 DataSource라는 인터페이스를 통해서 커넥션 풀을 사용한다. DataSource를 통해 매번 데이터베이스와 연결하는 방식이 아닌, 미리 연결을 맺어주고 반환하는 구조를 이용하여 성능 향상을 꾀한다.

 

커넥션 풀은 여러 종류가 있다. (spring-jdbc 라이브러리, HikariCP..) → HikariCP 이용

 

# porm.xml 설정

HikariCP 라이브러리
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>2.7.4</version>
</dependency>
cs

 

# Bean 설정

-1. root-context.xml 설정을 이용하는 경우

root-context.xml은 스프링이 로딩되면서 읽어 들이는 문서 

주로 이미 만들어진 클랫들을 이용해서 스프링의 빈으로 등록할 때 사용

일반적인 상황에는 프로젝트에 작성한 클래스들은 어노테이션 이용하는 경우가 많고

외부 jar 파일 등으로 사용하는 클래스들은 <bean> 태그를 이용해서 작성하는 경우가 대부분이다.

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
    <property name="driverClassName"
        value="oracle.jdbc.driver.OracleDriver"></property>
    <property name="jdbcUrl"
        value="jdbc:oracle:thin:@localhost:1521:XE"></property>
    <property name="username" value="book_ex"></property>
    <property name="password" value="1111"></property>
</bean>
 
    <!-- HikariCP configuration -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"destroy-method="close">
    <constructor-arg ref="hikariConfig" />
</bean>
cs

 

-2. Java 설정을 이용하는 경우

 

RootConfig 클래스와 @Bean을 이용해서 처리

@Bean은 XML 설정에서 <bean> 태그와 동일한 역할 한다.

@Bean이 선언된 메서드의 실행 결과로 반환된 객체는 스프링의 객체로 등록된다.

 

 

-RootConfig 클래스
package org.zerock.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 = {"org.zerock.sample"})
public class RootConfig {
    
    @Bean
    public DataSource dataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        hikariConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE");
        hikariConfig.setUsername("book_ex");
        hikariConfig.setPassword("book_ex");
    
        HikariDataSource dataSource = new HikariDataSource(hikariConfig);
        
        return dataSource;
    }
}
cs

 

# 테스트 코드 실행

package org.zerock.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 lombok.Setter;
import lombok.extern.log4j.Log4j;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
//@ContextConfiguration(classes = {RootConfig.class}) ← java 설정을 사용하는 경우
 
@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());
        }
 
    }
}
cs

테스트 코드는 빈으로 등록된 DataSource를 이용해서 Connection을 제대로 처리할 수 있는지를 확인해 보는 용도

 

 

실행 결과

실행 결과는 서버의 로그를 확인하는 것으로 설정에 문제가 없는지 확인하는 수준,

브라우저에서 최종 결과를 확인하기 위해서는 더 많은 설정 필요

 

 


출처 : 코드로 배우는 스프링 웹 프로젝트 [구멍가게 코딩단]

Comments