티스토리 뷰

Spring

04. Spring + MyBatis + MySQL 설치 및 연동

마시멜로co. 2017. 10. 7. 02:31

04. Spring + MyBatis + MySQL 설치 및 연동

이전 글 : http://marshmello.tistory.com/4


저번글에서는 Mysql 설치 방법과 테스트 방법에 대해서 실습하였습니다.


이번글에서는 MyBatis가 무엇인지 알아보고 스프링과 MyBatis, MySQL 연동 방법에 대하여 공부하여 보겠습니다. 


4.1 MyBatis란?

MyBatis는 Spring프로젝트에서 SQL 처리를 도와주는 형태로 JDBC와 유사합니다.

하지만 JDBC와 비교하면 다음과 같은 장점을 제공합니다.

  • 간결한 코드의 처리 

MyBatis는 SQL 맵퍼 라이브러리입니다. JDBC 작업을 하다보면 중복코드가 발생하게 되는데 예를 들어 try-catch-finally 를 이용하여 처리에서부터 PrepareStatement와 ResultSet의 데이터를 처리하기까지 많은코드를 직접 작성하게됩니다. 반면 MyBatis는 이러한 코드를 상당히 줄여줘서 개발 속도를 향상 시키며 스프링과 MyBatis를 결합하면 코드 제작없이도 JDBC 처리가 가능하게 됩니다.

  • SQL문의 분리운영

JDBC는 개발자가 SQL문을 처리하기 위해 별도의 파일을 작성하는 작업이 필요하지만, MyBatis의 경우 XML 혹은 애노테이션 방식으로 SQL문을 별도로 처리하는 작업이 가능하고 필요한 겨우에는 두가지 방식을 혼합해서 사용하는 것도 가능합니다. 

  • Spring과 연동으로 자동화된 처리

스프링 프레임워크와 MyBatis를 연계하는 MyBatis-Spring 라이브러리를 이용하면, 개발자는 직접 SQL문의 호출 없이도 원하는 결과를 얻을 수 있습니다. 이는 MyBatis-Spring 라이브리가 만들어내는 클래스 덕분인데, 이 때문에 MyBatis는 단독으로 사용하는 것보다 스프링과 연계해서 사용하는 편이 코드의 양을 줄여주게 됩니다.

  • 동적 SQL을 이용한 제어 가능

MyBatis는 기본적으로 SQL문을 처리하기는 하지만 약간의 제어문이나 루프등의 처리기능이 있습니다. 이를 통해 SQL과 고나련된 처리를 Java 코드에서 분리 시킬수 있습니다.



4.2 root-context.xml 파일 설정 

Spring 프로젝트에서 root-context.xml 파일은 가장 중요한 파일입니다.




root-context.xml 파일은 웹 자원과 관련되지 않은 자원의 설정을 위해서 존재합니다. 웹과 관련된 설정은 appServlet/servlet-context.xml 파일로 분리합니다.


root-context.xml에 MySQL과의 연결을 담당하는 DataSource라는 것을 추가합니다.

DataSource는 JDBC의 커넥션을 처리하는 기능을 가지고 있기 때문에 데이터베이스 연동 작업에 반드시 필요합니다.


우선 MyBaits관련 라이브러리를 다음과같이 추가합니다.



pom.xml



root-context.xml 네임스페이스를 아래와 같이 설정한 후 



DataSource 속성을 추가합니다.



파일첨부 : root-context.xml


저번 글에서 테스트 코드를 작성하고 실행하는 방법을 작성하였는데, 스프링의 경우에는 spring-text 모듈의 도움을 받으면 스프링을 WAS 없이 제대로 동작하는지 확인 가능합니다.


src/test/java 폴더에 DataSourceTest.java 파일을 작성합니다. 






파일첨부 : DataSourceTest.java



클래스 맨위에 @RunWith , @ContextConfiguration 애노테이션은 현재 테스트 코드를 실행 할 때 Spring이 로딩되도록 하는 부분입니다.


@ContextConfiguration의 location 속성 경로에 xml 파일을 이용해서 스프링이 로딩됩니다.

인스턴스 변수의 @Inject 애노테이션 처리된 DataSource는 스프링이 생성해서 주입해 주므로 개발자가 객체 생성 혹은 다른 작업을 하지 않아도 됩니다.


