2021. 8. 4. 20:42ใBack-End ์์ ์ค/Spring Framework
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ฃผ๋ํ๋์ Spring Boot์ ๋ํด์ ๊ณต๋ถํ๊ณ ์๋ ๊ฒ์ด์์.
์ธํ๋ฐ์ ๊น์ํ๋์ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์ ๋ํด์ ๊ณต๋ถํ๋ฉด์ ํผ๋๋ฅผ ์์ฑ ํด ๋ณด๋๋ก ํ ๊ฒ์ด์์.
๋ฐ๋ก ์์ ํด ๋ณด๊ฒ ์ต๋๋ค!
๐ ๋ชฉ์ฐจ
01.[Spring Boot] thymeleaf์ Spring Boot
02.[Spring Boot] Spring Web ๊ฐ๋ฐ ๊ธฐ์ด
03.[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend
04.[Spring Boot] Service ๊ฐ๋ฐ ๋ฐ Test Case ์์ฑ
05.[Spring Boot] Spring Bean๊ณผ ์์กด๊ด๊ณ
06.[Spring Boot] Java Code๋ก ์ง์ Spring Bean ๋ฑ๋ก
07.[Spring Boot] ๋ฑ๋ก, ๋ชฉ๋ก ๋ณด๊ธฐ ๊ตฌํํ๊ธฐ
08.[Spring Boot] ๊ธฐ์กด ์ฝ๋ ์ ์๋๊ณ , ์ค์ ์ผ๋ก ๊ตฌํ Class ๋ณ๊ฒฝ
09.[Spring Boot] ํตํฉ Test
10.[Spring Boot] JPA
11.[Spring Boot] Spring Data JPA
12.[Spring Boot] AOP
๐ ์์ํ๊ธฐ ์ ์
์ฝ๋์ ๊ด๋ จํ ๋ด์ฉ์ ์ฃผ๋ํ๋์ Github์์ ํ์ธ ํ์ค ์ ์์ต๋๋ค!
๐ thymeleaf
๐ ํ ํ๋ฆฟ ์์ง์ด๋?
ํ ํ๋ฆฟ ์์ง์ด๋ ๋์ ์ปจํ ์ธ ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ธ ๊ฒ์ด์์.
ํ ํ๋ฆฟ ์์๊ณผ ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฐ๋ฅธ ์ ๋ ฅ ์๋ฃ๋ฅผ ๊ฒฐํฉํ์ฌ ๊ฒฐ๊ณผ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ ์ํํธ์จ์ด๋ฅผ ๋งํ๋ฉฐ view code(html)์ data logic code(db connection)์ ๋ถ๋ฆฌํด์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ์ด์์.
์คํ๋ง MVC์์ ์ฃผ๋ก ๋์ ์ธ View๋ฅผ ๋ง๋๋๋ฐ ์ฌ์ฉํ๋ค. ๊ทธ๋ ๋ค๊ณ View๋ง ๋ง๋๋๋ฐ ์ฌ์ฉํ์ง๋ ์์ผ๋ฉฐ ์ด๋ฉ์ผ ๋ฑ ๋ค์ํ ์ฉ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ต๋๋ค.
ํ ํ๋ฆฟ ์์ง์๋ ์๋ฒ์ฌ์ด๋, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๊ฐ์ง๊ฐ ์๋ต๋๋ค.
- ์๋ฒ ์ฌ์ด๋ ํ
ํ๋ฆฟ ์์ง : ์๋ฒ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์๋ ํ
ํ๋ฆฟ์ ๋ฃ์ด html์ ๊ทธ๋ฆฐ ๋ค ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ.
- HTML ์ฝ๋์์ ๊ณ ์ ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ํ
ํ๋ฆฟ์ผ๋ก ๋ง๋ค์ด๋๊ณ , ๋์ ์ผ๋ก ์์ฑ๋๋ ๋ถ๋ถ๋ง ํ
ํ๋ฆฟ์ ์์ค์ฝ๋๋ฅผ ๋ผ์๋ฃ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- HTML ์ฝ๋์์ ๊ณ ์ ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ํ
ํ๋ฆฟ์ผ๋ก ๋ง๋ค์ด๋๊ณ , ๋์ ์ผ๋ก ์์ฑ๋๋ ๋ถ๋ถ๋ง ํ
ํ๋ฆฟ์ ์์ค์ฝ๋๋ฅผ ๋ผ์๋ฃ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํ
ํ๋ฆฟ ์์ง : HTML ํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, ๋์ ์ผ๋ก DOM์ ๊ทธ๋ฆฌ๊ฒ ํด์ฃผ๋ ์ญํ .
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ DOM ๊ฐ์ฒด์ ๋์ ์ผ๋ก ๊ทธ๋ ค์ฃผ๋ ํ๋ก์ธ์ค๋ฅผ ๋ด๋นํ๋ค.
์คํ๋ง ๋ถํธ๊ฐ ์๋ ์ค์ ์ ์ง์ํ๋ ํ ํ๋ฆฟ ์์ง
- FreeMarker
- Groovy
- Thymeleaf
- Mustache
์คํ๋ง ๋ถํธ๋ JSP๋ฅผ ์ซ์ดํด์!
Thymeleaf์ ๋ฌ๋ฆฌ JSP๋ ์คํ๋ง๋ถํธ๊ฐ ์๋ ์ค์ ์ ์ง์ํ์ง ์์ผ๋ฉฐ ๊ถ์ฅํ์ง๋ ์๋๋ต๋๋ค.
์ Spring Boot์์๋ JSP๋ฅผ ๊ถ์ฅํ์ง ์์๊น์?
์ฐ์ JSP๋ฅผ ์ฌ์ฉํ๋ฉด JAR ํจํค์ง์ ํ ์ ์์ด WAR ํจํค์ง์ ํด์ผํ๋ค. ๋ฌผ๋ก , WARํจํค์ง์ผ๋ก๋ ์๋ฒ ๋๋ ํฐ์บฃ์ผ๋ก ์คํํ ์ ์๊ณ , ๋ฐฐํฌ๋ ๊ฐ๋ฅํ๊ธด ํฉ๋๋ค.
ํ์ง๋ง Undertow๋ผ๋ ์ต๊ทผ์ ๋ง๋ค์ด์ง ์๋ธ๋ฆฟ ์์ง์ด JSP๋ฅผ ์ง์ํ์ง ์๋ ๋ฑ ์ ์ฝ์ฌํญ์ด ์๋ต๋๋ค.
๋ํ JSP์ ๋ํ ์์กด์ฑ์ ๋ฃ์ผ๋ฉด ์์กด์ฑ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๋ ์๋ ๊ฒ์ด์์.
JAR์ WAR๋ ๋ญ์์?
JAR์ WAR ๋ชจ๋ JAVA์ jar ํด์ ์ด์ฉํด ์์ฑ๋ ํ์ผ์ด๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ๋ฐฐํฌํ๊ณ ๋์์ํฌ ์ ์๋๋ก ๊ด๋ จ ํ์ผ์ ํจํค์งํด์ค๋ต๋๋ค.
- JAR (Java Archive)
- .jar ์๋ฐ ํ๋ก์ ํธ๋ฅผ ์์ถํ ํ์ผ.
- ์๋ฐ ๋ฆฌ์์ค, ์์ฑํ์ผ, ๋ผ์ด๋ธ๋ฒ๋ฆฌ ๋ฑ์ด ํฌํจ.
- ์ํ๋ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ฉฐ JDK(Java Development Kit)์ ํฌํจ๋์ด ์๋ JRE(Java Runtime Environment)๋ง ๊ฐ์ง๊ณ ๋ ์คํ ๊ฐ๋ฅ.
- WAR(Web Application Archive)
- .war servlet / jsp ์ปจํ ์ด๋์ ๋ฐฐ์นํ ์ ์๋ ์น์ดํ๋ฆฌ์ผ์ด์ ์์ถ ํ์ผ.
- ์น ๊ด๋ จ ์์๋ง์ ํฌํจ (JSP, Servlet, JAR, Class, HTML ๋ฑ).
- JAR๊ณผ ๋ฌ๋ฆฌ WEB-INF ๋ฐ META-INF ๋๋ ํ ๋ฆฌ๋ก ์ฌ์ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ ์คํํ๊ธฐ ์ํด์ Tomcat๊ณผ ๊ฐ์ ์น ์๋ฒ ๋๋ ์น ์ปจํ ์ด๋(WAS)๊ฐ ํ์.
- WAR๋ JAVA์ jar ์ต์ (java -jar)์ ์ด์ฉํด ์์ฑํ๋ JAR ํ์ผ์ ์ผ์ข .
๊ทธ๋์ tymeleaf๊ฐ ๋ญ์์?
Thymeleaf๋ ๋น๊ต์ ์ต๊ทผ์ ๋ง๋ค์ด์ง ํ
ํ๋ฆฟ ์์ง์ด๋ฉฐ, ์๋ฒ์ฌ์ด๋ ์๋ฐ ํ
ํ๋ฆฟ ์์ง์ ํ ์ข
๋ฅ์ธ ๊ฒ์ด์์.
JSP์ Thymeleaf์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ JSP์ ๋ฌ๋ฆฌ Servlet Code๋ก ๋ณํ๋์ง ์๋ค๋ ์ ์ด๋ค. ๋ฐ๋ผ์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌ๋์ด ์ค๋ก์ง View์ ์ง์คํ ์ ์๊ฒ ํด ์ค๋ต๋๋ค.
@Controller
public class HelloController {
@GetMapping("Hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
}
<!DOCTYPE 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>
<p th:text="'์๋
ํ์ธ์. ' +{data}" > ์๋
ํ์ธ์. ์๋</p>
</body>
</html>
'์๋ ํ์ธ์ ์๋'์ ์ด๋๊ฐ๊ณ , '์๋ ํ์ธ์. hello!!'๊ฐ ์ถ๋ ฅ ๋์์๊น์? '์๋ ํ์ธ์. ์๋'์ ์ ์ ์ปจํ ์ธ ์ฆ, html๋ก๋ง ์์ฑ์ ํ์ ๋ ๋ณด์ด๋ ๋ถ๋ถ ์ด๊ณ , MVC์ Templat Engin์ ์ฌ์ฉํ๋ฉด ์์ ๊ฐ์ด ์ถ๋ ฅ์ด ๋๋ ๊ฒ์ด์์.
์์ ๊ฐ์ด ์๋ํ๋ ์๋ฆฌ๋ฅผ ๋ณด์๋ฉด ๋จผ์ Web Browser๊ฐ uri๋ก hello๋ฅผ http Method get์ ํตํด ์ ๋ฌํ๋ฉด ํฐ์ผ ์๋ฒ๊ฐ ์ด๊ฒ์ ๋งจ ์ฒ์ ๋ฐ์ Spring Boot์๊ฒ ์ ๋ฌํ๋ ๊ฒ์ด์์. Spring Boot๋ ์ ๋ฌ ๋ฐ์ ๋ด์ฉ์ ๋ณด๊ณ , hello Controller์๊ฒ ์ด ๋ด์ฉ์ ์ ๋ฌ ํด ์ฃผ๊ณ , Method์์ ์๋ String ํ์์ hello๋ฅผ ๋ฐํํ๊ฒ ๋๋๋ฐ, model์ ํตํด data:hello!!๊ฐ ์์ฑ ๋์ด ์์ผ๋ ์ด ๋ด์ฉ์ viewResolver์๊ฒ ์ ๋ฌ์ ํด ์ฃผ๋ ๊ฒ์ด์์. viewResolver๋ uri๊ฐ hello์ธ ๊ฒ์ด ๋ฐํ๊ฐ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ๋ง๋ ํ๋ฉด์ธ
'main/resources/templates/hello.html์ ์ฐพ์์ ๋ฐํ์ ํด ์ฃผ๋ ๊ฒ์ด์์.
- Spring Boot Templat Engin Default viewName Mapping
- resources: templates/ +{ViewName} + .html
๐ก ์ฐธ๊ณ
spring-boot-devtools Library๋ฅผ ์ถ๊ฐ ์ html File์ ์ปดํ์ผ๋ง ํด์ฃผ๋ฉด ์๋ฒ ์ฌ ์์ ์์ด View File ๋ณ๊ฒฝ์ด ๊ฐ๋ฅ.
InteliJ ์ปดํ์ผ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ: Mene build -> Recompile
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์
จ๋์? ๊ตฌ๋
๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] Service ๊ฐ๋ฐ ๋ฐ Test Case ์์ฑ (0) | 2021.08.11 |
---|---|
[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend (0) | 2021.08.06 |
[Spring Boot] Spring Web ๊ฐ๋ฐ ๊ธฐ์ด (0) | 2021.08.05 |
Lombok Annotation ๊ด๋ จ (0) | 2021.06.17 |
Spring Frame Work ๊ธฐ์ด (0) | 2021.06.10 |