# Spring MVC๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ ์
by JiwonDevSpring MVC๋ ์๋ฐ ๋ฐฑ์๋ ์ค๋ฌด์ ํ์ํ ๊ธฐ์ ๋ค์ ๊ฑฐ์ ๋ค ์ ๊ณตํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ๊ทธ๋งํผ ๋ฐฉ๋ํ์ง๋ง, ๋ฐ๋๋ก ์ด ์๋ง์ ๊ธฐ๋ฅ๋ค์ ๋ท๋ฐ์นจํ๋ ์คํ๋ง MVC๊ฐ ๊ฐ์ง ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ํฐ ๋ณํ๊ฐ ์๋ค. ์ด ๊ธ์์๋ ์คํ๋ง MVC์ ๋ผ๋์ ๋ํด ๋ค๋ฃจ๊ณ ์ํ๋ค.
* ํด๋น ๊ธ์ https://www.inflearn.com/course/์คํ๋ง-mvc-1 ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ง๋ ์ ๋ฆฌ๊ธ์ ๋๋ค.
# ์๋ ๋ก ๋์๊ฐ์
์คํ๋งMVC๋ ์๋นํ ์ถ์ํ๋ ํ๋ ์์ํฌ์ด๋ค. MVC ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์๊ธฐ ์ํด์๋ ์น์๋ฒ์ ๋์๊ณผ์ ๊ณผ ์๋ฐ์ ์น ๊ธฐ๋ฐ๊ธฐ์ ์ธ ์๋ธ๋ฆฟ, JSP๋ฅผ ์๋ฉด ๋์์ด ๋ง์ด ๋๋ค. ๊ฒฐ๊ตญ ์คํ๋ง๋ ๋ด๋ถ์ ์ผ๋ก๋ ์๋ฐ์ ์น ๊ธฐ์ ๋ก ๋์๊ฐ๋ ํ๋ ์์ํฌ๋๊น.
# ์ง๊ธ์ HTTP์ ์๋
๋คํธ์ํฌ์์ ํต์ ์ ํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง, ํ๋์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ์น์ ์ํด ์ค๊ณ๋ HTTP์ด๋ค. ํ์ง๋ง ์ง๊ธ์ ์น์์ ์ฌ์ฉ๋๋ [HTML, ์ด๋ฏธ์ง, ํ์ผ]๋ฟ๋ง ์๋๋ผ API(Json, XML)๋ฅผ ํตํด ์๋ฒ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋๊น์ง ํ์ํ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ , ๋ฐ์ ์ ํ๋กํ ์ฝ๋ก ์ฌ์ฉ๋๊ณ ์๋ค.
@1. ์น ์๋ฒ
ํํ ๋งํ๋ ์น ์๋ฒ๋, HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ฌ ์ ์ ๋ฆฌ์์ค(HTML, CSS, ๋ฆฌ์์ค)๋ฅผ ์ ๊ณตํด์ฃผ๋ ์๋ฒ๋ฅผ ์๋ฏธํ๋ค.
@2. WAS (Web App Server)
์น ์๋ฒ๋ฅผ ํฌํจํ๋ ๊ธฐ๋ฅ์ผ๋ก ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํ์ฌ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์๋ ์๋ฒ๋ฅผ ์๋ฏธํ๋ค. ์ฝ๊ฒ ๋งํด Java, Python ๊ฐ์ ์ธ์ด๋ก ๋์ ์ธ HTML์ ๋ง๋ค๊ฑฐ๋ API๋ฅผ ํตํด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ์ฌ ํ๋ก ํธ์์ ๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ๋ง๋ ๋ค. ์ต๊ทผ์๋ ์น์๋ฒ์ WAS๋ฅผ ๊ตฌ๋ถ์ง๊ธฐ์๋ ์ ๋งคํ๊ธด ํ๋ค. WAS์ธ๋ฐ ์๋ธ๋ฆฟ ์์ด ์๋ฐ์ฝ๋๋ฅผ ์คํํ๋ ํจ์ํ ํ๋ ์์ํฌ๋ ์๋ค. ์๋๋ฉด ์ ์ ์ธ ๋ฆฌ์์ค๋ฅผ ์บ์ํ์ฌ ์ ๊ณตํ๋ CDN ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ๋ ์๊ณ ์์ฆ์ ์น ์๋ฒ ์์ฒด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ AWS EC2๊ฐ์ ํด๋ผ์ฐ๋ ์๋น์ค์ ์ฑ์ ๋ฑ๋กํด Server-lessํ ๊ฐ๋ฐ์ ํ๋ ๊ฒฝ์ฐ๋ ๋ง๋ค.
@3. ์น ์์คํ ์ ๊ตฌ์ฑ
์๋ฒ๋ฅผ WAS ํ๋๋ง ๋๊ณ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ๋จ์ ์์ฒญ๋ง ํ๋ฉด๋๋ ์ ์ ์ธ ํ์ด์ง๊น์ง WAS๋ก ์ฒ๋ฆฌ๋์ด ์ฑ๋ฅ์ด ๋ง์ด ๋จ์ด์ง๋ค. ๊ทธ๋์ ๋ณดํต์ ์น์๋ฒ์ WAS๋ฅผ ๋๋ ์ ๊ตฌ์ฑํ๊ณ ์ฌ๋ฌ๊ฐ์ WAS์ ์์ฒญํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ์ด๋ค. ๋ณดํต ์น ์๋ฒ๋ ์์ฒญ์ ๋ฐ๊ณ , ์ ์ ์ธ ํ์ด์ง๋ฅผ ๋ณด๋ด์ฃผ๋ ๊ฒ์ด ์ ๋ถ๋ผ WAS์ ๋นํด์ ํจ์ฌ ์์ ์ ์ด๋ค. ์ฆ ์ฝ๋๋ฅผ ๋ง๋ค์ผ์ด ์์ผ๋ ์๋ชป๋ ๋ก์ง์ผ๋ก ์๋ฒ๊ฐ ์ฃฝ๋ ์ผ์ ๊ฑฐ์ ์๋ค.
@4. ์๋ธ๋ฆฟ(Servlet)
์๋ฐ์ ์น ๊ธฐ๋ฐ ๊ธฐ์ ์ด๋ค. ์คํ๋ง ํ๋ ์์ํฌ๋ ์ถ์ํ ๋์์ ๋ฟ ๊ทธ ๋ด๋ถ์๋ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ๊ณ ์๋ค. ์๋ธ๋ฆฟ์ ์๋ฒ ๊ฐ๋ฐ์๊ฐ ๋งค๋ฒ ํด์ผํ๋ ์น ๋ฐ๋ณต์์ (TCP/IP์ ์ด์ฉํ ์์ผ ์ฐ๊ฒฐ, HTTP ๋ฉ์์ง ํ์ฑ, ์๋ต๋ฉ์์ง ์์ฑ..)์ ๋์ ํด์ฃผ๊ณ ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง Servlet Class๋ง ๋ง๋ค๋ฉด ๋๊ฒ ํด์ฃผ๋ ์น ๊ธฐ๋ฐ ์๋ฐ ์ธํฐํ์ด์ค์ด๋ค.
์๋ธ๋ฆฟ์ ๋ํด ์์๋ณด์
@5. SPA (Single Page App), CSR (Client Side Rendering)
์์ ์๋ ๋ธ๋ผ์ฐ์ ์ ํธํ์ฑ ๋ฌธ์ ๋ ์๊ณ , ์คํฌ๋ฆฝํธ ์ฝ๋(ex JavaSciprt)์ ๊ธฐ๋ฅ์ด ๋งค์ฐ ๊พธ์ก๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์ ๋์ ์ธ ์ฝ๋๋ฅผ ์คํํ๋ค๋ ๊ฑด ์์ํ๊ธฐ ์ด๋ ค์ ๋ค. ํ์ง๋ง ๊ตฌ๊ธ์ Chrome์ ๋ฑ์ฅ์ผ๋ก ํ์ค์ด ๋ง๋ค์ด์ง๊ธฐ ์์ํ๋ฉฐ 2015๋ ES6 ์ดํ JS์ ๊ธฐ๋ฅ์ด ๊ฐ๋ ฅํด์ง๋ฉฐ ์๋ฒ์์ HTML์ ๋งค๋ฒ ๋ณด๋ด์ฃผ๋๊ฒ ์๋๋ผ API(Json)๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด ๊ธฐ์กด์ ํ์ด์ง(HTML)๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ, ์ฆ ํด๋ผ์ด์ธํธ์์ ๋ ๋๋งํ๋ SPA๊ฐ ํฅํ๊ธฐ ์์ํ๋ค.
๋ค๋ง ํด๋ผ์ด์ธํธ๋ ํ๋ก ํธ์ ์์ญ์ด๋ฏ๋ก, ์์ฆ์ ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋๊ตฌ๋ ์์๋ง๋ณด๊ณ ๋์ด๊ฐ๋๋ก ํ์.
@ ์๋ฐ ์น ๊ธฐ์ ์ ์ญ์ฌ
2006๋ ์๋ SSH, ์คํ๋ง(Spring Core) + ์คํธ๋ฟ์ธ (MVC, Strutcs) + ํ์ด๋ฒ๋ค์ดํธ(DB, Hibernate)๊ฐ ๋์ธ์๋ค๊ณ ํ๋ค. ๋น์์๋ ์คํ๋ง์์ ์ ๊ณตํ๋ MVC๊ฐ ์๊ฐ๋ณด๋ค ๋ณ๋ก์๋๋ฐ ์ดํ 2010๋ ์ฏค @์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ค์ ์ด ๋ฑ์ฅํ๋ฉฐ Spring MVC๊ฐ ์ถ์ถ์ ๊ตญ์๋์ ์ ์ ์ ์ฐ๊ฒ๋๋ค. ์ดํ 2014๋ ์ ์๋ฒ๋ฅผ ๋ด์ฅํ ์คํ๋ง๋ถํธ๊ฐ ๋์ค๊ณ , WAR๊ฐ ์๋ JAR๋ก ์๋ฒ๊น์ง ํจ๊ป ํจํค์งํ์ฌ ๋ฐฐํฌํ๊ฒ ๋๋ฉฐ ์๋ฐ์งํ์ ์คํ๋ง์ ์ ์ง๊ฐ ๋์ฑ ๊ฒฌ๊ณ ํด์ง๊ฒ ๋์๋ค.
์ด์ ์คํ๋งCore + ์คํ๋งMVC ํ๋ ์์ํฌ + ์คํ๋ง๋ถํธ๋ก ์๋ฐ ๊ฐ๋ฐ์๋ค์ ๋๋ฌด ํธํ๊ฒ ์น์๋ฒ๋ฅผ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์๋ค.
@ ์๋ฐ์ MVC, ๋ทฐ ํ ํ๋ฆฟ ์ญ์ฌ
์คํ๋ง์์๋ ๋ณดํต Thymeleaf๋ฅผ ์ฌ์ฉํ๋ค. ์คํ๋ง ์งํ์์ ๋ฐ์ด์ฃผ๊ณ ์์ด์ ์คํ๋ง๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ ํธํ๋ค.
'๐ฑ Spring Framework > Spring MVC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Thymeleaf#2 Spring๊ณผ HTML Form ์ฒ๋ฆฌ (0) | 2021.08.28 |
---|---|
Thymeleaf#1 ๊ธฐ๋ณธ๊ธฐ๋ฅ (0) | 2021.08.28 |
#2 HTTP API ์์ฒญ ๋งคํ, ํค๋ ์กฐํ (0) | 2021.08.11 |
#1 HTTP ์์ฒญ ๋งคํ๊ณผ ๊ธฐ๋ณธ ๋ก๊น (0) | 2021.08.11 |
# HTTP ๋ฐ์ดํฐ ์ ์ก/์๋ต (0) | 2021.08.11 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev