ํ๋ก์ ํธ ์์ฑ
https://start.spring.io/ ์์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ํ ๋ค์ด๋ฐ์ IntelliJ๋ก ์ด์ด์ค๋ค.
dependency์์
spring web์ ์น์ ๋ง๋ค๊ธฐ ์ํจ์ด๊ณ thymeleaf๋ ํ ํ๋ฆฟ ์์ง์ ์ผ์ข ์ด๋ค.
๋ค์ด๋ฐ์ ํ์ผ์์ gradle file์ ์ด์ด์ค๋ค.
ํ์ผ ๊ตฌ์กฐ
- main-java : ์ค์ ํ์ผ
- test : test ํ์ผ
- resources : ์ค์ ํ์ผ(์๋ฐ ํ์ผ์ ์ ์ธํ ๋๋จธ์ง)
- build.gradle : ๋ฒ์ ์ค์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋งํฌ
- repositories : mavenCentral - ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ดํธ(ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ฐ๋๋ค)
์ค์
settings - gradle ๊ฒ์ํ ํ ๊ธฐ๋ณธ ์์ง์ gradle์ด ์๋ IntelliJ IDEA๋ก ์ค์ ํ๋ค. gradle์ ํตํ์ง ์๊ณ IDE ์์ฒด์์ ์คํํ๋ฏ๋ก ์คํ ์๋๊ฐ ๋ ๋นจ๋ผ์ง๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ดํด๋ณด๊ธฐ
gradle์ ์์กด๊ด๊ณ๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ป ๋ค์ด๋ก๋ํ๋ค.
์คํ๋ง ๋ถํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1. spring-boot-starter-web
- spring-boot-starter-tomcat : ํฐ์บฃ(์น์๋ฒ)
- spring-webmvc : ์คํ๋ง ์น MVC
2. spring-boot-starter-thymeleaf : ํ์๋ฆฌํ ํ ํ๋ฆฟ ์์ง(view)
3. spring-boot-starter(๊ณตํต) : ์คํ๋ง ๋ถํธ + ์คํ๋ง ์ฝ์ด + logging
- spring-boot -> spring-core
- spring-boot-starter-logging -> logback, slf4j
ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- spring-boot-starter-test
- junit : ํ ์คํธ ํ๋ ์์ํฌ
- mockito : ๋ชฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- assertj : ํ ์คํธ ์ฝ๋๋ฅผ ์ข ๋ ํธํ๊ฒ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- spring-test : ์คํ๋ง ํตํฉ ํ ์คํธ ์ง์
View ํ๊ฒฝ์ค์
- ์คํ๋ง ๋ถํธ๋ src/main/static/index.html์ Welcome page ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
01. static/index.html์ ์์ค์ฝ๋ ๋ฃ์ด์ Welcome page ๊ตฌํํ๊ธฐ
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
02. localhost:8080/hello ํ์ด์ง ๊ตฌํํ๊ธฐ
/* hello.hellospring/controller/HelloController */
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello") // GET : ๊ฐ๋ ค๋ ์ฃผ์์ฐฝ
public String hello(Model model){ // MVC์์์ model
model.addAttribute("data", "hello!!");
return "hello"; // resources/templates/hello.html๋ก ์ ๋ฌํ์ฌ ๋ ๋๋งํด๋ผ.
}
}
๋ค์์ผ๋ก resources/templates์ localhost:8080/hello๋ฅผ ๋ํ๋ผ hello.html์ ๋ง๋ค์ด์ค๋ค.
<!DOCTYPE HTML>
<html xlmns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" />
</head>
<body>
<p th:text="'์๋
ํ์ธ์. '+${data}">์๋
ํ์ธ์. ์๋</p> // Controller์ model์์ data ๊ฐ์ ธ์จ๋ค
</body>
</html>
์๋ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
01. ์น ๋ธ๋ผ์ฐ์ ์์ ํน์ URL์ ๊ฐ์ง๊ณ ์๋ฒ๋ฅผ ํธ์ถํ๋ค.
02. ์๋ฒ์์ GET ๋ฐฉ์์ hello์ ๋งค์นญํ ํ Controller๋ฅผ ์คํํ๋ค.
03. ์คํ๋ง์ด Model์ ์์ฑํ์ฌ ๊ฐ์ ๋ฃ์ด๋์ ํ "hello"๋ฅผ ๋ฆฌํดํ๋ค. ์ฌ๊ธฐ์์ hello๋ resources/templates์ ์๋ hello.html์ ๋งํ๋ค.
04. view์์ thymeleaf์ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ hello.html์ ๋ ๋๋งํ๋ค.
๋ค์ ํ๋ฒ ์ ๋ฆฌํด๋ณด์.
์ปจํธ๋กค๋ฌ์์ ๋ฆฌํด ๊ฐ์ผ๋ก ๋ฌธ์๋ฅผ ๋ฐํํ๋ฉด ๋ทฐ ๋ฆฌ์กธ๋ฒ(viewResolver)๊ฐ ํ๋ฉด์ ์ฐพ์์ ์ฒ๋ฆฌํ๋ค.
- ์คํ๋ง๋ถํธ ํ ํ๋ฆฟ์์ง viewName ๋งคํ
-> `resources:templates/` + {ViewName} + `.html`
์ฐธ๊ณ ) spring-boot-devtools ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ฉด `html` ํ์ผ์ ์ปดํ์ผ๋ง ํด์ฃผ๋ฉด ์๋ฒ ์ฌ์์ ์์ด View ํ์ผ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค. (IntelliJ ์ปดํ์ผ ๋ฐฉ๋ฒ : ๋ฉ๋ด build -> Recompile)
https://dev-minji.tistory.com/16
๋๊ธ