Recent Posts
Recent Comments
Adsense
Archives
Visitor
Today
Total
관리 메뉴

Annotation

전자정부프레임워크 마이바티스 연동설정 (egov or spring mybatis) 본문

Java

전자정부프레임워크 마이바티스 연동설정 (egov or spring mybatis)

devs 2015. 1. 28. 20:59

오랫만에 포스팅을 합니다.

이제는 아침, 저녁 쌀쌀하다 못해 점점 추워지는 느낌이 나네요 매우 좋은 현상입니다 :D

정말 더운건 너무 싫어요..

몸에 열도 많고, 무엇보다 땀이 많아서 더위는 정말 너무너무 싫습니다.

날씨도 시원하니까, 시원한 음악 가볍게 듣고 시작합시다.

칼잔치 성님들의 새로운 앨범(Abandon Ship) 중에 초심업(!) 트랙입니다.


Knife Party - Begin Again


"난 정말 스프링을 공부한 적이 없다구요"

자바 입문할때 많이 추천되는 책이름을 바꿔보았습니다.

전자정부표준프레임워크(이하 egov)를 설치하여 쭉 이것저것 둘러본 후, 처음부터 설정을 시작하였습니다.

시작하며 처음부터 막히던 작업이 바로 마이바티스 설정이었는데요, 제가 겪었던 문제들의 해결법을 포스팅할거구요.

참고해주실건

1. 저는 STS (Spring Tool Suite) 가 아닌, eGovFrameWork (전자정부프레임워크) 를 사용하였습니다.

2. 코어프로젝트가 아닌 eGovFrame Web Project에서 샘플소스를 생성해서 사용했습니다.



1. 메이븐 빌드 후 설정경로 및 파일 확인



자..그럼 먼저 프로젝트 생성하시면 메이븐 빌드를 하셨겠죠?

않하셨으면 본인이 필요한 설정을 pon.xml에 설정해 주세요.

저같은 경우는


<dependency>
	<groupId>postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<version>9.1-901.jdbc4</version>
</dependency>

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.2.1</version>
</dependency>

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.2.0</version>
</dependency>


 PostgreSQL JDBC 드라이버, 마이바티스, 마이바티스 스프링 이렇게 세가지를 추가하였습니다.

메이븐빌드가 완료되면 스프링 설정에 들어갑니다.

(참고 : 파일 경로가 스샷과 일치하지 않는 분은 템플릿이 다르기 떄문입니다.)

기본 템플릿 프로젝트입니다.

우리가 마이바티스 설정을 위해 알아야 할 경로는 위의 스샷에 펼쳐놓은 경로처럼 두곳입니다.



src/main/resources/egovframework/spring/          (스프링 설정폴더입니다)

src/main/resources/egovframework/sqlmap/example/          (메이븐 설정폴더입니다)




그 중에 우리가 여기서 손봐야 할 파일은 4개가 되겠구요.




- 스프링 설정폴더에서 두가지 -

context-datasource.xml          (DB 연결설정 XML 입니다)

context-sqlMap.xml          (세션 팩토리를 빈으로 등록하며 추가 설정을 하는 XML 입니다)

- 마이바티스 설정폴더에서 두가지 -

sql-map-config.xml          (맵핑될 객체를 설정하는 XML 입니다)

PostgreSQL.xml          (쿼리문을 관리하는 XML 입니다)




이렇게 딱 네가지만 인지하고 계시면 되겠습니다.

추가적으로 메이븐 설정폴더에 PostgreSQL.xml 은 제가 추가한것이구요, 이 글을 읽고계신분이 사용하시는 DB설정에 맞게 추가하시면 되겠습니다.



2. 스프링 설정폴더에서 DB 관련 설정



먼저 context-datasource.xml 파일을 열어 설정하겠습니다.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
						http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

	<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
		<property name="driverClass" value="org.postgresql.Driver"/>
		<property name="url" value="jdbc:postgresql://127.0.0.1:5432/testdb"/>
		<property name="username" value="postgres" />
		<property name="password" value="postgres" />
	</bean>
</beans>


파일을 열어보면 주석으로 MySQL, Oracle 등의 설정 예제가 주석으로 되어있는데 해당하는걸 주석해제 후 설정하시면 되겠습니다.

PostgreSQL은 왜 안껴주나요? :P

샘플설정(주석)이 없어서 제가 추가하였습니다.

다음으로는 context-sqlMap.xml 파일을 열어주세요.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<!-- SqlMap setup for iBATIS Database Layer -->
	<!-- <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/>
		<property name="dataSource" ref="dataSource"/>
	</bean> -->
	
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml" />
		<property name="mapperLocations" value="classpath:/egovframework/sqlmap/example/sample/PostgreSQL.xml" />
	</bean>
			
</beans>	

 

템플릿 프로젝트에서는 아이바티스를 사용했나봅니다. 따라서 우리는 마이바티스 설정으로 바꿔주면 되곘습니다.

