Spring ํ๋ ์์ํฌ์์์ MyBatis, Maven
Spring ํ๋ ์์ํฌ ํ๊ฒฝ์์ MyBatis๋ฅผ ์ฐ๋ํ๊ณ ์ ํ ๋๋ Maven ์ ์ฅ์๋ฅผ ํตํด ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์์ฝ๊ฒ ํ ์ ์๋ค. Maven ์ ์ฅ์๋ ๋น๋ ํด๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ๊ด๋ฆฌ ํด๋ก ํ์ฉ์ด ๋ ๋ง์ด ๋๊ณ ์๋ค. ์คํ๋ง ํ๋ ์์ํฌ ์ฌ์ฉ ์ด์ ์๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ผ์ผ์ด ๋ฐ์ /WEB-INF/lib ํด๋์ WAS์ ์ค์นํด ์ฌ์ฉํ๋ค. ํ์ง๋ง, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฒ์ ์ด ๋ฌ๋ผ์ ธ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋ฐ์ํ ์ํ์ด ์์ด ๋ฉ์ด๋ธ์ ํตํด ๋ณด๋ค ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์ ํ๋ค.
๐ MyBatis๋ Java Persistance Framework(ํํ SQL ๋งคํ ํ๋ ์์ํฌ๋ก ๋ถ๋ฅํ๋ค)์ ํ๋๋ก, XML ์์ ์๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด ์ ์ฅ ํ๋ก์์ ๋ SQL๋ฌธ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐ์์ผ์ค๋ค. ๊ธฐ์กด SQL์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ๊ณผ ์ง์ ์ฅ๋ฒฝ์ด ๋ฎ์ JDBC์ ๋์์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ค. ์ฃผ์ ์ฅ์ ์ค ํ๋๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์์ ์ฐ๋์ ๋์์ฃผ๋ ์ถ๊ฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง๋ค๋ ๊ฒ.
Spring Framework ์์์์ MyBatis ์ฐ๋๊ณผ ๊ด๋ จ๋ ์์ ์์ ์ดํด๋ณผ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
๐ Maven์ ์ํ์น์ ์คํธ์ ๋์์ผ๋ก ๋์จ ์๋ฐ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ
๋ฉ์ด๋ธ์ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ก์ ํธ ๋ด์ ๊ธฐ์กด์ฒ๋ผ ์ค์น๋๋ ๋ฐฉ์์ด ์๋๋ผ ์ค์ ํ์ผ์ธ pom.xml ๋ด๋ถ์ ์์นํ๊ฒ ๋๋ค. POM(Project Object Model)์ ํตํด ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด ์กด์ฌํ๋ ์ ์ฅ์ ์๋ฒ์ ์์น์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฌด์์ธ์ง ์ง์ ํด์ค๋ค.
Maven ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๋ pom.xml์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ค. (<dependencies> ํ๊ทธ๋ค๋ก ๊ด๋ฆฌ๋๋ค)
(์ด๋, ojdbc6.jar ํ์ผ์ tomcat์ด ์ ์ฅ๋ ๊ฒฝ๋ก์ lib ํด๋ ๋ด์ ๋ฏธ๋ฆฌ ์ค์นํด๋์๋ค๋ ์ ์ ํ์ ์งํํ๋ค.) ๋ฌผ๋ก Maven์ ํตํด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ์ ์ ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก
MyBatis์ mybatis-spring๊ณผ์ ์ฐ๋์ ์ํด ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก์ ์๋์ ๊ฐ๋ค.
- Spring-jdbc
- Spring-tx(transaction)
๐ ์ ๋ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์คํ๋ง์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ๋ฆฌ์ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค. (ํด๋น ๋ผ์ด๋ธ๋ฆฌ๋ค์ MyBatis์ ๋ฌด๊ดํด๋ณด์ด๋, ์ถ๊ฐํ์ง ์์ ๊ฒฝ์ฐ์ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.)
- commons-loggin
Apache ์ฌ๋จ์ Connection Pool ๊ธฐ๋ฅ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- commons-dbcp
- commons-pool
MyBatis์ ์คํ๋ง ์ฐ๋์ ์ํ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- mybatis
- mybatis-spring
MVNRepository
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ๊ณ ์ ํ๋ ํ๋ก์ ํธ์ pom.xml์ ์ด๊ณ , ์๋ ๊ทธ๋ฆผ ๊ฐ์ด </dependencies> ํ๊ทธ๊ฐ ๋๋๊ธฐ ์ ์ ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ถ๋ฌ์์ค ๊ฒ์ด๋ค.
1. Spring-jdbc
Spring-jdbc ๊ฒ์ -> ์ ์ผ ์ฒซ ๋ฒ์งธ ๊ฒ์ ๊ฒฐ๊ณผ์ธ Spring JDBC ํด๋ฆญ
์ผ๋จ์ ํ์ฌ ์คํ๋ง ํ๋ ์์ํฌ์ ๋ฒ์ ๊ณผ ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ฌ์ด์์ ๊ณ ๋ฏผํ์ง๋ง๊ณ , ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ ๋ฌด์ํ๋ค. ๋ชฉ๋ก ์ค ๊ฐ์ฅ ์ต์๋จ์ Spring JDBC๋ฅผ ์ ํํ๊ณ ๋ค์ด๊ฐ๋ฉด, ํด๋ฆฝ๋ณด๋์ Maven ํญ ์๋์ ์์ค ์ฝ๋๋ฅผ ๋ณต์ฌํ๋ค. ์ด๋ ์ฃผ์์ด ๋ถํ์ํ๋ค๋ฉด ์ฒดํฌ๋ฐ์ค๋ฅผ ํด์ ํด ์์ ๊ณ ๋ณต์ฌํด์จ๋ค. (๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ ๋์ค์ ๋ณ์๋ก ๋์ฒดํ ๊ฒ์ด๋ฏ๋ก ์ผ๋จ์ ๋ณต์ฌํด์ค๋ ๋จ๊ณ์์ ๋ฒ์ ์ฒดํฌ๋ฅผ ํ์ง ์๋๋ค.)
๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ๊ธฐ ์ ์ pom.xml ํ์ผ ๋ด์์ ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋๋ ํ๊ทธ๋ค์ ๊ธฐ๋ฅ์ ๋ํด์ ์ง๊ณ ๋์ด๊ฐ๋ณด์. ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด ๋ฐฉ์๋ง์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์๋ POM ํ์ผ์ ๊ตฌ์กฐ ๋ชฉ์ฐจ๋ ๋์ด๊ฐ๋ ๋๋ค.
POM(Project Object Model) ํ์ผ์ ๊ตฌ์กฐ
์๋๋ pom.xml ์ฝ๋์ ์ผ๋ถ
<modelVersion>4.0.0</modelVersion>
<groupId>com.project</groupId>
<artifactId>ex</artifactId>
<name>MyProject</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
..
</dependencies>
<build>
..
..
</build>
- <groupId> : ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ถํ ๋ชฉ์ ์ผ๋ก ์ด๋ค. ๋๋ฉ์ธ ๋ช ์ด ๋ค์ด๊ฐ๋ค.
- <artifactId> : ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ถํ ๋ชฉ์ ์ผ๋ก ์ด๋ค. ํ๋ก์ ํธ ๋ช
์ด ๋ค์ด๊ฐ๋ค.
- ์ฒ์ ํ๋ก์ ํธ ์์ฑํ ๋ com.project.ex๋ก ์ ํด์ฃผ์๋ค๋ฉด, ํด๋์์๋ ์๋์ฒ๋ผ ๋์ฌ ๊ฒ์ด๋ค.
- <properties> : POM ๋ด์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ ์ค์ ํ ์ ์๋ค. ๋๋ฌธ์ ์ด POM ํ์ผ ๋ด์์ ${org.springframework-version}์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
- <repositories> : ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ์์ฌ ์ ์ฅ์๋ฅผ ์ง์ ํ ์ ์๋ค. (optional)
- ํ์ฌ ์ ์ฝ๋ ์์ค์๋ ์๋ ํ๊ทธ์ด์ง๋ง, ๋ง์ผ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ง์ ์ ์ฅ์๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๋ฉด, ์ฌ์ฉํ๋ ํ๊ทธ. pom.xml ์๋ ํญ์์ Dependencies, Effective POM.. ๊ฐ์ ํญ๋ค์ ๋ณผ ์ ์๋๋ฐ, Effective POM์์ ๊ธฐ๋ณธ์ ์ผ๋ก Maven์ด ์ ๊ณตํ๋ pom.xml ์ค์ ๊ณผ ์ฌ์ฉ์๊ฐ ์๋ก์ด ์ง์ ํ ์ค์ ์ ํ๊ตฐ๋ฐ์์ ํฉํ ๋ชจ์ต์ผ๋ก ํ์ธํ ์ ์๋ค.
- <dependencies> : ํ๋ก์ ํธ์์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ํ๋ค.
- <build> : ํ๋ก์ ํธ ๋น๋ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ค.
- <scope> : optional. ์๋ ์ฝ๋์ฒ๋ผ test ๋๋ง ํ์ํ๊ณ , ๋ฐฐํฌ ๋๋ ๋ถํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ, <scope> ํ๊ทธ๋ก ์ง์ ํด์ค ์ ์๋ค. ๊ทธ ์ธ ๋ค๋ฅธ scope๋ ์๋์ ๊ฐ๋ค.
- compile : default. ์ปดํ์ผ ๋ฐ ๋ฐฐํฌ ์ ๊ฐ์ด ์ ๊ณต๋๋ค.
- provided : WAS์์ ์ ๊ณต๋๋ค. ์ปดํ์ผ ์์๋ ํ์ํ์ง๋ง, ๋ฐฐํฌ ์์๋ ๋น ์ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ผ ๊ฒฝ์ฐ.
- runtime : ์ปดํ์ผ ์์๋ ๋ถํ์ํ์ง๋ง, ์คํ ์์๋ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- test : ํ ์คํธ๋๋ง ์ฌ์ฉ
- system : ์ ์ฅ์์์ ๊ด๋ฆฌํ์ง ์๊ณ ์ง์ ๊ด๋ฆฌํ๋ jar ํ์ผ์ ์ง์
- import : ๋ค๋ฅธ pom ์ค์ ํ์ผ์์ ์ ์๋ ์์กด ๊ด๊ณ๋ฅผ ์ด ํ๋ก์ ํธ๋ก ๊ฐ์ง๊ณ ์ฌ ๋ ์ฌ์ฉ.
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
2. Spring-tx(transaction)
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
3. commons-loggin
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
4. commons-dbcp
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
5. commons-pool
<!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
6. mybatis & mybatis-spring
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
์ด์ ํ์ํ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๋ถ ๋ฐ์์ก๋ค. ์ ์ฅ์ ์ ํ ๋ค, ์๋์ Dependencies ํญ์ ๋๋ฌ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํด๋ณผ ๋จ๊ณ์ธ๋ฐ, ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด ๊ณผ์ ์์ ์๋์ฒ๋ผ Missing artifact org.springframework:spring-jdbc:jar${ org.springframework-vers ..๊ฐ์ ์ค๋ฅ ๋ฉ์ธ์ง๊ฐ ๋ฌ๋ค.
EL ํ๊ธฐ์์ ๋ธ๋ ์ด์ค ์ฌ์ด์ ์คํ์ด์ค๊ฐ ๋ง๋ ์ค๋ฅ์์ผ๋, ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด ${org.springframework-version}์ฒ๋ผ ์คํ์ด์ค ์์ด ์ ๋๋ก ๋ถ์ฌ์ฃผ์.