Spring으로 방명록 애플리케이션을 구현하는 시리즈입니다.
- [Spring] 방명록 애플리케이션 (1) - 환경 설정
- [Spring] 방명록 애플리케이션 (2) - 준비 단계 ( 스프링 활용하기 )
- [Spring] 방명록 애플리케이션 (3) - 구현
- [Spring] 방명록 애플리케이션 (4) - 정적 파일 처리 ( DefaultServletHandler )
- [Spring] 방명록 애플리케이션 (5) - 뷰 객체 생성 ( ViewResolver )
- [Spring] 방명록 애플리케이션 (6) - 예외 처리 ( ExceptionHandler )
- [Spring] 방명록 애플리케이션 (7) - 3 Layer Architecture와 Service 계층
- [Spring] 방명록 애플리케이션 (8) - 커넥션 풀 ( Connection Pool ) DBCP
- [Spring] 방명록 애플리케이션 (9) - Mybatis 환경 설정
- [Spring] 방명록 애플리케이션 (10) - Mybatis 적용
Template
지금까지 DAO 객체의 메서드를 보면 중복되는 코드가 너무 많습니다.
1) Connection을 얻는다.
2) sql을 작성한다.
3) 동적으로 값을 할당한다,
4) 결과 값이 있으면 결과 값을 받는다.
5) 항상 같은 try - catch - finally가 존재한다.
모든 메서드마다 이 과정이 꼭 필요하지만, 중복해서 작성해야만 합니다.
중복은 피하는 것이 좋으므로 이렇게 중복되는 부분을 모듈화 하는 Template 기법이 필요하다는 것을 느낄 수 있습니다.
Mybatis는 꼭 필요하지만 중복되는 코드를 제거해주며, SQL Mapping이 가능한 라이브러리 입니다.
Mybatis를 사용하면 SQL 쿼리를 따로 모아 놓은 설정 파일을 있기 때문에 DAO가 굉장히 간단해집니다.
SQL Mapping이란 다음 글에서 코드를 보면서 살펴보도록 하겠습니다.
Mybatis 환경 설정
라이브러리 추가
pom.xml
<!-- MyBatis core -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.2</version>
</dependency>
<!-- MyBatis spring 지원 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
applicationContext.xml
<!-- Connection Pool DataSource-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/webdb" />
<property name="username" value="webdb" />
<property name="password" value="webdb" />
</bean>
<!-- MyBatis SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource"ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/configuration.xml" />
</bean>
<!-- MyBatis SqlSessionTemplate -->
<!-- 생성자의 첫 번째 파라미터에 sqlSessionFactory 객체를 넣으라는 의미 -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
가장 위에 있는 dataSoruce bean은 이전 글 ( 링크 )에서 다뤘던 내용입니다.
커넥션 풀을 사용하기 위한 코드이죠.
두 번째는 sqlSessionFactory bean입니다.
이 객체는 dataSource와, mybatis 환경설정 파일을 프로터리로 갖습니다.
mybatis 설정 파일은 SQL Mapping을 위한 파일인데, 아직 작성하지 않았습니다.
세 번째는 sqlSessionTemplate bean입니다.
이 글의 서두에서 Template을 언급했었죠.
sqlSession은 꼭 필요하지만 중복되는 코드를 모듈화 하는 부분을 담당합니다.
위의 설정 파일을 코드로 작성하면 아래와 같은 구조일 것입니다.
SqlSessionFactory sf = new SqlSessionFactoryBean();
s.setDataSource(data.soruce);
s.setConfigLocation(“~~~~”);
SqlSession ss = new SqlSessionTemplate(sf);
SQL Mapping에 필요한 부분을 작성한 설정 파일들을 SqlSessionFactoryBean에 저장해둡니다.
그러면 sqlSession을 통해 메서드 호출만으로 쿼리를 실행할 수 있습니다.
이제 SQL Mapping을 위한 설정 파일을 만들어야 합니다.
applicationContext.xml 에서 설정한 두 번째 bean인 SqlSessionFactoryBean에서 configuration 프로퍼티의 값에 classpath 라는 것이 있습니다.
프로젝트 구조를 보면 위의 그림과 같습니다.
/src/main/java 폴더에는 java 파일이 존재하며,
/src/main/resources 폴더에는 설정 파일이 존재합니다.
이 안에 mybatis 폴더를 만들어서 mybatis와 관련된 설정 파일을 작성할 것이구요.
/src/main/java 와 /src/main/resources 폴더는 컴파일 되면 webapp/WEB-INF/classes 폴더 아래에 위치하게 됩니다.
즉 classpath란 webapp/WEB-INF/classes 경로를 의미하게 됩니다.
따라서 Mybatis 설정 파일은 /src/main/resources 폴더 아래에 작성해야 합니다.
/src/main/resources 소스 폴더를 만들어서 mybatis 패키지에 configuration.xml 파일을 생성하겠습니다.
configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
</typeAliases>
<mappers>
<mapper resource="mybatis/mappers/guestbook.xml"/>
</mappers>
</configuration>
<mappers> 태그 아래에 SQL Mapping을 할 설정 파일의 경로를 작성합니다.
이제 mybatis 폴더 아래에 mappers 폴더를 생성하고 guestbook.xml 파일을 생성하겠습니다.
guestbook.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="guestbook">
</mapper>
기본 골격은 위와 같습니다.
이제 이곳에 SQL을 작성하면 되는데, SQL을 작성하는 부분은 다음 글로 미루도록 하겠습니다.
이상으로 Mybatis 환경 설정을 마치겠습니다.
다음 글에서는 방명록 애플리케이션에 Mybatis를 적용하여 DAO를 간단히 정리해보도록 하겠습니다.