CoC (Convention Over Configuration) 를 이용하여 iBATIS 설정 간소화하기

Java 2008. 10. 12. 22:34
web base framework에서 OR 맵퍼로 본인은 습관적으로 ibatis를 사용하고 있다.
물론 습관이 된 배경은 ibatis의 simple함이 가장 클것이다.

하지만 project진행시에 다수의 개발자들이 공동으로 access하는 sqlmap-config파일은
소스관리 tool(subversion, cvs..)에서 충돌을 야기 시키고 이에 대한 각 개발자간 주의를 요하 만든다.

본인의 경우 web application이 로딩되는 시점에 이런류의 설정 xml파일들을
설정파일의 ROOT디렉토리부터 계층구조로 찾아가면서 동적으로 로드하도록 ibatis를 수정하여 사용했었는데

spring2.5.3 이후 버전부터 ibatis설정파일의 분리를 위한 기능이 제공되었다.

정말 고마운 사람들이 아닐 수 없다.

단 spring2.5.3 이상, iBATIS 2.3.2이상의 버전이 필요하다.

출처 : http://blog.dev.daewoobrenic.co.kr/tc/jcfblog/127

서브모듈 별로 분리하여 시스템을 개발하려면 설정파일을 잘 분리해야 한다.
iBATIS 인 경우는 sqlmap-config 파일에 모든 mapping 파일을 등록해야 하므로
사실상 설정 파일을 모듈별로 분리하기는 어렵다.
이 부분에 대하여 고민하고 있던 중에 Spring 프레임워크가 구원투수로 나섰다.

Spring 버전 2.5.3을 이용하면 이 문제를 깔끔(?)하게 처리할 수 있다.

새롭게 추가된 SqlMapClientFactoryBean의 mappingLocations 프로퍼티를 통해
sqlmap mapping 파일을 일일히 지정하지 않고 패턴을 이용하여 일괄적으로 지정할 수 있게 되었다.

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="configLocation" value="classpath:sqlmap-config.xml" />
    <property name="mappingLocations" value="classpath:**/sqlmap/*.xml"/>
    <property name="dataSource" ref="dataSource" />
</bean>    

위와 같이 설정하면 sqlmap-config 파일은 아래와 같이 단순해 진다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://dev.daewoobrenic.co.kr/dtd/sql-map-config-2.dtd">

<sqlMapConfig>    
    <settings useStatementNamespaces="true" cacheModelsEnabled="false"/>
</sqlMapConfig>

주의해야 할 것은  iBATIS 2.3.2 이상의 버전을 사용해야 하며
DTD 파일에서 sqlMap 을 필수에서 옵션으로 변경해 주어야 한다.
우선 테스트를 위해서 src 디렉토리에 com.ibatis.sqlmap.engine.builder.xml 팩키지를
만들고 기존의 sql-map-config-2.dtd  복사하여 아래와 같이 변경을 하였다.

<!ELEMENT sqlMapConfig (properties?, settings?, resultObjectFactory?, typeAlias*, typeHandler*, transactionManager?, sqlMap*)+>

아직까지는 DTD를 수정해야 하는 번거러움이 있지만
개발자 분들의 노가다를 줄이는데 조금이라도 도움이 되었으면 좋겠다^^

설정

트랙백

댓글