๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back-End/SPRING

SPRING] ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ์„ค์ • ํ•˜๊ธฐ

by bamDal 2022. 5. 23.

 

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ์„ค์ • ๋ฐฉ๋ฒ•

ํ”„๋กœ์ ํŠธ ์„ค์ •ํ•˜๋Š” ๊ณผ์ •์ด ์ƒ์†Œํ•˜๊ณ  ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์„ธํžˆ ๊ธฐ๋กํ•ด๋‘๊ณ  ์—ฐ์Šต์„ ๋งŽ์ด ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

1. Spring Legacy Project ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

Package Explorer ์—์„œ ์šฐํด๋ฆญ > new > Spring Legacy Project

 

Spring MVC Project ์„ ํƒ > Project name ์ ๊ธฐ

 

top-level package ์ด๋ฆ„ ์„ค์ •. - com.spring.main ๊ณผ ๊ฐ™์€ ํ˜•์‹ (com.mvc.test ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Œ)

 

2. ์ž๋ฐ” ๋ฒ„์ „ ๋ณ€๊ฒฝ (Project Facets๊ณผ pom.xml์—์„œ)

1) Project Facets

ํ”„๋กœ์ ํŠธ ์šฐํด๋ฆญ > properties > project facets

Java ๋ฒ„์ „์ด 1.6 ์œผ๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ ๋ณธ์ธ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ. ๋‚˜๋Š” 1.8

 

2) pom.xml

11,12 ๋ฒˆ์งธ ์ค„ (java 1.8๊ณผ springframework 4.3.14.RELEASE)
139 - 142 ๋ฒˆ์งธ ์ค„. ๋ณธ์ธ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „ (java 1.8)

 

3. web.xml ์—์„œ ํ•œ๊ธ€ ๊นจ์ง ๋ฐฉ์ง€ ์„ค์ •

ํŒŒ์ผ์— ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด ๋„ฃ์„ ๋•Œ๋Š” ์œ„์•„๋ž˜๋กœ ์ถฉ๋ถ„ํžˆ ์นธ์„ ๋„์–ด๋‘์–ด์„œ ๋‚˜์ค‘์— ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ํ•˜์ž

์ฝ”๋“œ๋Š” ๋งค๋ฒˆ ๋ณต๋ถ™ํ•˜๋ฉด ๋œ๋‹ค. ์™ธ์šฐ๊ธฐ๋ณด๋‹จ ์–ด๋–ค ์ฝ”๋“œ์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ.

> ์ฝ”๋“œ ๋ณต๋ถ™ ๋”๋ณด๊ธฐ

๋”๋ณด๊ธฐ

ํ•œ๊ธ€ ๊นจ์ง ๋ฐฉ์ง€ ์ฝ”๋“œ๋ฅผ web.xml์— ์‚ฝ์ž…

	<!-- ํ•œ๊ธ€ ๊นจ์ง ๋ฐฉ์ง€ ์„ค์ • -->
	<!-- ์„œ๋ฒ„๊ฐ€ ์ผœ์ง€๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์ฝ๊ฒŒ๋˜๋Š” ํŒŒ์ผ -->
	<!-- ํ•œ๊ธ€๊นจ์ง : ํŠน์ •ํ•œ ์š”์ฒญ์ด ์˜ค๋ฉด ํŠน์ • ํด๋ž˜์Šค๋กœ ์—ฐ๊ฒฐํ•ด์„œ ํ•œ๊ธ€ ๊นจ์ง์„ ๋ฐฉ์ง€ -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<!-- ์ธ์ฝ”๋”ฉ ์ข…๋ฅ˜ -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<!-- ๊ฐ•์ œ ์ธ์ฝ”๋”ฉ ์—ฌ๋ถ€ -->
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	
	<!-- ์–ด๋–ค ์š”์ฒญ์ด ์™”์„ ๋•Œ ์–ด๋–ค ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€? -->
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

4. server path ๋ณ€๊ฒฝ

server path๋Š” ์›นํŽ˜์ด์ง€ ์ฃผ์†Œ์ฐฝ์— ๋œจ๋Š” ์ฃผ์†Œ์ธ๋ฐ ๊ทธ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„ ๋”๋ธ”ํด๋ฆญ
overview๋กœ ๋œฌ๋‹ค๋ฉด modules๋กœ ๋ฐ”๊พผ๋‹ค์Œ ๋ณด์ž

Path ๋ถ€๋ถ„์ด /main์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.

path ์„ค์ •์ด /main ์ผ ๋•Œ

