Bibi's DevLog ๐ค๐
[Spring] ์ธํ๋ฐ ์คํ๋ง ์ ๋ฌธ(๊น์ํ ๋) - ๋น๋ ๋ฐ ์คํ, ์ ์ ์ปจํ ์ธ /MVC์ ํ ํ๋ฆฟ์์ง/API ๋ณธ๋ฌธ
[Spring] ์ธํ๋ฐ ์คํ๋ง ์ ๋ฌธ(๊น์ํ ๋) - ๋น๋ ๋ฐ ์คํ, ์ ์ ์ปจํ ์ธ /MVC์ ํ ํ๋ฆฟ์์ง/API
๋น๋น bibi 2021. 3. 4. 00:53์ด ๊ธ์ ์ธํ๋ฐ ๊น์ํ ๋์ ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
(์ด์ด์)
๋น๋ํ๊ณ ์คํํ๊ธฐ
๋ง๋ ํ์ผ์ ์ธํ ๋ฆฌJํ๊ฒฝ์ด ์๋ cmd ํ๊ฒฝ์์ ์คํํด ๋ณธ๋ค.
์๋ฒ์์ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ํด๋นํ๋ค (cmd๋ง ์ฌ์ฉ ๊ฐ๋ฅ) - ์ค๋ฌด์์ ๊ฐ๋ฐํ ๋๋ cmd๋ง์ผ๋ก ๋น๋๋ฅผ ํด์ผ ํ ๋๋ ๋ง๋ค.
(์๋์ฐ ๊ธฐ์ค)
๋ช ๋ น ํ๋กฌํํธ๋ฅผ ์ด๊ณ
cd ๋๋ ํ ๋ฆฌ๋ช
์ ํตํด ์คํ๋ง ํ์ผ์ด ์๋ ์์น๋ก ์ด๋ํ๋ค.cd ๋๋ ํ ๋ฆฌ๋ช
: ํด๋น ๋๋ ํ ๋ฆฌ๋ก ์ด๋dir
: =ls
. ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ๋ณด์ฌ ์คdir
๋ก ํ์ธํ์ ๋gradlew
ํ์ผ์ด ๋ณด์ด๋ฉด,gradlew build
๋ช ๋ น์ด๋ก ๊ทธ๋๋ค์ ์คํํ๋ค.์ ์ ๊ธฐ๋ค๋ฆฌ๋ฉด ํ์ํ ํ์ผ๋ค์ ์ค์นํ๊ณ ๋น๋๊ฐ ์๋ฃ๋๋ค.
BUILD SUCCESSFUL
์ด ๋์ค๋ฉด ๋น๋๊ฐ ์ ๋ ๊ฒ.- ๋น๋๊ฐ ์ ์ ๋๋ฉด,
gradlew clean build
๋ก ์์ ํ ์ง์ฐ๊ณ ๋ค์ ์๋ํด ๋ณธ๋ค.
- ๋น๋๊ฐ ์ ์ ๋๋ฉด,
๋น๋๊ฐ ๋ค ๋๋ฉด
cd build
๋ฅผ ์ ๋ ฅํด ๋น๋ ํด๋๋ก ๋ค์ด๊ฐ ๋ณธ๋ค.cd libs
๋ฅผ ์ ๋ ฅํด libs ํด๋๋ก ์ด๋ํ๋ฉดํ๋ก์ ํธ๋ช -0.0.10-SNAPSHOT.jar
ํ์ผ์ด ์์ฑ๋์ด ์๋ค.java -jar ํ๋ก์ ํธ๋ช -0.0.10-SNAPSHOT.jar
๋ฅผ ์ ๋ ฅํด ์คํ๋ง ์น์ ์คํํ๋ค.localhost:8080์ ์ ์ํด ๋ง๋ ํ์ด์ง๊ฐ ์ ๋์ค๋์ง ํ์ธํด ๋ณธ๋ค.
Ctrl + c
๋ก ์คํ ์ค์ธ ์น์ ์ข ๋ฃํ๋ค.Shutting down ExecutorService 'applicationTaskExecutor'
๊ฐ ๋์ค๋ฉด ์ ์ข ๋ฃ๋ ๊ฒ.
jar
ํ์ผ์ ๋ฃ๊ณ ์คํ์ํค๋ฉด ๋๋๋ ๋งค์ฐ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ์น์ ์คํํด ๋ณด์๋ค.
์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด - ์ ์ ์ปจํ ์ธ , MVC์ ํ ํ๋ฆฟ ์์ง, API
์น์ ๊ฐ๋ฐํ๋ค๋ ๊ฒ์๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ ์ ์ปจํ ์ธ , 2. MVC์ ํ ํ๋ฆฟ ์์ง, 3. API
1. ์ ์ ์ปจํ ์ธ
: ์๋ฒ์์๋ ๋ณ๋ค๋ฅธ ์ผ์ ํ์ง ์๊ณ , ํ์ผ์ ๊ทธ๋๋ก ์น ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ด ์ฃผ๋ ๋ฐฉ์. ์ ์ ๋ฐฐ์ด Welcome Page์ ๊ฐ๋ค.
์คํ๋ง ๋ถํธ๋ static
์ ์ฐพ์ ์ ์ ์ปจํ
์ธ ์ ๊ณต ๊ธฐ๋ฅ์ ์๋ ์ง์ํ๋ค.
ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๊ณ , ์ ์ฅ๋ htmlํ์ผ์ ์์ฒญ์ ๋ณด๋ด์ฃผ๊ธฐ๋ง ํ๋ค.
src/main/resources/static
ํด๋์ ์์์ htmlํ์ผ์ ๋ง๋ค๊ณ , ํด๋น ํ์ผ๋ช ์ผ๋ก URL ์ ์ํ ์ ์๋ค.- ์๋ฅผ ๋ค์ด hello-static.html์ ๋ง๋ค๋ฉด, URL์
localhost:8080/hello-static.html
์ด๋ค.
- ์๋ฅผ ๋ค์ด hello-static.html์ ๋ง๋ค๋ฉด, URL์
์ ์ ์ปจํ ์ธ ๋ฐฉ์ ๊ณผ์ ์ค๋ช
์น ๋ธ๋ผ์ฐ์ ์์
localhost:8080/hello-static.html
๋ก ์์ฒญํ๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ๊ฐ ํด๋น ์์ฒญ์ ๋ฐ๋๋ค.ํฐ์บฃ ์๋ฒ๋ ๋จผ์ ์คํ๋ง ์ปจํ ์ด๋์ hello-static.html์์ฒญ์ด ์์์ ์๋ฆฐ๋ค.
์คํ๋ง ๋ถํธ์์๋ ''์ปจํธ๋กค๋ฌ''๊ฐ ์ฐ์ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์, ๊ฐ์ฅ ๋จผ์ ์ปจํธ๋กค๋ฌ ์ค์ hello-static.html ๊ด๋ จ ๋ด์ฉ์ด ์๋์ง ํ์ธํ๋ค.
์ปจํธ๋กค๋ฌ์ ํด๋น ๋ด์ฉ์ด ์์ผ๋ฉด ๊ทธ ๋ค์์ผ๋ก
resources: static
์ hello-static.html ๊ด๋ จ ๋ด์ฉ์ด ์๋์ง ์ฐพ๋๋ค.์์ผ๋ฉด ํด๋น ๋ด์ฉ(htmlํ์ผ)์ ๋ฐํํ๋ค.
2. MVC์ ํ ํ๋ฆฟ ์์ง
: ํ์ฌ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์.
ํ ํ๋ฆฟ ์์ง(JSP, PHP ๋ฑ) - HTML์ ๊ทธ๋ฅ ๋ณด๋ด์ฃผ๋ ๊ฒ์ด ์๋, ์๋ฒ์์ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ๋์ ์ผ๋ก ๋ฐ๊พธ์ด์ ๋ณด๋ด์ฃผ๋ ์ญํ .
MVC
: HTML์ ๋์ ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํ ์์๋ค.
Model๋ชจ๋ธ, View๋ทฐ, Controller์ปจํธ๋กค๋ฌ ๋ฅผ ๋ปํ๋ค.
Model ๋ชจ๋ธ ,Controller ์ปจํธ๋กค๋ฌ : ๋ก์ง๊ณผ ๊ด๋ จ๋๊ฑฐ๋ ๋ด๋ถ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค.
Controller -
HelloController.java
@Controller public class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); return "hello-template"; } }
@RequestParam()
: ์ธ๋ถ(์น)์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์์ฌ ๋ ์ฌ์ฉ. URL ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ ๋ฐ์์ฌ ์ ์๋ค?helloMvc(@RequestParam("name") String name, Model model)
: String์ Model์ ๋ด๊ณ , ๊ทธ Model์ View์์ ๋ ๋๋งํ ๋ ์ฌ์ฉํ๋ค.model.addAttribute("name", name);
: ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จname
์ Model์ ์ ์ฅํ๋ค."name"
(@RequestParam("name")
)์ด ํค,name
(String name
)์ด ๊ฐ์ด๋ค.์ด๋๋ก ์ฌ์ฉํ๋ฉด
/hello-mvc
์ ์ ์ํด๋ ์๋ฌด๊ฒ๋ ๋จ์ง ์๊ณWARN ... MissingServletRequestParameterException: Required String parameter 'name' is not present
์ด ๋ฌ๋ค.@RequestParam()
์"name"
์ Ctrl + p ๋ฅผ ๋๋ฅด๊ณ ํ์ธํด ๋ณด๋ฉด, ํด๋น ์ด๋ ธํ ์ด์ ์ด ๋ฌด์์ ํ์๋ก ํ๋์ง ์ ์ ์๋ค.์ฆ URL์์์ ํ์ํ ํ๋ผ๋ฏธํฐ
"name"
์ ๋ฃ์ด ์์ฒญํด์ผ ํ๋ค!localhost:8080/hello-mvc
(โ)localhost:8080/hello-mvc?name=๊ฐ
(โญ)์ด๋ ๊ฒ ์์ฒญํ๋ฉด
String name
์ด๊ฐ
์ผ๋ก ๋ฐ๋์ด ๋ชจ๋ธ์ ๋ฃ์ด์ง๊ณ , template์ ๋์ด๊ฐ๋ค.
View ๋ทฐ : ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ญํ ๋ด๋น.
View -
resources/template/hello-template.html
<html xmlns:th="http://www.thymeleaf.org"> <body> <p th:text="'hello ' + ${name}">hello! empty</p> </body> </html>
<html xmlns:th="http://www.thymeleaf.org">
: thymeleaf ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํด html์ ๊ฐ์ ธ์จ๋ค.<p th:text="'hello ' + ${name}">hello! empty</p>
: ํ ํ๋ฆฟ์์ง์ ์ฌ์ฉํ์ง ์์ ๋๋<p></p>
์ฌ์ด์ ๊ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅํ๊ณ , ์ฌ์ฉํ ๋๋<p></p>
์ฌ์ด์ ๊ฐ์th:text="๋ด์ฉ"
์ผ๋ก ์นํํด ์ถ๋ ฅํ๋ค. ์๋ฒ ์์ด HTMLํ์ผ์ ํ์ธํ ๋ ์ฌ์ฉํจ.${name}
: Model์์ ๊ฐ์ ๊บผ๋ผ ๋ ์ฌ์ฉํ๋ ๊ธฐํธ์ด๋ค.์ฆ ๋ชจ๋ธ์ ํค ๊ฐ์ด
name
์ธ ๋ฐ์ดํฐ์์ ๊ฐ์ ๊บผ๋ด, ๊ทธ ๊ฐ์ผ๋ก ์นํํด ์ค๋ค
MVC, ํ ํ๋ฆฟ์์ง ๋ฐฉ์ ๊ณผ์ ์ค๋ช
์น ๋ธ๋ผ์ฐ์ ์์
localhost:8080/hello-mvc
๋ก ์์ฒญํ๋ค.์คํ๋ง๋ถํธ์ ๋ด์ฅ ํฐ์บฃ ์๋ฒ์์ ํด๋น ์์ฒญ์ ๋ฐ์ ์คํ๋ง ์ปจํ ์ด๋๋ก ๋๊ฒจ์ค๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ๊ฐ์ฅ ๋จผ์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ดํผ๋ฉฐ ํด๋น ์์ฒญ(
hello-mvc
)์ ๋งตํ๋(@GetMapping()
) ์ฌํญ์ด ์๋์ง ํ์ธํ๋ค.๋งตํ๋ ์ฌํญ์ด ์์ผ๋ฉด, ๋งตํ๋ ๋ฉ์๋
helloMvc()
๋ฅผ ํธ์ถํด ์ค๋ค.helloMvc()
๊ฐ ์คํ๋๋ค.๋ฆฌํด๊ฐ์ธ
hello-template
๋ฅผ ๋ณด๋ด๊ณ , ๋์์ Model์ ํค=name
, ๊ฐ=spring
์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ๋ณด๋ธ๋ค.์คํ๋ง viewResolver๊ฐ ์ด๋ฅผ ๋ฐ์ ๋์ํ๋ค.
src/main/resources/template
์์ View(hello-template.html
)๋ฅผ ์ฐพ์ ์ฃผ๊ณ , ํ ํ๋ฆฟ์์ง(์ฌ๊ธฐ์๋ Thymeleaf)์ ์ฐ๊ฒฐ์์ผ ์ค๋ค.ํ ํ๋ฆฟ์์ง์ ํด๋น htmlํ์ผ์ ๋ฐ์ View๋ผ๋ ํ ํ๋ฆฟ์ ๋ณํํ ๋ค์, ๋ณํ๋ htmlํ์ผ์ ์น๋ธ๋ผ์ฐ์ ์ ๋๊ฒจ ์ค๋ค.
์ ์ ์ปจํ ์ธ ์์ ์ฐจ์ด์ ?
: htmlํ์ผ์ ๋ณํํด ๋๊ฒจ์ค๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
3. API
: ์๋๋ก์ด๋/์์ดํฐ ๊ฐ๋ฐ์ ์ฌ์ฉ. ๋๋ ์๋ฒ๋ผ๋ฆฌ ํต์ ํ ๋, ๋ฐ์ดํฐ๋ง ๊ตํํ๋ฏ๋ก API๋ฐฉ์์ ์ฌ์ฉํ๋ค.
xml / JSON ๋ฐ์ดํฐ ๊ตฌ์กฐ ํฌ๋งท์ผ๋ก ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ API๋ฐฉ์์ด๋ผ๊ณ ํ๋ค.
์๋ฒ๊ฐ API๋ก ๋ฐ์ดํฐ๋ง ๋ณด๋ด ์ฃผ๋ฉด, ํ๋ฉด์ ํด๋ผ์ด์ธํธ๊ฐ ์์์ ๊ทธ๋ฆฌ๋ ๋ฐฉ์.
*์ ์ ์ปจํ ์ธ ๋ฐฉ์์ ์ ์ธํ๊ณ , HTML์ ์ง์ (๋ณํํ์ฌ) ๋ณด๋ด์ฃผ๋์ง ์๋๋ฉด API๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ณด๋ด์ฃผ๋์ง์ ๋ฐ๋ผ MVC / API ๋ ๋ฐฉ์์ ๊ธฐ์ตํ๋ฉด ๋๋ค.
Controller -
HelloController.java
@GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name) { return "hello " + name; }
์น๋ธ๋ผ์ฐ์ ์์
localhost:8080/hello-string?name=spring
์ ์ ๋ ฅํ๋ฉดhello spring
์ด ๋์จ๋ค.@ResponseBody
: HTTP์ Body๋ถ์ ํด๋น ๋ฐ์ดํฐ(๋ฆฌํด๊ฐ)๋ฅผ ์ง์ ๋ฐํํ๋ค๋ ์๋ฏธ์ด๋ค.(html์
<body>
๊ฐ ์๋๋ค!)View, Model์์ด ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ๋ค.
API๋ฐฉ์์ ์ ๋ฐฉ์๋ณด๋ค ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ค.
Controller -
HelloController.java
@GetMapping("hello-api") @ResponseBody public Hello helloApi(@RequestParam("name") String name) { Hello hello = new Hello(); hello.setName(name); return hello; }
์๋์ ๋ด๋ถ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ค (Hello ๊ฐ์ฒด)
static class Hello{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
ํด๋น ํด๋์ค์์ Alt + Insert - Generate - Getter and Setter๋ฅผ ๋๋ฌ ์๋์ผ๋ก ๋ง๋ค ์ ์๋ค.
get...()
: getter,set...()
: setter.์๋ฐ ๋น ํ์ค ๋๋ property๋ฐฉ์ - ํด๋์ค ๋ด์ ์ธ์คํด์ค๋ณ์๋ private๋ก ํ๊ณ , ์ ๊ทผ์ ์ํด public ๋ฉ์๋ (getter, setter)๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์.
๊ทธ๋ฆฌ๊ณ ์น๋ธ๋ผ์ฐ์ ์์
localhost:8080/hello-api?name=spring
์ ์ ๋ ฅํ๋ฉด ,{name : "spring"}
์ด ๋์จ๋ค.*JSON๋ฐฉ์ * : ํค์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค. - ์ฐพ์์ ๊ณต๋ถํ๊ธฐ!
์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก JSON๋ฐฉ์์ผ๋ก ๋ฐํํ๋๋ก ์ธํ ์ด ๋์ด ์๋ค.
xml๋ฐฉ์ : JSON ์ด์ ์ ๋ง์ด ์ฐ์๋ ๋ฐฉ์. ํ๊ทธ๋ฅผ ์ด๊ณ ๋ซ์์ผ ํ๋ฉฐ, ๋ฌด๊ฑฐ์ด ๋ฐฉ์์ด๋ผ ํ์ฌ๋ JSON๋ณด๋ค ๋ ์ฐ์ด๊ณ ์๋ค.
API๋ฐฉ์ ๊ณผ์ ์ค๋ช
์น ๋ธ๋ผ์ฐ์ ์์
localhost:8080/hello-api
์์ฒญ๋ด์ฅ ํฐ์บฃ ์๋ฒ์์
hello-api
์์ฒญ์ ์คํ๋ง ์ปจํ ์ด๋์ ์ ๋ฌํ๋ค.์คํ๋ง ์ปจํ ์ด๋๋
hello-api
๊ฐ ๋งตํ(@GetMapping("hello-api")
)๋์ด ์์ผ๋ฉด ํด๋น ๋ฉ์๋(helloApi()
)๋ฅผ ์คํํ๋ค.์ด ๋ ๋ฉ์๋์
@ResponseBody
์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด, HTTP์๋ต์ ํด๋น ๋ฐ์ดํฐ(๋ฆฌํด๊ฐ)์ ๊ทธ๋๋ก ๋๊ธฐ๊ณ HttpMessageConverter๊ฐ ๋์ํ๋ค.(๋ฐ๋๋ก ๋ฉ์๋์
@ResponseBody
์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด, MVC๋ฐฉ์๋๋ก viewResolver๊ฐ ๋์ํ๋ค.)์ด ๋ ํด๋น ๋ฉ์๋์ ๋ฆฌํด๊ฐ์ด ๊ฐ์ฒด์ด๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก JSONํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด HTTP์๋ต์ ๋ฐํํ๋ค.
return: hello(name:spring)
๋ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ HttpMessageConverter ๊ฐ ๋์ํ๋ค.
๋ฐ์ ๊ฐ์ฒด๊ฐ ๋จ์ ๋ฌธ์(String) ๋ผ๋ฉด StringConverter๊ฐ ๋์ํ๋ค.
(๊ธฐ๋ณธ ๋ฌธ์์ฒ๋ฆฌ :
StringHttpMessageConverter
)๋ฐ์ ๊ฐ์ฒด๊ฐ ์ผ๋ฐ ๊ฐ์ฒด๋ผ๋ฉด JsonConverter๊ฐ ๋์ํ๋ค - ๊ฐ์ฒด๋ฅผ ํค์ ๊ฐ์ ๊ฐ์ง๋ JSONํ์์ผ๋ก ๋ณํํ๋ค.
(๊ธฐ๋ณธ ๊ฐ์ฒด์ฒ๋ฆฌ :
MappingJackson2HttpMessageConverter
)byte์ฒ๋ฆฌ ๋ฑ ๊ธฐํ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ ๋ฑ๋ก๋์ด ์์.
๋ณํ๋ ๋ด์ฉ์ ์น๋ธ๋ผ์ฐ์ ์ ๋ฐํํ๋ค.
์ฐธ๊ณ : ํด๋ผ์ด์ธํธ์ HTTP Accept ํค๋์, ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํํ์ ์ ๋ณด - ๋์ ์กฐํฉํด์ HttpMessageConverter๊ฐ ์ ํ๋๋ค.
์ ๋ฆฌ : ์คํ๋ง ์น ๊ฐ๋ฐ - ์ ์ ์ปจํ ์ธ , MVC์ ํ ํ๋ฆฟ์์ง, API ๋น๊ต
- ์ ์ ์ปจํ
์ธ
- ๊ทธ๋ฅ ํ์ผ์ ๊ทธ๋๋ก ๋ด๋ ค์ค๋ค.
- MVC์ ํ
ํ๋ฆฟ์์ง
- ํ ํ๋ฆฟ์ ๋ชจ๋ธ/๋ทฐ/์ปจํธ๋กค๋ฌ๋ก ์ชผ๊ฐ๊ณ , ๋ทฐ(html)๋ฅผ ํ ํ๋ฆฟ์์ง์ผ๋ก ํ์ํ ๋งํผ ๋ณํ(๋ ๋๋ง)ํ ๋ค์, ๋ณํ๋ html์ ํด๋ผ์ด์ธํธ์ ๋ฐํํ๋ค.
- API
- ์ฃผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ฐ, HttpMessageConverter๋ฅผ ํตํด JSONํ์์ผ๋ก ๋ณํํ ๋ค์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก HTTP Response์ ๋ฃ์ด ๋ฐํํด ์ค๋ค.