-
[Spring] Spring ์น ๊ฐ๋ฐ ๊ธฐ์ด๐ณDev/Dev 2022. 4. 25. 00:30
๊น์ํ ๋์ <์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ > ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด
- ์คํ๋ง์ด ์น์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์๋ ์ธ ๊ฐ์ง๊ฐ ์๋ค.
- ์ ์ ์ปจํ ์ธ : html ํ์ผ์ ๊ทธ๋๋ก ์น ๋ธ๋ผ์ฐ์ ์ ๋ด๋ ค์ค๋ค
- MVC์ ํ ํ๋ฆฟ์์ง : ํ ํ๋ฆฟ์์ง์ ํตํด ์๋ฒ์์ ๋๋๋ง ๋ html์ ์น๋ธ๋ผ์ฐ์ ์ ๋ด๋ ค์ค๋ค
- API : ๋ฐํ๋ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ json ํฌ๋ฉง์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค
์ ์ ์ปจํ ์ธ
- ์คํ๋ง ๋ถํธ๋ ์ ์ ์ปจํ ์ธ ๋ฅผ ์๋์ผ๋ก ์ ๊ณตํ๋ค.
๊ณผ์
- http://localhost:8080/hello-static.html ์์ฒญ์ด ๋ด์ฅ ํฐ์บฃ ์๋ฒ์ ๋ค์ด์ค๊ณ ์คํ๋ง์๊ฒ ์ ๋ฌ๋๋ค
- ์คํ๋ง์ ๋จผ์ Controller์ hello-static์ด ์๋์ง ์ฐพ์๋ณธ๋ค
- ์๋ค๋ฉด resources ์์์ ํด๋น ํ์ผ์ ์ฐพ์์ ๊ทธ๋๋ก ์น๋ธ๋ผ์ฐ์ ์ ๋ฐํํ๋ค
MVC์ ํ ํ๋ฆฟ ์์ง
- View์ ์ ๋ ฅ๊ฐ์ ์ฐพ์์ ๋๋๋ง ํ html์ ์น๋ธ๋ผ์ฐ์ ์ ๋๊ฒจ์ค๋ค
MVC์ Template Engine
- MVC๋ Model, View, Controller์ ์ฝ์๋ก, ์ฑ์ ๊ตฌ์ฑ ์์๋ฅผ ์ธ๊ฐ์ง๋ก ๊ตฌ๋ถํ ์ํํธ์จ์ด ๋์์ธ ํจํด์ด๋ค
- Model์ ์ฑ์ด ํฌํจํด์ผ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์ ์
- View๋ ์ฑ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ ์ ์
- Controller๋ ์ฑ์ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ๋ํ ์๋ต์ผ๋ก ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ก์ง์ ํฌํจ
- Template Engine์ ํ ํ๋ฆฟ ์์๊ณผ ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฐ๋ฅธ ์ ๋ ฅ ์์์ ํฉ์ฑํ์ฌ ๊ฒฐ๊ณผ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ SW์ด๋ค
๊ณผ์
- http://localhost:8080/hello-mvc ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ์์ ์คํ๋ง์๊ฒ ์ ๋ฌํ๋ค
- ์คํ๋ง์ helloController์ ํด๋น ์์ฒญ์ด ๋งคํ๋์ด ์์์ ํ์ธํ๊ณ , ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค
@GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model){ model.addAttribute("name", name); return "hello-template"; }
- ๋ฉ์๋์ ๋ฐํ๊ฐ(๊ด๋ จ ํ์ผ ์ด๋ฆ)๊ณผ model์ ์คํ๋ง์๊ฒ ์ ๋ฌํ๊ณ ์คํ๋ง์ viewResolver์๊ฒ ์ ๋ฌํ๋ค
- viewResolver๋ ๋ฐํ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง View๋ฅผ ์ฐพ์ ํฌํ๋ฆฟ ์์ง์ ์ฐ๊ฒฐํ๋ค
- ํด๋น ํ์ผ์ ์ฐพ์ ํ ํ๋ฆฟ ์์ง์ด ๋ ๋๋งํ ํ, ๋ณํํ html ํ์ผ์ ๋ธ๋ผ์ฐ์ ์ ๋ฐํํ๋ค
์ ์ฒด์ ์ธ ๊ณผ์ ์ ์๋์ ๊ฐ๋ค
API ๋ฐฉ์
- ์น ๋ธ๋ผ์ฐ์ (HTTP์ Body)์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ JSON ํ์์ผ๋ก ๋ฐํํ๋ค
์๋์ ๊ฐ์ด @ResponseBody๋ฅผ ๋ช ์ํ๋ฉด, viewResolver๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค
์ฆ, ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค
@GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name){ return "hello" + name; }
๊ณผ์
- http://localhost:8080/hello-api?name=sinyoung ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ์์ ์คํ๋ง์๊ฒ ์ ๋ฌํ๋ค
- ์คํ๋ง์ 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๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, HttpMessageConverter์ ๋ฐํ๊ฐ์ ์ ๋ฌํ๋ค
- HttpMessageConverter๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ํ์
์ผ๋ก ๋ณํํด ๋ธ๋ผ์ฐ์ ์ ๋ฐํํด์ค๋ค.
- StringHttpMessageConverter๋ ๋ชจ๋ ๋ฐ์ดํฐ์ String ์ฌ์ด์ ๋ณํ์ ์ง์(์์ ์์)
- MappingJacksonHttpMessageConverter๋ ๊ฐ์ฒด์ JSON ์ฌ์ด์ ๋ณํ์ ์ง์(ํ์ฌ ์์)
Reference
MVC - ์ฉ์ด ์ฌ์ | MDN
MVC (๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ) ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค, ๋ฐ์ดํฐ ๋ฐ ๋ ผ๋ฆฌ ์ ์ด๋ฅผ ๊ตฌํํ๋๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋์์ธ ํจํด์ ๋๋ค. ์ํํธ์จ์ด์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ๋ฉด์ ๊ตฌ๋ถํ๋๋ฐ ์ค์ ์ ๋๊ณ
developer.mozilla.org
[Template Engine] ํ ํ๋ฆฟ ์์ง(Template Engine)์ด๋ - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
[spring] MessageConverter
์์ ์ฐ๋ฆฌ๊ฐ HTTP ์์ฒญ์ ๋ชจ๋ธ์ ๋ฐ์ธ๋ฉํ๊ณ ํด๋ผ์ด์ธํธ์ ๋ณด๋ผ HTTP ์๋ต์ ๋ง๋ค๊ธฐ ์ํด ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ๋ ๋ฌ๋ฆฌ, HTTP ์์ฒญ ๋ณธ๋ฌธ๊ณผ HTTP ์๋ต ๋ณธ๋ฌธ์ ํต์งธ๋ก ๋ฉ์ธ์ง๋ก ๋ค๋ฃจ๋ ๋ฐฉ์์ด๋ค. ์ฃผ๋ก X
joont92.github.io
'๐ณDev > Dev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Hibernate-Spatial๋ฅผ spring.jpa.properties.hibernate.dialect๋ก ์ฐ๊ฒฐํ ๋ (+deprecated) (0) 2022.07.10 Kotlin ๊ณต์ ํ์ด์ง์ Play Example ๋ฒ์ญํ๊ธฐ (+๊ณต๋ถ์ฉ) (0) 2022.06.26 [Network] REST์ REST API (0) 2022.04.22 [Network] HTTP์ HTTPS (๋น์ฐ๊ฒฐ์ฑ๊ณผ ๋ฌด์ํ) (0) 2022.04.21 [Dev] Build ์ Gradle, Maven (0) 2022.04.15 - ์คํ๋ง์ด ์น์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์๋ ์ธ ๊ฐ์ง๊ฐ ์๋ค.