[IntelliJ] ์คํ๋ง ๋ถํธ ์์ด ์คํ๋ง ์น MVC ํ๋ก์ ํธ ๋ง๋ค๊ณ ์ค์ ํ๊ธฐ
โป ์ฌ์ฉ IDE : IntelliJ IDEA 2019.3 Ultimate
1. ์ ํ๋ก์ ํธ ์์ฑ
์ฌ์ฉํ๋ ๋น๋ํด(Maven, Gradle) ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
1) ์ฌ์ฉํ ๋น๋ํด ์ ํ - ์ด ๊ธ์์๋ Maven์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
2) ์ฌ์ฉํ JDK ์ ํ
3) Next ํด๋ฆญ
ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ Finish๋ฅผ ํด๋ฆญํด์ ํ๋ก์ ํธ ์์ฑ์ ์๋ฃํ๋ค.
2. ํ๋ก์ ํธ ์ธํ
1. Java Compiler ๋ฒ์ ๋ณ๊ฒฝ
2. ํ๋ก์ ํธ์ Web Facet ์ถ๊ฐ
3. war packaging ์ค์
Maven ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ณธ Java Compiler ๋ฒ์ ์ด 1.5๋ก ๋์ด์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ด ํ์ํ๋ค.
Settings - Build, Execution, Deployment - Compiler - Java Compiler์์ Target bytecode version์ ์ฌ์ฉํ๋ JDK ๋ฒ์ ์ผ๋ก ๋ฐ๊พผ๋ค.
๊ทธ๋ฆฌ๊ณ pom.xml์ ์๋ฐ ๋ฒ์ ์ ๋ช ์ํ๋ค.
pom.xml
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
๋ค์์ผ๋ก ํ๋ก์ ํธ์ Web Facet์ ์ถ๊ฐํ๋ค.
ํ๋ก์ ํธ์์ ๋ง์ฐ์ค ์ฐ์ธก ๋ฒํผ - Add Framework Support... ๋ฅผ ํด๋ฆญํ๋ค.
๋ชฉ๋ก์์ Web Application์ ์ฒดํฌ, Create web.xml์ ์ฒดํฌํ๊ณ OK๋ฅผ ํด๋ฆญํ๋ค.
Maven ํ๋ก์ ํธ๋ web resource directory๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก src/main/webapp์ผ๋ก ์กํ๋ฏ๋ก ์์ฑ๋ web ๋๋ ํ ๋ฆฌ๋ฅผ src/main ๋ฐ์ผ๋ก ์ฎ๊ธฐ๊ณ ์ด๋ฆ์ webapp์ผ๋ก ๋ณ๊ฒฝํ๋ค.
๋ง์ง๋ง์ผ๋ก pom.xml์ <packaging>war</packaging>์ ์ถ๊ฐํ๋ค.
pom.xml
...
<groupId>com.atoz_develop</groupId>
<artifactId>spring-mvc-sample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
...
3. ์์กด์ฑ(Dependency) ์ค์
โ๏ธ ํ์ ์์กด์ฑ
- servlet-api(jsp๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ )
- spring-webmvc
pom.xml
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
</dependencies>
4. ์คํ๋ง ์น MVC ์ค์
1. Configuration ์ค์
- @EnableWebMvc
2. DispatcherServlet ์ค์
- web.xml ๋๋ WebApplicationInitializer
3. DispatcherServlet ์ปค์คํฐ๋ง์ด์ง ์ค์
- WebMvcConfigurer
1) Configuration ์ค์
Configuration์ฉ ํด๋์ค๋ฅผ ์๋ก ์์ฑํ๋ค.
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfiguration {
}
์์ฑํ ํด๋์ค์ @configuration, @EnableWebMvc ์ ๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
์ด ๋ ๊ฐ๊ฐ ์คํ๋ง ์น MVC์ ์ค์ ์ ํ์์ ์ธ ์ ๋ ธํ ์ด์ ์ด๋ค.
@ComponentScan์ ํธ์์ ๋น ์ค์ ํ์ผ์ ๋ฐ๋ก ๋ง๋ค์ง ์๊ธฐ ์ํด ๊ฐ์ด ๋ถ์ฌ์ฃผ์๋ค.
2) DispatcherServlet ์ค์
์คํ๋ง MVC์ ํต์ฌ์ DispatcherServlet์ด๋ค.
์คํ๋ง MVC ์น ์๋น์ค๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ DispatcherServlet์ด ๊ฐ์ฅ ์๋จ์์ ์ ์ผ ๋จผ์ ๋ฐ๊ธฐ ๋๋ฌธ์ DispatcherServlet์ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
DispatcherServlet์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ํ ์ ์๋๋ฐ web.xml๊ณผ WebApplicationInitializer ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์์ ์ค์ ํ ์ ์๋ค.
๋ ์ค ํธํ ๋ฐฉ๋ฒ์ ํํ๋ฉด ๋๋ค.
(1) web.xml์ DispatcherServlet ์ค์ ํ๊ธฐ
web.xml - ์ ๋
ธํ
์ด์
์คํ๋ง ์ค์ ์ฌ์ฉ ์
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.atoz_develop.WebConfiguration</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
<servlet>์ org.springframework.web.servlet.DispatcherServlet์ ์ ์ธํ๊ณ <init-param>์ DispatcherServlet์ด ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ค์ ์ ์ฌ์ฉํด์ ApplicationContext๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๋ค.
์ฐธ๊ณ ๋ก ์คํ๋ง XML ์ค์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค.
web.xml - XML ์คํ๋ง ์ค์ ์ฌ์ฉ ์
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
contextConfigLocation์ value์ ํ๋ก์ ํธ์ ์คํ๋ง XML ์ค์ ๊ฒฝ๋ก๋ฅผ ์ ์ด์ผ ํ๋ค.
(2) WebApplicationInitializer ๊ตฌํ์ฒด์ DispatcherServlet ์ค์ ํ๊ธฐ
web.xml์ DispatcherServlet์ ์ค์ ํ๋ค๋ฉด ์ด ๋จ๊ณ๋ ๋์ด๊ฐ๋ค. DispatcherServlet์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ํํ์ฌ ์ค์ ํ๋ฉด ๋๋ค.
WebApplicationInitializer๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์๋ก ์์ฑํ๋ค.
public class WebApplication implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setServletContext(servletContext); // @EnableWebMvc ์ ์ฉ์ ์ํ ํ์ ์ธํ
context.register(WebConfiguration.class);
context.refresh();
DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
ServletRegistration.Dynamic app = servletContext.addServlet("app", dispatcherServlet);
app.addMapping("/app/*");
}
}
์์ ๊ฐ์ด onStartup()์ overrideํ๋ค.
web.xml์ DispatcherServlet์ ์ค์ ํ๋ ๊ฒ๊ณผ ๋์ผํ ๋์์ ํ๋ ์ฝ๋์ด๋ค.
3) DispatcherServlet ์ปค์คํฐ๋ง์ด์ง ์ค์
WebMvcConfigurer ์ธํฐํ์ด์ค๋ฅผ implementsํด์ DispatcherServlet์ด ์ฌ์ฉํ๋ ๋น๋ค์ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์๋ค.
์ฌ๊ธฐ์๋ WebConfiguration ํด๋์ค๊ฐ WebMvcConfigurer ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ํ๊ฒ ๋ค.
ํ์ํ๋ค๋ฉด WebMvcConfigurer ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๋ณ๋๋ก ์์ฑํด๋ ๋๋ค.
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfiguration implements WebMvcConfigurer {
}
5. ์๋ฒ ๋ฐฐ์น ์ค์
์ฌ์ฉํ๋ ์๋ฒ(ํฐ์บฃ ๋ฑ)์ ํ๋ก์ ํธ๋ฅผ ์ถ๊ฐํ๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ ์คํ๋ง ๋ถํธ ์์ด ๊ธฐ๋ณธ์ ์ธ ์คํ๋ง ์น MVC ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ถ๊ฐ๋ก ์ด ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํด ๊ฐ๋จํ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋ณด์.
WEB-INF์ sample.jsp๋ฅผ ๋ง๋ ๋ค.
sample.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>Hello Spring Web MVC!</h2>
</body>
</html>
SampleController๋ฅผ ๋ง๋ ๋ค.
SampleController.java
@Controller
public class SampleController {
@GetMapping("/sample")
public String sample() {
return "/WEB-INF/sample.jsp";
}
}
์์ ๊ฐ์ด ์์ฑํ๊ณ ์๋ฒ๋ฅผ ๊ธฐ๋ํด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณธ๋ค.
WebMvcConfigurer๋ฅผ ํ์ฉํด์ ViewResolver๋ฅผ ์ปค์คํฐ๋ง์ด์งํ์ฌ '/WEB-INF/sample.jsp'์ ๊ฐ์ด ๋ฆฌํดํ๋ ๋ทฐ๋ฅผ 'sample'๋ก ๊ฐ๋จํ ๋ฆฌํดํ ์ ์๋๋ก ํด๋ณด์.
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/", ".jsp");
}
}
WebMvcConfigurer ๊ตฌํ์ฒด์์ configureViewResolvers()๋ฅผ ์์ ๊ฐ์ด overrideํ๋ค.
@Controller
public class SampleController {
@GetMapping("/sample")
public String sample() {
return "sample";
}
}
๊ทธ๋ฆฌ๊ณ ๋ทฐ ๋ฆฌํด๋ถ๋ฅผ ์์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ค.
์คํ ๊ฒฐ๊ณผ๋ ์ด์ ๊ณผ ๋์ผํ๋ค.
์ต์ข ํ๋ก์ ํธ ๊ตฌ์กฐ
#์ธํ ๋ฆฌJ ์คํ๋ง ์น MVC ํ๋ก์ ํธ
#Maven ์น ํ๋ก์ ํธ
#Maven ์คํ๋ง
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] ApplicationRunner ๋ฑ๋ก ๋ฐฉ๋ฒ ์ ๋ฆฌ (0) | 2020.03.26 |
---|---|
์คํ๋ง ๋ถํธ ํ ์คํธ - ๋ด์ฅ ์๋ฒ ๋๋ค ํฌํธ๋ก ๋์ฐ๊ธฐ (2) | 2020.03.24 |
Servlet์์ ์คํ๋ง ApplicationContext ์ฌ์ฉํ๊ธฐ (0) | 2020.03.11 |
์คํ๋ง ๋ถํธ์ ์์กด์ฑ ๊ด๋ฆฌ(Dependency Management) (0) | 2020.03.11 |
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ - Spring Initializr ์น ๋๊ตฌ ์ฌ์ฉ (0) | 2020.03.11 |
๋๊ธ