Path ๋ถ€๋ถ„์„ / ๋ผ๊ณ ๋งŒ ํ•ด๋‘˜ ๊ฒƒ์ด๋‹ค.

์˜ค๋ฅธ์ชฝ์— Edit ์„ ๋ˆŒ๋Ÿฌ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

์ด๋Ÿฐ ์„ค์ • ํŒŒ์ผ๋“ค(web.xml, pom.xml, server ๋“ฑ)์„ ์ˆ˜์ •ํ•œ ๋’ค์—๋Š” ์„œ๋ฒ„๋ฅผ ๊ป๋‹ค ์ผœ์ค˜์•ผ
์ˆ˜์ •ํ•œ ๋ถ€๋ถ„์ด ๋ฐ˜์˜๋œ๋‹ค. 
์„œ๋ฒ„๋ฅผ ๋ˆ ๋’ค์— ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค...

์ˆ˜์ • ํ›„ ์ฃผ์†Œ์ฐฝ

 

5.  pom.xml ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด pom.xml์— ์„ค์ •ํ•ด๋‘๊ณ 

maven ์ด ์•Œ์•„์„œ pom.xml์„ ์ฝ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋‹ค์šด๋ฐ›์•„์ค€๋‹ค..

 

์ถ”๊ฐ€ํ•ด ์ค„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” DB๊ด€๋ จ 5๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

1) ojdbc : DB ์ ‘์†์„ ๋„์™€์ค€๋‹ค.

์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ์›น์ฃผ์†Œ๋Š” ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถœ์ฒ˜! ํ˜น์‹œ ํ•„์š”ํ• ์ง€ ๋ชจ๋ฅด๋‹ˆ ์ฃผ์„์ฒ˜๋ฆฌํ•˜์—ฌ ์ ์–ด๋‘”๋‹ค๊ณ ..

<!-- ojdbc : DB ์ ‘์† -->
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.7.2</version>
</dependency>

 

2) dbcp : ์ปค๋„ฅ์…˜(DB์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค) ํ’€ ์‚ฌ์šฉ

์Šค๋ ˆ๋“œ ํ’€ ์ฒ˜๋Ÿผ 26๋ช…์—๊ฒŒ ๊ฐ์ž ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฃผ๊ธฐ๋ณด๋‹จ 15๊ฐœ ์ •๋„ ํ‚ค๋ฅผ ๋นŒ๋ ค์ฃผ๊ณ  ๋‹ค์“ฐ๋ฉด ๋ฐ˜๋‚ฉํ•˜๊ณ  ๋ฐ˜๋‚ฉ๋œ ํ‚ค๋ฅผ ๋นŒ๋ ค์ฃผ๊ณ  ํ•˜๋Š” ๋ฐฉ์‹์ด ์ปค๋„ฅ์…˜ ์ด๋ผ๊ณ  ํ•œ๋‹ค..

<!-- dbcp : ์ปค๋„ฅ์…˜(DB์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค) ํ’€ ์‚ฌ์šฉ -->
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

 

3)  spring-jdbc : DB์™€ SPRING์„ ์—ฐ๊ฒฐ ํ•ด์ค€๋‹ค.

<!-- spring-jdbc : DB ์—ฐ๊ฒฐ๊ณผ SPRING์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค. -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

 

4) mybatis : XML ์ฟผ๋ฆฌ๋ฌธ์„ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

<!-- mybatis : XML ์ฟผ๋ฆฌ๋ฌธ์„ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ -->	
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

 

5) mybatis-spring : ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค์™€ ์Šคํ”„๋ง์„ ์—ฐ๊ฒฐ

<!-- spring-mybatis : ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค์™€ ์Šคํ”„๋ง์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค. -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.2</version>
</dependency>

 

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์ถ”๊ฐ€๋ฅผ <!-- AspectJ --> ์œ„์— ํ•ด์ค€๋‹ค. ์œ„์น˜๋Š”,, ์ƒ๊ด€์žˆ๋‚˜? ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ
์ผ๋‹จ ํŠน์ • ์œ„์น˜๋ฅผ ์ •ํ•ด๋‘๋Š” ๊ฒŒ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. ๋ณด๊ธฐ ํŽธํ•˜๋‹ˆ๊นŒ

 

6. servlet-context.xml ์ถ”๊ฐ€ ์„ค์ •

src > main > webapp > WEB-INF > spring > appServlet > servlet-context.xml

servlet-context.xml ์—์„œ๋Š” DB์™€ ๊ด€๋ จ๋œ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์œ„์น˜๋Š” <context:component-scan ...> ๋ฐ‘์œผ๋กœ ํ†ต์ผ.

