Spring – MyBATIS 게시판 만들기 – 1

Spring framework 예제

글쓴이의 컴퓨터 환경 Java JDK 1.8 + Eclipse Oxygen + Apache Tomcat 9.0.2 + STS 3.9.2

Spring Framework

Spring Framework 를 사용하기 위해 먼저 Eclipse Marketplace에서 STS(Spring Tool Suite)를 설치해야 한다.

STS Install
STS Install

모든 설치가 끝나면 Eclipse를 재시작하라는 문구가 나온다. Restart Now를 눌러서 재 시작을 하면 전에 볼 수 없었던 Project를 볼 수 있을 것이다. 우선 새로운 프로젝트를 하나 만든다.

Spring Legacy Project
Spring Legacy Project

spring으로 타이핑하면 위와 같이 Legacy Project를 찾을 수 있을 것이다.

 

Spring Legacy Project - 2
Spring Legacy Project – 2

프로젝트 이름을 적어주고 Templates에 Spring MVC Project를 눌러서 Next버튼을 눌러준다. 만약 필요한 패키지들을 다운받아야 된다고 하면 Download를 누른다.

 

Spring Legacy Project - 3
Spring Legacy Project – 3

패키지(디렉터리) 이름을 적어주고 Finish를 눌러주면 스프링 프레임워크를 사용하기 위한 프로젝트가 생성된다. 이 때 패키지의 구조는 위 사진처럼 3단으로 만들어야 한다.

 

Spring MVC Project
Spring MVC Project

생성이 됐다면 위 사진과 같이 만들어졌을 것이다. 만약 아이콘에 ‘X’ 표시가 있다면 ‘X’ 표시가 없어질 때 까지 기다린다.

 

첫 번째 해야할 일 : 라이브러리 추가하기

스프링에서는 라이브러리를 “Maven”을 통해 관리한다. 만약 스프링이 아니였다면 프로젝트의 Properties > Java Build Path 에서 따로 추가했을 것이다.

우리가 필요한 라이브러리는 다음과 같다.

  1. ojdbc : Oracle Database를 사용하기 위한 JDBC
  2. commons-dbcp : Database Connection Pool
  3. spring-jdbc : 스프링에서 jdbc를 사용하기 위한 라이브러리
  4. mybatis : Connection과 SQL실행을 맡아서 하는 프레임워크
  5. mybatis-spring : 스프링에서 mybatis를 사용하기 위한 라이브러리
  6. junit : MVC 디자인 패턴에서 개별적으로 디버깅을 할 수 있게 해주는 라이브러리
  7. spring-test : spring에서 junit을 사용하기 위한 라이브러리

“Maven”은 pom.xml 파일에서 설정할 수 있다. pom.xml을 누르면 밑에 “dependencies”탭을 볼 수 있을 것이다. 위 라이브러리를 다음과 같이 추가한다.

Add dependency
Add dependency

ojdbc 는 Maven Repository에 없기 때문에 다음 링크를 참조해서 추가한다.

추가한 후 Save버튼을 누르면 Maven이 알아서 라이브러리를 받아서 프로젝트에 추가 시켜준다. 라이브러리는 Java Resources > Libraries > Maven Dependencies 에서 확인할 수 있다.

 

두 번째 해야할 일 : Spring – MyBATIS 연동하기

일반 Dynamic Web Project 에서는 DB Connection Pool(JNDI)을 사용하기 위해 tomcat server의 context.xml 파일에 설정했을 것이다. 스프링 프레임워크에서는 root-context.xml 파일에서 설정한다. 이 파일은 정적인 bean을 생성하는 곳이다.

파일의 위치는 src > main > webapp > WEB-INF > spring 하위에 위치한다.

파일을 열어보면 beans 태그가 보일 것이다. 그 안에 아래의 코드를 수정하여 입력한다.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="사용할 DB의 JDBC Driver 이름"></property>
        <property name="url" value="DB호스트"></property>
        <property name="username" value="DB접속ID"></property>
        <property name="password" value="DB접속PW"></property>
        <property name="maxActive" value="8"></property>
        <property name="maxIdle" value="8"></property>
        <property name="minIdle" value="0"></property>
        <property name="maxWait" value="-1"></property>
    </bean>

dataSource를 생성했고 이를 테스트하려면 Junit을 사용하면 된다. 우선 MyBATIS도 연동 후 테스트하기로 한다.

MyBATIS를 연동하기 위해 다음 코드를 삽입하고 이에 해당하는 MyBATIS 설정 파일(xml)을 만들어준다. (mapper 태그 안에 “namespace”가 없으면 설정 애러가 발생하므로 꼭 namespace를 지정해준다.)

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:/META-INF/mybatis/mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:/META-INF/mybatis/*-mapper.xml"></property>
    </bean>
    
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
    </bean>

SqlSessionFactoryBean은 데이터베이스에 연결하기 위한 Connection을 만드는 역할을 하고 SqlSessionTemplate은 실제 SQL문을 실행하고 결과를 받아오는 역할을 한다. 즉 MyBATIS를 사용하면 Connection, Statement, ResultSet, 이를 위한 try – catch 문 등 사용할 필요가 없다는 뜻이다.

 

세 번째 해야할 일 : Test

위에서 잠깐 언급했지만 MVC 디자인 패턴으로 개발된 Web Project에서 단위테스트를 하는 것은 골치아픈 일이다. 하지만 Junit Framework를 쓴다면 더 이상 골치아픈 일은 없을 것이다.

첫 번째로 테스트해야 할 대상은 바로 “dataSource”이름을 가진 bean이다. 데이터베이스와 연결하기 위한 Connection 객체를 만들기 위해 위 DataSource를 만들고 이 객체는 다시 SqlSessionFactoryBean이 참조한다.

따라서 dataSource가 제대로 만들어지지 않는다면 말짱 도루묵이다.

우선 src > test > java > com > board > first 하위에 “DataSourceTest.java”를 만든다. 이 파일의 소스는 다음과 같다.

package com.board.first;

import java.sql.Connection;
import java.sql.SQLException;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/*.xml"})
public class DataSourceTest {
    @Inject
    private DataSource ds;

    @Test
    public void dataSourceTest() {
        Connection con;
        try {
            con = ds.getConnection();
            System.out.println(con);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Spring에서 Junit을 사용하기 위해 “RunWith”와 “ContextConfiguration”이라는 두 개의 Annotation을 만든다.

클래스 안 ds 객체에 “Inject”라는 Annotation을 사용하여 의존성을 주입 시킨다.

“Test”라는 Annotation을 사용하여 Junit에게 테스트를 부탁(Run As > JUnit Test )한다. 정상적인 경우라면 아래의 그림과 같이 JUnit 탭에 초록색으로 표시된다.

Junit
Junit

 

마찬가지로 MyBATIS(SqlSession)도 테스트해야 할 것이다. 같은 경로에 “SqlSessionTest.java”라는 파일을 만들고 아래의 코드를 삽입 후 테스트를 해본다.

package com.board.first;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/*.xml"})
public class SqlSessionTest {
    @Inject
    private SqlSession sqlsession;
    
    @Test
    public void sqlSessionTest() {
        System.out.println(sqlsession);
    }

}

 

참고자료

MyBATIS 시작하기 – http://www.mybatis.org/mybatis-3/ko/getting-started.html

Spring Framework란? – [Spring Framework] 스프링 프레임워크란?

MyBATIS란? – [MyBatis Framework] MyBatis 프레임워크란?

%d 블로거가 이것을 좋아합니다: