-
Intellij ์์ Spring MVC + Gradle ํ๋ก์ ํธ ์์ฑPROGRAMMING/Spring 2022. 10. 26. 16:11
Spring Boot ๋ง ์ฌ์ฉํ๋ค, Spring MVC ๊ตฌ์กฐ๋ฅผ ๋ ํ์ ํ๊ณ ์ Spring MVC ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ ๊ฐ๋ฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Spring Boot ๋ Spring MVC ๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ์ค์ ๋ค์ ์๋์ผ๋ก ๊ตฌ์ฑํด์ฃผ์ด ๊ฐ๋ฐ์๋ค์ ํธ์๋ฅผ ๋์ฌ์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค. ์ฒ์์ Spring ์ด๋ผ๋ ํ๋ ์์ํฌ๋ฅผ ์ ํ๊ธฐ์ ์ข์ง๋ง, ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ธฐ ์ํด์๋ ์ง์ Spring MVC ๋ฅผ ๊ตฌ์ฑํด๋ณด๋ ๊ฒ์ด ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ
- Windows 10
- java 12
- tomcat 9
- IDE: intellij IDEA ultimate
ํ๋ก์ ํธ ์์ฑ๋ถํฐ Spring MVC ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ ํ,
๊ฐ๋จํ Controller ๋ฅผ ์์ฑํด ์นํ์ด์ง๋ฅผ ๋์๋ณด๋ ๊ฒ๊น์ง ์งํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1) Gradle - Java ํ๋ก์ ํธ ์์ฑ
Intellij ๋ฅผ ์ด๊ณ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
Gradle - Java ์ Web ์ ์ ํ ํ, ์ํ๋ JDK ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
์ด๊ธฐ ์์ฑ ์, ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
2) Spring MVC ์ถ๊ฐ
๋จผ์ ํ๋ก์ ํธ ์ด๋ฆ-์ฐํด๋ฆญ ์ ๋์ค๋ Add Framework Support ๋ฅผ ๋๋ฌ์ Spring MVC ๋ฅผ ์ถ๊ฐํด์ค๋๋ค.
spring mvc ๋ฅผ ๊ฒ์ํ๋ฉด ๋์ค๋ฉด ํด๋น framework ๊ฐ ๋์ต๋๋ค.
Spring, Spring MVC ๋ฅผ ์ ํํ ์ํ์์ OK ๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ gradle ์๋ spring-context, spring-webmvc, spring-test ๋ฅผ ์ถ๊ฐํด์ค๋๋ค.
(์์์ ์ถ๊ฐํ ๋ฒ์ ๊ณผ ๋์ผํ๊ฒ)
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด applicationContext.xml, dispatcher-servlet.xml, web.xml ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
Intellij ๊ธฐ์ค์ผ๋ก,
- applicationContext.xml: Bean ์ค์
- dispatcher-servlet.xml: ๋ด๋ถ ์น ๊ด๋ จ ์ฒ๋ฆฌ ์ค์
- web.xml: Tomcat ๊ตฌ๋ ๊ด๋ จ ์ค์
์ ๋๋ค.
3) ํด๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ
ํ์ฌ ํด๋ ๊ตฌ์กฐ๋ src/main/java ์ web/WEB-INF ๊ฐ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค.
Intellij ๊ฐ Gradle ๋น๋ ๊ธฐ์ค์ด ์๋, ๊ธฐ๋ณธ Java ๋น๋ ๊ธฐ์ค์ผ๋ก ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง๋ง, Gradle ๋ฅผ ๋น๋ ํด๋ก ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ์ด๋ฐ ํด๋ ๊ตฌ์กฐ๋ก๋ ์ค์ ํ์ผ๊ณผ ํจ๊ป ์ ์์ ์ผ๋ก ๋น๋ํ ์ ์์ต๋๋ค.
(์ฌ๊ธฐ์์ ๊ณ์ ์ค๋ฅ๊ฐ ๋ด์๋๋ฐ, ํด๋ ๊ตฌ์กฐ์ ์ค์ ํ์ผ์ ์ ์์น์์ผ์ฃผ์ด์ผ ํฉ๋๋ค!)
๋ฐ๋ผ์, webapp (์ด๊ธฐ ํ๋ก์ ํธ ์์ฑ ์ web ์ ์ ํํ ๊ฒฝ์ฐ์ ์๊ธฐ๋) ํด๋์ WEB-INF ๋ฅผ ํต์งธ๋ก ์ฎ๊ฒจ์ค๋๋ค.
๊ทธ ํ ์ค์ ํ์ผ๋ค์ context ๋ก ๋ฑ๋กํด์ฃผ๋ฉด ๋ฉ๋๋ค.
4) ํ๋ก์ ํธ ์ค์ (Artifacts, Facets)
์ด์ File->Project Structure ๋ก ๋ค์ด๊ฐ๋๋ค.
Artifacts ์ ๋ค์ด๊ฐ๋ฉด, ์ฐ์ธก์ ๊ฐ๋ฅํ ์์๋ค์ด ์์นํด ์์ต๋๋ค.
๊ทธ ์ค์์ Spring-5.2.3.RELEASE ๋ฅผ ๋ ๋ฒ ๋๋ฌ์ ์ถ๊ฐํด์ค๋๋ค.
(gradle ๋น๋ ์ ์๋ Spring-MVC-5.2.3.RELEASE ๋ ๋ณ๋๋ฐ ๋น๋ ํ ์์ด์ก์ต๋๋ค)
๊ทธ๋ฆฌ๊ณ Facets ๋ฅผ ์ค์ ํด์ค๋๋ค.
์ค์ ํ์ผ์ ํ๋ก์ ํธ์์ ์ธ์ํ ์ ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ๋๋ค.
Web Gradle: spring-mvc~ ๋ฅผ ๋๋ฌ์ Deployment Descriptors ์ web.xml ์ ์ถ๊ฐํด์ค ๊ฒ์ ๋๋ค.
webapp/WEB-INF/web.xml ์ ๋ฑ๋กํด์, Tomcat ๊ตฌ๋ ๊ด๋ จ ์ค์ ์ ํ๋ก์ ํธ์์ ์ธ์ํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ web.xml ์ ๊ฒฝ๋ก๋ฅผ ์ ๋ณด๊ณ ๋ฑ๋กํด์ฃผ์ด์ผ ํฉ๋๋ค. (์๋ง ์๋์ผ๋ก ๊ฒฝ๋ก๊ฐ ์ ์ง์ ๋์์ ๊ฒ์ ๋๋ค.)
์๋์ ๊ฐ์ด ๋์ค๋ฉด ์ ๋ ๊ฒ์ ๋๋ค! (autodetected!)
์ด๋ ๊ฒ ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๊ณ web.xml ์ ๋ฑ๋กํด์ฃผ๋ฉด,
๊ธฐ์กด์ ์๋์ ๊ฐ์ด ์ค๋ฅ๊ฐ ๋๋ web.xml ์์ springframework ๋ฅผ ์ ์ธ์ํด์ ๋นจ๊ฐ์ค์ด ์์ด์ง๋๋ค!
(์๋ฌด๋ฆฌ ํด๋ ์ spring framework ๋ฅผ ์ธ์ํ์ง ๋ชปํด์ web.xml ์์ฒด๋ฅผ ์ธ์ํ์ง ๋ชปํ ๊ฒ ์๋๊ฐ ํ๊ณ ์ฐพ์๋ณด๋ intellij ๊ฐ ๊ตฌ์ฑํด์ฃผ๋ ํด๋ ๊ตฌ์กฐ์ ํ๋ก์ ํธ์ ๊ตฌ์ฑ์ ๋ถ์ผ์น ๋๋ฌธ์ด์์ต๋๋ค ใ ใ )
(facets ๊ด๋ จ ์ฐธ๊ณ : https://www.jetbrains.com/help/idea/adding-support-for-frameworks-and-technologies.html)
5) ์ค์ ํ์ผ(.xml) ์์
์ด์ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ํ์ํ ๋ชจ๋๋ค์ ๋ค ๋ฑ๋กํ์ผ๋ฏ๋ก, Spring ์ค์ ์ ํด์ค๋๋ค.
ํ์์ ์ด์ง ์๊ณ ํ๋ก์ ํธ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒ์ด '์ค์ ํ์ผ'์ด๋ฏ๋ก, ์์ ์๊ฒ ๋ง๋ ์ต์ ์ ์ ํํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ผ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ํ๋ ์ค์ ์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
web.xml ์ ๊ฒฝ์ฐ Intellij ultimate ์ด๋ฉด ์๋์ผ๋ก ์์ฑํด์ค๋๋ค.
๋ค๋ง, ํ ๊ฐ์ง ๋ถ๋ถ์ ์์ ํฉ๋๋ค.
- ๋งจ ์๋ servlet-mapping ์ url-pattern ์ / ๋ก ๋ฐ๊ฟ์ค๋๋ค. (URL์ / ๊ธฐ๋ฐ์ผ๋ก ์ธ์ํ ๊ฒ์ด๋ฏ๋ก)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
applicationContext.xml ์ ์์ง ์์ ํ ์ฌํญ์ด ์์ด์ ์๋ตํฉ๋๋ค.
dispatcherServlet.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- Annotation ํ์ฑํ --> <mvc:annotation-driven/> <!-- Component ํจํค์ง ์ง์ --> <context:component-scan base-package="com.simple"/> <!-- view object ์ด๋ฆ ๊ฒฐ์ --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <!-- view file ๊ฒฝ๋ก --> <property name="suffix" value=".jsp"/> </bean> </beans>
- <mvc:annotation-driven/>: annotation ํ์ฑํ
- <context:component-scan base-package="com.simple.web.controller"/>: component-scan ์ ๊ธฐ๋ณธ package ์ง์ .
(์ ์ ๊ฒฝ์ฐ com.simple ๋ผ๋ ํจํค์ง๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ Controller ๋ฅผ ์์น์ํฌ ๊ฒ์ด๋ฏ๋ก ์์ ๊ฐ์ด ์์ฑํ์ต๋๋ค.) - <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">: view resolver ๋ก view ํ์ผ์ ๋ํ ์ค์ ์ ํฉ๋๋ค.
- <property name="prefix" value="/WEB-INF/views/"/>: view ํ์ผ์ ์ ๋์ฌ ์ค์
- <property name="suffix" value=".jsp"/>: view ํ์ผ์ ์ ๋ฏธ์ฌ ์ค์
- ex) view ํ์ผ ์ด๋ฆ์ด home ์ด๋ผ๋ฉด, "home" ๋ง ๋ฐํํด๋ view resolver ๋ฅผ ํตํด "/WEB-INF/views/home.jsp" ๋ก ๋ฐํํด์ฃผ๋ ๊ฒ์ ๋๋ค.
6) Controller ์์ฑ
์ด์ ํ๋ก์ ํธ ์ค์ ์ด ๊ฑฐ์ ๋ง๋ฌด๋ฆฌ๋์์ต๋๋ค.
๋จ์ ๊ฒ์ Tomcat ์ ์คํํด๋ณด๋ ๊ฒ์ธ๋ฐ, ์ด๋ฅผ ์ํด ๊ฐ๋จํ Controller ๋ฅผ ์์ฑํด์ ์์ฒญ์ ์ ์ฒ๋ฆฌํ๋์ง ํ์ธํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋จผ์ , com.simple.web.controller ๋ผ๋ ํจํค์ง ์๋์ SimpleController.java ๋ผ๋ ํ์ผ์ ์์ฑํด์ฃผ์์ต๋๋ค.
(๊ฒฝ๋ก/ํ์ผ ์ด๋ฆ์ ์์ ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ dispatcherServlet.xml ์ ๋ฐ์ํด์ฃผ์ด์ผ ํฉ๋๋ค.)
์ด Controller ๋ ๋ค์์ ํ๋์ ์์ฒญ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
- "/" ์์ฒญ์ด ๋ค์ด์ค๋ฉด "hello" ๋ผ๋ View ๋ฅผ ๋ฆฌํด
์ด๋ ์์ ์ค์ ํ ๊ฒ์ฒ๋ผ view resolver ์ ์ํด "/WEB-INF/views/home.jsp" ํ์ผ์ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.
dispatcherServlet.xml ์ ๋ฑ๋กํ view resolver ์ ์ ๋์ฌ์ ๋ง๊ฒ,
WEB-INF/views ํด๋ ์์ hello.jsp ๋ผ๋ ํ์ผ์ ์์ฑํด์, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด์ฃผ์์ต๋๋ค.
ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ WEB-INF/index.jsp ํ์ผ์ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ ์ญ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
(์ด๊ฑธ ์ญ์ ํ์ง ์์ผ๋ฉด index.jsp ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐํ)
7) Tomcat ๋ฑ๋ก ๋ฐ ์ฐ๋
Tomcat ์ ๋์ ์์ฒญ์ ์ฒ๋ฆฌํด์ฃผ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๋๋ค.
์ด์ Tomcat ์ ๋ฑ๋กํด์ฃผ๊ณ ์ฐ๋ํด์ ์๋ฒ๋ฅผ ์คํ์ํฌ ๊ฒ์ ๋๋ค.
(Tomcat ์ด ๋ค์ด๋ฐ์์ ธ ์์ด์ผ ํฉ๋๋ค. Apache-Tomcat-์์ ์ OS ์ ๋ง๋ ํ์ผ ๋ค์ด (์ ๋ zip ํ์ผ์ ๋ค์ด๋ฐ์์ ์์ถ์ ํ์ด ์ฌ์ฉํ๊ณ ์์ต๋๋ค.))
IDE ์ฐ์ธก ์๋จ์ ๋ณด๋ฉด Add Configuration ์ด ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด Run/Debug Configurations ๊ฐ ๋น๋๋ค.
+ ๋ฒํผ์ ๋๋ฌ์ Tomcat Server ๋ฅผ ์ถ๊ฐํด์ค๋๋ค.
์ด๋ ์ฒ์ Tomcat ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฉด, Tomcat ์คํ ํ์ผ์ด ์๋ ๊ฒฝ๋ก๋ฅผ ํตํด Tomcat ์ ๋ฑ๋กํด์ฃผ์ด์ผ ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ, ์๋์ Application Server์ ์๋ฌด๋ฐ ์ ํ์ง๊ฐ ์์ ๊ฒ์ ๋๋ค.
์ฐ์ธก์ Configure ์ ๋๋ฌ์ Tomcat ์ด ์๋ ํด๋ ๊ฒฝ๋ก๋ฅผ ์ ํํด์ค๋๋ค.
์ฑ๊ณต์ ์ผ๋ก Tomcat ์ ์ธ์ํ๊ณ ๋ฑ๋กํด์ค ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์๋์ Warning ์ด ๋จ๋๋ฐ, Fix ๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
๋จ, artifact ๋ (exploded) ๊ฐ ๋ถ์ง ์์ ๊ฒ์ ๊ณจ๋ผ์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ Deployment ์ ๊ฒฝ๋ก๋ฅผ / ๋ก ๋ฐ๊ฟ์ค๋๋ค.
์ด๋ฌ๋ฉด Tomcat ์ค์ ์ด ๋๋๊ฒ ๋ฉ๋๋ค!
* Tomcat ํ๊ธ ๊นจ์ง ํด๊ฒฐ
์ด๋ ๊ฒ Tomcat ์ Log ์ ํ๊ธ์ด ๊นจ์ ธ์, ๊ทธ๋ฅ ์์ด๋ก ๋ฐ๊ฟจ์ต๋๋ค.
-Dfile.encoding=UTF-8 -Duser.language=en -Duser.region=us
์ด ์ต์ ์ Tomcat ์ VM options ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ค์ ํ Optinos ์ ํจ๊ป Tomcat ์ด ์คํ๋์๊ณ , ํ๊ธ ๊นจ์ง๋ ์์ด์ก์ต๋๋ค.
8) Tomcat ์คํ
์ฐ์ธก ์๋จ์์ ๋ฑ๋กํ Tomcat ์ ์ ํํด์ฃผ๊ณ , ์ด๋ก์ Run ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด Tomcat ์ด ์คํ๋ฉ๋๋ค.
Tomcat ์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ฉด, ์๋์ผ๋ก Deployment ์์ ์ค์ ํ ๊ฒฝ๋ก๋ก ์นํ์ด์ง๋ฅผ ๋์์ค๋๋ค.
๋ค์๊ณผ ๊ฐ์ด localhost:8080/ ์ hello.jsp ๊ฐ ์ ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!
์ด๋ ๊ฒ ํ๋ฉด Spring MVC ํ๋ก์ ํธ ์ค์ ์ด ๋๋ฉ๋๋ค.
์ํ์ฐฉ์ค๊ฐ ๋ง์์ผ๋, ์ญ์ ์ง์ ํด๋ณด๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ ์ ์ดํดํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๐