Coding Planet
[์คํ๋ง ์ ๋ฌธ] ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด- ์ ์ ์ปจํ ์ธ , MVC2 ํจํด๊ณผ ํ ํ๋ฆฟ ์์ง, API ๋ณธ๋ฌธ
[์คํ๋ง ์ ๋ฌธ] ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด- ์ ์ ์ปจํ ์ธ , MVC2 ํจํด๊ณผ ํ ํ๋ฆฟ ์์ง, API
jhj.sharon 2023. 7. 28. 00:00[ ์ ์ ์ปจํ ์ธ ]
์คํ๋ง(Spring)์์ ์ ์ ์ปจํ
์ธ (static content)๋, ๋์ ์ผ๋ก ์์ฑ๋์ง ์๊ณ ๊ณ ์ ๋ ํ์ผ๋ก์ ์๋ฒ์์ ๊ทธ๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋๋ ์น ๋ฆฌ์์ค๋ฅผ ๋งํฉ๋๋ค. ์ด๋ฌํ ์ ์ ์ปจํ
์ธ ๋ ๋ณดํต HTML, CSS, JavaScript, ์ด๋ฏธ์ง ํ์ผ ๋ฑ์ด ์์ต๋๋ค.
์ ์ ์ปจํ
์ธ ๋ ์๋ฒ ์ธก์์ ๋ฐ๋ก ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์ผ๋ฏ๋ก ์น ์๋ฒ(์: Apache, Nginx)๋ฅผ ํตํด ์ง์ ์ ๊ณต๋ ์ ์์ต๋๋ค. ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์ ์ปจํ
์ธ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์คํ๋ง์ ๋ด์ฅ ์น ์๋ฒ(์: Tomcat, Jetty)๋ฅผ ํตํด ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ ์๋ ์์ต๋๋ค.
์คํ๋ง์์ ์ ์ ์ปจํ
์ธ ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ์ ํด๋น ํ์ผ๋ค์ ์ ์ฅํ๋ฉด ๋ฉ๋๋ค. ์คํ๋ง ๋ถํธ(Spring Boot)์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก `src/main/resources/static` ๋๋ ํ ๋ฆฌ๊ฐ ์ ์ ์ปจํ
์ธ ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋๋ ํ ๋ฆฌ๋ก ์ง์ ๋์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์น ์ ํ๋ฆฌ์ผ์ด์
์ `index.html`, `style.css`, `logo.png`์ ๊ฐ์ ์ ์ ํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค. ์ด๋ฌํ ํ์ผ๋ค์ ์ ์ ์ปจํ
์ธ ๋ก ๋ถ๋ฅ๋๋ฉฐ, ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ์ ํด๋น ํ์ผ๋ค์ ์์น์ํค๋ฉด ์คํ๋ง์ด ์๋์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํฉ๋๋ค.
์ ์ ์ปจํ
์ธ ๋ ์ฃผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์ UI๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด์๋ ์๋ฒ ์ธก ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
[ MVC2 ํจํด๊ณผ ํ ํ๋ฆฟ ์์ง ]
- MVC(Mode-View-Controller) ํจํด์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ์กฐ์งํํ๋ ๋์์ธ ํจํด์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ Model, View, Controller ์ธ ๊ฐ์ง ์์๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ๋ชจ๋ธ(Model)์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๊ณ , ๋ทฐ(View)๋ UI๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ปจํธ๋กค๋ฌ(Controller)๋ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- ํ ํ๋ฆฟ ์์ง์ ๋ทฐ๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ๋ก, ๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ ํ๋ฆฟ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ์ฌ ์ค์ HTML ํ์ด์ง๋ฅผ ์์ฑํฉ๋๋ค. ์ฆ ์๋ฒ์์ ํ์ด์ง์ ๋๋๋ง์ ์ผ๋ถ ํ๊ฒ ๋ฉ๋๋ค.
- JSP, Thymeleaf, Freemarker, Velocity ๋ฑ์ด ๋ํ์ ์ธ ํ ํ๋ฆฟ ์์ง์ ์์ ๋๋ค.
๐ MVC(Model View Controller) ํจํด
- Model: ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ์ญํ , ํน์ DB์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถ๋ ฅํ๋ ๊ฐ์ฒด๋ก ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์ํ๋ ๋ก์ง์ ์๋ฏธํ๋ค.
- View: ์ฌ์ฉ์๊ฐ ๋ณด๊ฒ๋๋ ํ๋ฉด, ๋ฐ์ดํฐ์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ด๋นํ๋ค.
- Controller: ์ฌ์ฉ์์ ์ ๋ ฅ์ฒ๋ฆฌ์ ํ๋ฆ ์ ์ด๋ฅผ ๋ด๋นํ๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ ํ ์๋ต ํ๋ฉด์ ์ง์ ํ๋ค.
[ API(Application Programming Interface) ]
- API๋ ๋ค๋ฅธ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๊ท์น๋ค์ ์งํฉ์ ๋๋ค.
- ์น ๊ฐ๋ฐ์์ API๋ ์น ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋ํ๋ด๋ฉฐ, ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ์ฃผ๋ก RESTful API๊ฐ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, JSON, XML ๋ฑ์ ๋ฐ์ดํฐ ํ์์ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
- ์คํ๋ง์์๋ ์ฃผ๋ก ๊ฐ์ฒด๋ฐํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๋๋ถ๋ถ JSON์ผ๋ก ๋ณํ๋๋ฉฐ HTTP์ BODY์ ์ง์ ์ฃผ์ ๋ฉ๋๋ค.
- ResponseBody๋ HTTP์ BODY์ ๋ด์ฉ์ ์ง์ ๋ฐํํฉ๋๋ค.
- 'viewResolver' ๋์ ์ 'HttpMessageConverter'๊ฐ ๋์ํฉ๋๋ค.
- ๊ธฐ๋ณธ๋ฌธ์์ฒ๋ฆฌ : StringHttpMessageConverter
- ๊ธฐ๋ณธ๊ฐ์ฒด์ฒ๋ฆฌ : MappingJacson2HttpMessageConverter
- byte ๋ฑ ๊ธฐํ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ฑ๋ก๋์ด ์์ต๋๋ค.
- ์ฐธ๊ณ ๋ก ํด๋ผ์ด์ธํธ์ HTTP Accept ํค๋์ ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํ ํ์ ์ ๋ณด, ๋์ ์กฐํฉํด์ 'HttpMessageConverter'๊ฐ ์ ํ๋ฉ๋๋ค.
๊ด๊ณ ์ธก๋ฉด์์, MVC ํจํด๊ณผ ํ ํ๋ฆฟ ์์ง์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ์ ๋์ ์ปจํ ์ธ ์์ฑ์ ๊ด๋ จ๋ ๋ถ๋ถ์ ๋ด๋นํ๊ณ , API๋ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ญํ ์ ์ํํ๋ฉฐ, ํจ๊ป ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ MVC ํจํด๊ณผ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ์์ฑํ๊ณ , RESTful API๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ํต์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
'๐ฑSPRING' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring boot and Maven / Whis is Maven? (0) | 2023.08.17 |
---|---|
[Spring Boot, ์ธํ ๋ฆฌ์ ์ด] ๋ก๊ทธ ํ๊ธ ๊นจ์ง (0) | 2023.08.09 |
๋ก๊ทธ ๋ ๋ฒจ(Log level)์ด๋? ๋ก๊ทธ๋ ๋ฒจ ์ค์ ํ๊ธฐ (0) | 2023.05.18 |
๋ฉํฐํํธ(Multipart)๋? Multipart ์ ์ก๊ณผ MultipartResolver ๋ฅผ ํตํ ์์ฒญ ์ฒ๋ฆฌ (0) | 2023.05.18 |
Handler Mapping๊ณผ Request Mapping์ด๋? (0) | 2023.05.18 |