๐ณ ํ๋ก์ ํธ ์์ฑ
java 11 ์ค์น
- Maven / Gradle Project
- Maven → pom.xml์ ์ด์ฉํ์ฌ ์ ํํ๋ ๋น๋ ์์คํ ์ ์ ๊ณต
- Gradle → ์ ์ฐํ ๋ฒ์ฉ ๋น๋ ๋๊ตฌ ์ ๊ณต
- Gradle์ด ์๊ธฐ์ ์ผ๋ก ๋ฆ๊ฒ ๋์จ๋งํผ ๋ฐ์ด๋ ์คํ์ ๊ฐ๊ณ ์๊ณ , ๋์ ์ธ ๋น๋ ์์คํ ์ xml๋ก ์ ์ํ๊ธฐ์๋ ์ด๋ ค์ด ๋ถ๋ถ์ด ๋ง๋ค ↔ ์์ฆ์ ๋ค๋ค Gradle๋ก ๋์ด์ค๋ ์ถ์ธ๋ผ๊ณ ํ๋ค.
Spring boot
Spring boot๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค.
- main๊ณผ test ๋๋ ํ ๋ฆฌ๋ฅผ ๋๋๋๊ฒ์ด ์์ฆ ๋ํดํธ
- test์๋ ์์ฑํ ์ฝ๋๋ค์ ๋ํ ํ ์คํธ์ฝ๋๋ค์ด ๋ค์ด๊ฐ๋๋ฐ, ์ค๋ฌด์์ ๋น ์ง ์ ์๋ ๋งค์ฐ ์ค์ํ ์ฝ๋๋ผ๊ณ ํ๋ค.
- resources์๋ ์ค์ ํ์ผ์ด ์์นํ๋๋ฐ, javaํ์ผ์ ์ ์ธํ ๋ชจ๋ ํ์ผ๋ค์ด ์์นํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
- build.gradle
๐ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์์ฆ์๋ ์๋ฒ์ค์น ๋ฑ์ ๊ณผ์ ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋๋ง์ผ๋ก ์น์๋ฒ์ ์ ๋ณด๋ฅผ ์ฌ๋ฆด ์ ์๊ฒ ๋์๋ค.
- spring-boot-starter-web
- tomcat, spring webmvc
- spring-boot-starter-thymeleaf
- spring-boot-starter
- thymeleaf ์์ํด ๊ฐ์ด ๋ถ๋ ค์ง๋ ์ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- spring boot
- spring-core
- spring-boot-starter-logging
- log ํ์ผ ๊ด๋ จ
- logback, slf4j ๋๊ฐ์ง ์กฐํฉ์ผ๋ก ๋ง์ด ์ด์
- spring-boot-starter-test
- test๋ฅผ ํธ๋ฆฌํ๊ฒ
- junit5๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ
๐ณ ํ ํ๋ฆฟ ์์ง thymeleaf
ํ ํ๋ ์์ง์ ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํ ํ๋ฆฟ์ ๋ง๊ฒ ๋ณํ๋ HTML ํ์ผ์ ์์ฑํ๋ ์ญํ ์ ํ๋ค. Spring boot์์ ๊ณต์์ผ๋ก ์ง์ํ๋ ํ ํ๋ฆฟ์ผ๋ก Mustache, Thymeleaf, Groovy, Freemarker๊ฐ ์๋๋ฐ ๊ทธ ์ค thymeleaf๋ฅผ ์ฌ์ฉํ์๋ค.
ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ๋ฉด
- ๋ง์ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค
- ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค
- ํ ํ๋ฆฟ์ ๋ง์ถ์ด ๋ฐ์ดํฐ๋ง ๋ฐ๊พธ์ด๊ฐ๋ฉฐ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ ์ง๋ณด์์ ์ฉ์ดํ๋ค
๋์ ๊ณผ์
- ์น๋ธ๋ผ์ฐ์ ์์ ์์ฒญ(localhost:8080/hello)๋ฅผ ๋์ง๋ค
- Spring boot๋ tomcat์ด๋ผ๋ ์น์๋ฒ์์ ์ ๋ณด๋ฅผ ๋ฐ์ Spring์๊ฒ ๋๊ธด๋ค
- controller๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ๊ณ ๊ฐ์ฅ๋จผ์ ์คํ๋๋ค
- controller๊ฐ ๋ฆฌํด๊ฐ์ ๋ฐํํ๋ฉด, viewResolver๊ฐ ํด๋น ํ๋ฉด์ ์ฐพ์์ ์ฒ๋ฆฌํ๋ค
- Spring์ ๋ฆฌํด๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก resources → templates ๋๋ ํ ๋ฆฌ์์ ์ฐพ๋๋ค
- ์ฐ์ ์์์ธ controller์ ํด๋น ์์ฒญ์ด ์๋ค๋ฉด ๋ค์ ์ฐ์ ์์์ธ static ํ์ผ์์ ์ฐพ์ ์คํํ๋ค
- controller → thymeleaf ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ์นจ
- static → thymeleaf ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ์น์ง ์์ → htmlํ์ผ์ด ํ ํ๋ฆฟ ๋ณํ ์์ด ๋ฆฌํด๋๋ค
ํ ํ๋ฆฟ ์์ง์ ์์
- controller/helloController
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "hello!!");
return "hello";
}
}
- templates/hello.html
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<!-- th <-> thymeleaf-->
<p th:text="'์๋
ํ์ธ์. ' + ${data}" >์๋
ํ์ธ์. ์๋</p>
</body>
</html>
${data} ๋ถ๋ถ๋ง ์์ฒญ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ฆฌํด๋๋ ๋ฐฉ์์ด๋ค.
๐ณ Comment
๊ทธ๋์ ์ฃผ๋ก Node.js๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด์ ๋๋ก ๊ธฐ๋ณธ์ ์ธ ์๋๋ฐฉ์๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฉ๋๋ค๋ ์ ๋๋ก ์์ง ๋ชปํ ์ํ์์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ ๊ฐ๋ค.
์๋ฃ ์ถ์ฒ
์ธํ๋ฐ - ์คํ๋ง ์ ๋ฌธ ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ (๊น์ํ)