2021. 8. 5. 00:08ใ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์์ ํ์ธ ํ์ค ์ ์์ต๋๋ค!
๐ ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด
- ์ ์ ์ปจํ ์ธ : ์๋ฒ๋ฅผ ํตํ์ง ์๊ณ , html ๋ฌธ์๋ฅผ ๊ทธ๋๋ก Browser์ ์ถ๋ ฅ.
- MVC์ Templat Engin : ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์, ์๋ฒ๋ฅผ ํตํด ๋์ ์ปจํ ์ธ ๋ฅผ ๋ง๋๋ ๋ฐฉ์.
- API : json์ ํตํด Client - Server, Server - Server ๊ฐ Data๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฒ ๋ง๋๋ ๋ฐฉ์.
Spring Boot ์ ์ ์ปจํ ์ธ ๊ธฐ๋ฅ
https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content
๐ ์ ์ ์ปจํ ์ธ ๋ฐฉ์
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
This is Static Contents
</body>
</html>
์์ ๊ฐ์ html File์ /main/resources/static ๋ฐ์ ๋ฃ๊ฒ ๋๋ฉด ๋๋ต๋๋ค!
์์ ๊ฐ์ด ๋์ํ๋ ์๋ฆฌ๋ ๋จผ์ Web Browser๊ฐ uri์ hello-static.html์ ๋ณด๋ด๊ฒ ๋๋ฉด ํฐ์ผ ์๋ฒ๊ฐ ๋จผ์ ๊ทธ ๋ด์ฉ์ ๋ฐ์ ๋ค Spring Boot์๊ฒ ์ ๋ฌ ํด ์ฃผ๋ ๊ฒ์ด์์.
Spring Boot๋ hello-static ๊ด๋ จ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์๋ณด๊ฒ ๋๋๋ฐ,
์๋ค๋ฉด resouces/static์ ํด๋น htmlํ์ผ์ ์ฐพ์ ์๋ต ํด ์ฃผ๋ ๊ฒ์ด์์.
๐ MVC์ Templat Engin
- MVC : Model, View, Controller
Controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
@RequestParam์ uri์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ ฅ ๋ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด ์ฃผ๋ ์ด๋ ธํ ์ด์ ์ธ ๊ฒ์ด์์.
"name"์ด๋ผ๊ณ ์ ์ธ์ ํ๊ธฐ ๋๋ฌธ์ uri ํ๋ผ๋ฏธํฐ๋ช ์ name์ด ๋๊ณ , addAtribute()์์ ๋ค์ name์ ์ฃผ์๊ธฐ ๋๋ฌธ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ์ ๋ ฅ ํด ์ฃผ๋ฉด ์๋ html์์ ${name}์ ํ๋ผ๋ฏธํฐ ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋์ ์๋ต์ด ๋๋ ๊ฒ์ด์์.
model.addAttribute๋ Key์ Value๊ฐ์ ์ธ์๊ฐ์ผ๋ก ๋ฐ๋๋ฐ, ์์ "name" ๋ถ๋ถ์ด Key์ด๊ณ , ๋ค์ name์ด value์ธ ๊ฒ์ด์์.
์ด๊ฒ์ ํตํด View์๊ฒ ์ ๋ฌํ Data๋ฅผ Key์ Value๋ก ์ ๋ฌํ ์ ์๊ฒ ํด ์ฃผ๋ ๊ฒ์ด์์.
View
(resources/template/hello-template.html)
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text"'hello ' + ${name}"> hello empty</p>
</body>
</html>
MVC, ํ
ํ๋ฆฟ ์์ง์์๋ ์์ฒญ์ uri๊ฐ ๋ค์ด์ค๋ฉด ๊ทธ๊ฒ์ ํฐ์ผ์ด Spring Boot์๊ฒ ๋๊ธฐ๊ณ , Boot๋ ํด๋น Controller๋ฅผ ํธ์ถํด์ ๋ก์ง์ ์ํํ๊ฒ ๋๋ ๊ฒ์ด์์.
return๊ฐ์ด 'hello-template"์ผ๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ templates ๋ฐ์ hello-template.html์ด ์๋์ง ์ฐพ์ ๋ณด๊ฒ ๋๋ ๊ฒ์ด๊ณ , model.addAttribute๋ฅผ ํตํด Key์ value๋ฅผ ์ ๋ฌ ๋ฐ๋๋ฐ, view์์๋ ์ด๊ฒ์ ์ฐธ์กฐํ๋ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ ๋์๊ธฐ ๋๋ฌธ์ uri์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฐ์์ ์๋ต์ผ๋ก ์ฒ๋ฆฌ ํด ์ฃผ๋ ๊ฒ์ด์์.
@ResponseBody Entity ๋ฐํ
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
@ResponseBody๋ฅผ ์ฌ์ฉํ์ฌ Entity(๊ฐ์ฒด)๋ฅผ ๋ฐํํ๋ฉด Entity๊ฐ Jsonํํ๋ก ๋ณํํ๊ฒ ๋๋ ๊ฒ์ด์์.
@ResponseBody๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด?
- HTTP Body ๋ฌธ์ ๋ด์ฉ์ ์ง์ ๋ฐํ
- viewResolver ๋์ HttpMessageConverter๊ฐ ๋์
- ๊ธฐ๋ณธ ๋ฌธ์ ์ฒ๋ฆฌ: StringHttpMessageConverter
- ๊ธฐ๋ณธ ๊ฐ์ฒด ์ฒ๋ฆฌ: MappingJackson2HttpMessageConverter
Jackson๋ง๊ณ , ๊ตฌ๊ธ์์ ๋ง๋ Gson๋ฑ ๋ง์ ๊ฒ๋ค์ด ์์ผ๋, Spring Boot๋ ๊ธฐ๋ณธ์ ์ผ๋ก Jackson์ ์ฌ์ฉํ๊ณ , ๋ณ๊ฒฝ ๊ฐ๋ฅ - byte ์ฒ๋ฆฌ ๋ฑ๋ฑ ๊ธฐํ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฑ๋ก
๐ก ์ฐธ๊ณ
Client์ HTTP Accpt Header์ Server์ Controller Return Type ์ ๋ณด๋ฅผ ์กฐํฉํด์ HttpMessageConvert๊ฐ ์ ํ
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์
จ๋์? ๊ตฌ๋
๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] Service ๊ฐ๋ฐ ๋ฐ Test Case ์์ฑ (0) | 2021.08.11 |
---|---|
[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend (0) | 2021.08.06 |
[Spring Boot] thymeleaf์ Spring Boot (2) | 2021.08.04 |
Lombok Annotation ๊ด๋ จ (0) | 2021.06.17 |
Spring Frame Work ๊ธฐ์ด (0) | 2021.06.10 |