1 ) DB ์ ‘์† ์ •๋ณด์˜ DB ์œ ์ € ๋„ค์ž„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ
2) ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ์‚ฌ์šฉ ์„ค์ •์— mapperLocation ์œ„์น˜ ์„ค์ • ํ™•์ธ
3) ๊ฐ„ํŽธ ์‚ฌ์šฉ ์„ค์ •์— base-package ์œ„์น˜ ์„ค์ • ํ™•์ธ

์ฝ”๋“œ ๋ณต๋ถ™ํ•˜๋‹ค๋ณด๋ฉด ์œ„์น˜ ์„ค์ • ๋ณ€๊ฒฝ์„ ๊นœ๋นกํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฏ€๋กœ ๊ผญ ๊ผญ ํ™•์ธํ•ด์ฃผ๊ธฐ!

<!-- ์ ‘์† ์ •๋ณด -->
<beans:bean name="datasource" class="org.apache.commons.dbcp.BasicDataSource">
    <beans:property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
    <beans:property name="url" value="jdbc:mariadb://localhost:3306/mydb"/>
    <beans:property name="username" value="web_user"/>
    <beans:property name="password" value="pass"/>
</beans:bean>

<!-- ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ์‚ฌ์šฉ ์„ค์ • -->
<!-- name = ํ•„์ˆ˜์š”์†Œ(์ด๋ฆ„์ด ์ •ํ•ด์ ธ ์žˆ์Œ) / id = ์„ ํƒ์š”์†Œ(์ด๋ฆ„์ด ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์Œ) -->
<!-- ์–ด๋–ค DB๋ฅผ ์“ธ๊ฑด์ง€ ์ •๋ณด ์ œ๊ณต -->
<!-- ์ฟผ๋ฆฌ๋ฌธ(xml)์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์ง€์ • -->
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <beans:property name="dataSource" ref="datasource"/>
    <beans:property name="mapperLocations" value="classpath:com/test/main/dao/*.xml"/>
</beans:bean>

<!-- ๊ฐ„ํŽธ ์‚ฌ์šฉ ์„ค์ •(๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๋ฒ”์œ„) -->
<mybatis-spring:scan base-package="com.test.main.dao"/>

 

์„ค์ •์ฝ”๋“œ๋ฅผ ๋„ฃ๊ณ  ๋‚˜๋ฉด ๊ฐ„ํŽธ ์‚ฌ์šฉ ์„ค์ • ์ฝ”๋“œ๊ฐ€ ๋นจ๊ฐ›๊ฒŒ ๋œ๋‹ค.

๋นจ๊ฐ„ ์ค„ ๋œจ๋Š”๋ฐ.. ์บก์ณ ์™ผ์ชฝ ํ•˜๋‹จ์— Namespaces ๋ˆ„๋ฅด๊ณ  ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ์ฒดํฌ๋ฐ•์Šค ์ฒดํฌํ•ด์ฃผ๊ธฐ..

Namespaces ๋ˆ„๋ฅด๊ณ  mybatis-spring ์ฒดํฌ๋ฐ•์Šค ์ฒดํฌ ํ•ด์ฃผ๊ธฐ

mybatis-spring ์ฒดํฌ๋ฐ•์Šค์— ์ฒดํฌํ•ด์ฃผ๊ณ  ์ €์žฅํ•ด์ฃผ๋ฉด ์—๋Ÿฌ ์—†์–ด์ง.

 

7. ํŒจํ‚ค์ง€ ์ƒ์„ฑ, ํ•„์š”ํ•œ ํŒŒ์ผ ์ƒ์„ฑ

ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

ํŒจํ‚ค์ง€๋Š” ์ƒ์„ฑ ํ•œ ๋’ค์— ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ง€์šฐ๊ฑฐ๋‚˜,,  ๊ฑด๋“ค์ง€ ๋งˆ,, ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋ณต์žกํ•ด์ง€๋‹ˆ๊นŒ ,,

ํด๋ž˜์Šค๋ช…์€ ๋ณ€๊ฒฝํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.

- mapper.xml ํ•„์š” ์ฝ”๋“œ

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.mvc.member.dao.MemberDAO">
	<!-- ๋‚ด์šฉ -->
</mapper>

* mapper namespace ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฑธ ์ข…์ข… ๊นŒ๋จน๋Š”๋ฐ,, ์ฃผ์˜ํ•  ๊ฒƒ!

 

 

์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด์ฃผ๋ฉด ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ์„ค์ •์ด ๋๋‚œ๋‹ค.