๐ณ ์น ๊ฐ๋ฐ ๊ธฐ์ด
- ์ ์ ์ปจํ
์ธ
- ์๋ฒ์ ๊ด์ฌ์์ด ํ์ผ์ ๊ทธ๋๋ก ์น๋ธ๋ผ์ฐ์ ์ ๋ด๋ ค์ฃผ๋ ์ปจํ ์ธ
- ex) welcome page
- MVC์ ํ
ํ๋ฆฟ ์์ง
- ์๋ฒ์์ ํ๋ก๊ทธ๋๋ฐํ์ฌ ๋์ ์ผ๋ก ๋ฐ๊พธ์ด ๋ด๋ ค์ฃผ๋ ์ปจํ ์ธ
- controller, model, view๋ฑ์ ํจํด์ด ํ์
- ex) jsp, php
- API
- JSON ๋ฐ์ดํฐ ํฌ๋งท์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์
๐ณ ์ ์ ์ปจํ ์ธ
์คํ๋ง์ ์ ์ ์ปจํ ์ธ ๊ธฐ๋ฅ์ ์๋์ผ๋ก ์ ๊ณตํ๋ค → ์ํ๋ ํ์ผ์ ๋ฃ์ผ๋ฉด ๊ทธ๋๋ก ๋ฐํ์ด ๋๋ค
hello-static.html
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
์ ์ ์ปจํ
์ธ ์
๋๋ค.
</body>
</html>
![](https://blog.kakaocdn.net/dn/beGOBa/btrtmfWIola/FY0KSVfAYzfEIlRK1Jg9x0/img.png)
[๋์ ๊ณผ์ ]
- ๋ด์ฅ ํฐ์บฃ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์ ์คํ๋ง์๊ฒ ๋๊ธด๋ค
- controller ๋ด์์ hello-static์ ์ฐพ๋๋ค
- controller์ ์์ผ๋ฉด resources์์ hello-static์ ์ฐพ๋๋ค
- ์์ผ๋ฉด ๋ฐํ!
๐ณ MVC์ ํ ํ๋ฆฟ ์์ง
MVC : Model, View, Controller
- View -> ํ๋ฉด ๊ตฌ์ฑ์ ์ง์ค
- Controller, Model -> ๋น์ฆ๋์ค ๋ก์ง, ๋ด๋ถ์ ๊ธฐ๋ฅ ์ฒ๋ฆฌ
hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
- hello! empty๋ถ๋ถ์ด ‘hello’ + ${name} ๋ถ๋ถ์ผ๋ก ์นํ์ด ๋๋ค
![](https://blog.kakaocdn.net/dn/bi4TBl/btrtlq5lQw7/GrrqzhXYpJGLbf5q7naIN0/img.png)
![](https://blog.kakaocdn.net/dn/bAJvsR/btrtnEhDSK3/skQpbTAeN0JHR6Et2H96Ek/img.png)
- ${name} ↔ spring์ผ๋ก ๋ณ๊ฒฝ๋๊ณ , controller, model์๋ ๋ชจ๋ ์ ์ฉ๋๋ค
- ${name}๋ถ๋ถ์ model์์ ๊ฐ์ ๊บผ๋ด๋ ๋ถ๋ถ์ด ๋๋ ๊ฒ์ด๋ค
[๋์ ๊ณผ์ ]
- ์น๋ธ๋ผ์ฐ์ ์์ ๊ฐ์ ๋๊ธด๋ค
- ๋ด์ฅ ํฐ์บฃ์๋ฒ๋ฅผ ๋จผ์ ๊ฑฐ์น๋ค → ์ญ์ controller์์ ์ฐพ์ ํธ์ถ
- model (key = name, ๊ฐ = spring), return : hello-template๊ฐ์ ์คํ๋ง์๊ฒ ๋๊ฒจ์ค๋ค
- viewResolver๊ฐ ๋์ํ์ฌ view๋ฅผ ์ฐพ์์ฃผ๊ณ , ํ ํ๋ฆฟ ์์ง๊ณผ ์ฐ๊ฒฐ์์ผ์ค๋ค
- ํ ํ๋ฆฟ ์์ง์ด ๋ณํ์ํจ html์ ์น๋ธ๋ผ์ฐ์ ์๊ฒ ๋๊ธด๋ค
๐ณ API
JSON ๋ฐ์ดํฐ ํฌ๋งท์ผ๋ก, ๋ฆฌํด๊ฐ๋ง์ ๋ฐ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค.
- API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ง์ ๋ฆฌํดํ๋ฉด ํ๋ฉด์ ํด๋ผ์ด์ธํธ๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ์์ฆ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ์
- ์๋ฒ๋ผ๋ฆฌ ํต์ ํ ๋์๋ API๋ฐฉ์ ์ฌ์ฉ
![](https://blog.kakaocdn.net/dn/bdhbyC/btrti3bDpke/rboVeyoHglqXMAnXClKsc1/img.png)
ํ ํ๋ฆฟ ์์ง ์กฐ์๋ฐฉ์๊ณผ๋ ๋ฌ๋ฆฌ ๋ฆฌํด๊ฐ์ ์๋ ๋ฐ์ดํฐ๋ง์ ์ ๋ฌ!
์คํ๋ง์ด ๊ฐ์ฒด ๋ฆฌํด๊ฐ์ ๋์ฒํ๋ ์๋ฆฌ
![https://blog.kakaocdn.net/dn/cdpOUO/btq4c2VyCim/v1dZcTGKbptXmdiwXN6Do0/img.png](https://blog.kakaocdn.net/dn/cdpOUO/btq4c2VyCim/v1dZcTGKbptXmdiwXN6Do0/img.png)
- ํฐ์บฃ์๋ฒ๊ฐ ์คํ๋ง์ api ์ ๋ฌ
- hello ๊ฐ์ฒด๋ฅผ ๋ณด๊ณ ์กฐ๊ฑด์ ํ์ธ
- ์ญ์ controller์ ๊ฐ๋๋ฐ, @ResponseBody๊ฐ ์์ ๊ฒฝ์ฐ
- HttpMessageConverter ๋์
- ๋จ์ ๋ฌธ์ → StringConverter ๋์ (๊ธฐ๋ณธ : StringHTTPMessageConverter)
๊ฐ์ฒด → JsonConverter ๋์ (๊ธฐ๋ณธ : MappingJackson2HttpMessageConverter) - ๊ฐ์ฒด๋ฅผ JSON ์คํ์ผ๋ก ๋ณํํ์ฌ ์น๋ธ๋ผ์ฐ์ ๋ก ๋ฆฌํด
์ค๋ฌด์์ ์์ ๊ณผ์ ์ ๊ฑฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
Converter๋ ๋ฐ๊ณ ์ถ์ ํฌ๋งท๋๋ก ๋์์ํค๋ฉฐ ์ฌ์ฉํ ์ ์๋ค.
@ResponseBody๋ @RequestBody์ ํจ๊ป ์ฐ์ด๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ด๋ ธํ ์ด์ ์ด๋ค
- @RequestBody๋ฅผ ํตํด ์์ฒญ์ ๋ด๊ธด ๊ฐ์ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํ
- @ResponseBody๋ฅผ ํตํด ๋ณํ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์์ฒญ๋ body๋ด์ฉ์ผ๋ก ๋งคํํ์ฌ ํด๋ผ์ด์ธํธ๋ก ์ ์กํ๋ค
์ด ๊ณผ์ ์์ ์์ ๊ณผ์ ์ด ์งํ๋๋ ๊ฒ์ด๋ค.
์๋ฃ ์ถ์ฒ
์ธํ๋ฐ - ์คํ๋ง ์ ๋ฌธ ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ (๊น์ํ)