소스는 윗부분을 참고해주시면 되겠습니다.

위의 설정에서는 13번, 14번 라인에서 value 부분만 설정해 주시면 되겠습니다.

위에 설정을 보시면 어떻게 설정하시는지 감이 오실거라 믿습니다. (말그대로 경로만 잡아주면 됨)

그리고 11번 라인에서 id와, 클래스는 변경하지마시고 그대로 사용하시길 권장합니다.

이유는 DAO 부분에서 EgovAbstractMapper (Spring의 MyBatis 연동 지원 공통 parent DAO 클래스) 를 상속받아 사용합니다.

EgovAbstractMapper 내부에는 @Resource(name = "sqlSession") 라는 어노테이션을 사용하구요.

따라서 SqlSessionTemplate 을 지정하지 않는 이상은, 꼭 저 id 명으로 사용하여야 합니다. :)

너무 길게 설명했나요?

한줄요약 : 추가 설정하지 않는 이상 무.조.껀 id명은 sqlSession으로 설정하자!



3. 마이바티스 설정



사실 2번과 3번 제목의 내용은 이어집니다. 2번 타이틀을 DB 관련설정이라 하였지만, 마이바티스 설정도 포함되는 부분입니다.

이점은 너그럽게 이해 부탁드립니다 :)

그럼 이제 추가적으로 마이바티스 설정을 합시다.

바로 위 context-sqlMap.xml  설정 할때 13번, 14번 라인 기억하시나요?

경로만 잡아주면 되는부분.

이게 그부분을 설정하면 됩니다.

sql-map-config.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>
		<typeAlias type="egovframework.example.map.service.MapVO" alias="mapVO" />
	</typeAliases>
</configuration>


 템플릿 소스에서는 아이바티스 설정으로 되어있습니다. 위의 소스처럼 마이바티스 설정으로 변경해 주세요.

이 설정은 DAO에서 어떠한 작업을 하였고, 그에 해당하는 결과물을 DB에서 가져왔다면 이제 VO에 담아야 하는데,

마이바티스에서 VO 객체를 인지할 수 있도록 설정하는 부분입니다.

type은 정확한 패키지주소와 클래스명을 입력해 주셔야 합니다.

이부분이 정확하지 않으면 컴파일시 에러를 뿜습니다.

설정이 모두 되셨으면 마지막으로 PostgreSQL.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="egovframework.sqlmap.example.sample.PostgreSQL">

	<select id="getOne" resultType="String">
		select 1 as one
	</select>
	
</mapper>


 간단하게 테스트 용으로 저는 저런 쿼리를 설정하였습니다.

이부분은 제가 딱히 설명해드릴게 없네요. 알아서 원하시는 대로 설정해서 사용하시면 되겠습니다.



4. 마치며 (에러 및 소소한 팁)



글이 살짝 길다 라고 느껴지실 수 있는데 사실 길지 않습니다.

또한 제가 주절주절 떠들고, 소스를 첨부하니 양이 많아보여서 약간 어렵게 보일 수도 있지만 그렇지 그닥 어렵지 않습니다.

한줄요약 : XML 설정을 잘 하자!

간단하죠? :P

마지막으로 여기까지 설정하셨으면 테스트를 해봅시다. Ctrl + F11 눌러서 후다닥 웹페이지 켜지는걸 기다리세요!!!!!

그럼 에러납니다. (저와 같은 템플릿 프로젝트로 하신분만)

에러 로그 보시면 sampleService 이놈과 sqlMapClient이 보이실겁니다.

src/main/java/egovframework/example/sample 에서 sample부분만 모두 삭제해 주세요

그리고 src/main/java/egovframework/standalone/SampleMain.java 를 열어주시구요.

메인 부분을 지워주세요. 이쪽에서 sampleService 이름의 빈을 불러오는데 그건 더이상 없습니다 우리에게는.

방금 삭제했으니까요 :)

그리고 다시 실행해보시면 에러가 없이 깨끗하게 진행됨을 볼 수 있습니다.

방금 에러 나신 분들은 곰곰히 잘 생각해 보세요. 왜 에러가 났을까 라는..

이해하시면 마이바티스 설정은 이제 매우 쉽게 다가오실겁니다.

저도 처음 설정해보면서 여러가지 문제가 꽤나 많았습니다.

에러 나면 꽤나 길게 나오는데 포기마시고, 끝까지 천천히 꼭 읽어보시길 권장합니다. 그 안에 해답이 있습니다.

뭐든 안그렇겠냐만은 그냥 끈기있게 천천히 해보면 답은 무조껀 나오나봅니다.

이 포스트의 내용처럼 꼭 따라하셔야 하는건 아닙니다.

다른 방법도 있지만 제가 사용하는 방식을 설명드린 부분이구요, 설명에서 틀린점이 있다면 꼭 말씀해주세요.

따라하시느라 고생 많으셨습니다.

감사합니다.



Comments