스프링의 spring-test 모듈은 위의 코드와 같이 간단한 애노테이션의 설정으로 실제 스프링의 동작을 확인 할 수 있는 좋은 방법입니다. 특히 WAS의 실행이 매번 상당히 많은 시간이 드는 환경이면 필수적이라고 할 수 있습니다.


위의 코드가 정상적으로 실행된다면 스프링 로딩될 때의 로그들과 Connection 객체가 생성되었다는 것을 알 수 있습니다.



스프링 테스트가 정상적으로 실행되기 위해서 반드시 확인해야 하는 것은 pom.xml 있는 jUnit 버전입니다. jUnit 버전은 4.11 이상을 사용하는 것이 좋습니다. 



DataSource의 연결은 MyBatis의 설정과 관계있으므로 먼저 설정하고 테스트합니다. 

DataSource가 정상적으로 설정된 이후의 작업은 MyBatis의 연결 작업 역시 이전의 DataSource 연결 설정이 정상적으로 이루어진 후에 진행합니다.



4.3 SqlSessionFactory 객체 설정

MyBatis와 스프링 연동 작업에서의 핵심은 Connection을 생성하고 처리하는 SqlSessionFacotry의 존재입니다. SqlSessionFacotry는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체입니다.


스프링을 이용할 때는 SqlSessionFactory를 생성해주는 특별한 객체를 설정해주는데, SqlSessionFacotryBean이라는 클래스를 사용합니다.


SqlSessionFacotryBean은 프로젝트의 'root-context.xml'을 열어 다음내용을 추가합니다.


        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

</bean> 




파일 첨부 : root-context.xml



추가된 객체(빈)의 class 속성 값을 보면 'org.mybatis.spring.xxx' 클래스입니다. 이 클래스는 Mybatis-Spring 모듈을 다운로드 받아야만 사용할 수 있습니다. 


MyBatis는 SQl Mapping 프레임 워크로 별도의 설정 파일을 가질 수 있습니다. 이를 이용하면 스프링의 설정과 별도로 사용하는 모든 MyBatis의 설정 기능을 활용할 수 있습니다. 


mybatis-config.xml 파일을 'src/main/resources' 파일내에 생성합니다.



만들어진 파일을 편하게 사용하기 위해서는 XML 파일의 DTD나 XML 스키마라는 것이 필요합니다 

'mybatis config dtd'라는 키워드로 인터넷을 검색하면 파일의 상단에 들어갈 DTD라는 것을 알아낼수 있습니다.

참고 URL 첨부 : http://www.mybatis.org/mybatis-3/ko/getting-started.html


이제 root-context.xml 파일을 열어 mybatis-config.xml 파일이 스프링이 동작할때 같이 동작하도록 설정해주는 처리작업을 합니다.


root-context.xml 파일을 아래와 같이 수정합니다.


참고 URL 첨부 : http://www.mybatis.org/spring/ko/factorybean.html





4.4 MyBatis 연결 테스트 코드 작성


src/test/java 폴더에 MyBatisTest.java 파일을 작성합니다. 



파일 첨부 : MyBatisTest.java



클래스 선언 아래 인스턴스 변수 sqlFactory에는 스프링이 정상적으로 동작할 경우 SqlSessionFactory를 주입시켜줄 것을 요구합니다.

이전 단계에서 root-context.xml 파일에 설정한 SqlSessionFactoryBean의 설정에 문제가 있다면 이코드에 에러가 발생합니다.


testSession()에서는 try-with 구문을 활용해서 실제 데이터 베이스와의 연결을 담당하는 객체인 SqlSession을 생성하는 부분입니다.

 위 코드의 실행 결과는 아래의 유사한 형태로 'org.apache.ibatis.default.DefaultSqlSession..'과 같은 메시지가 보여지면 정상적으로 동작하는 것입니다.



최종코드 파일 첨부 : 

example.zip


스프링이 테스트 방식에 대해서 아낌없는 지원을 하는 데에 비해 개발자는 테스트 코드를 작성하는데 관심이없는 경우가 많습니다.


테스트를 하는 습관은 나중에 유지보수를 하거나 개별적인 코드들을 하나로 통합하는 과정에서 그 위력을 발휘합니다.


다음은 모델2방식과 스프링 MVC에 대해서 작성하겠습니다.

수고하셨습니다!



댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크