์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค.
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ ํ๋๋ก ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ ๋ค, ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฒญ์ ๋ง๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ํธ์ถํ๋ ๋ฐฉ์์ด๋ค.
๋น์ ํ์๋ฉด ์ ๊ตฌ๋ฅผ ํ๋๋ก ๋ง๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ณตํต ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๊ณตํต์ ์ผ๋ก ๊ฑฐ์ณ๊ฐ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์๋ธ๋ฆฟ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ์ปจํธ๋กค๋ฌ์์๋ ์๋ธ๋ฆฟ์ ์ด์ฉํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์๋ค.
์คํ๋ง ์น MVC ๋ํ ํด๋น ํจํด์ ์ฐจ์ฉํ์ฌ DispatcherServlet์ ๊ตฌํํ์๋ค.
v1. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ๋์
ํ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ์์ฒญ์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ์์ ์ผ์ฐจ์ ์ผ๋ก ๋ฐ๊ณ , URI๋ฅผ ์กฐํํ์ฌ ์ค์ ํธ์ถํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ๋๋ค.
์ด๋ ์์ ๊ฒฝ์ฐ 404 ์ํ ์ฝ๋๋ฅผ ๋ฐํํ๊ณ , ์ฐพ์๋ค๋ฉด ํด๋น ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์คํํ๋ค.
v2. View ๋ถ๋ฆฌ
v1์ ๊ฒฝ์ฐ ํ์ ์ปจํธ๋กค๋ฌ์ ํธ์ถ์ ์ํด ๋ทฐ๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ ํด๋น ๋ถ๋ถ์์ ์ค๋ณต์ด ์กด์ฌํ๋ค.
๋ฐ๋ผ์ ๋ณ๋๋ก ๋ทฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด์ธ MyView๋ฅผ ํตํด jsp๋ฅผ ํฌ์๋ฉํ๋๋ก ๊ฐ์ ํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ทฐ๋ฅผ ํธ์ถํ๊ธฐ ์ํด RequestDispatcher์ forward()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ทฐ ์ด๋ฆ์ ๋ด์ MyView ๊ฐ์ฒด๋ง ๋ฐํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์, ์ค๋ณต์ ์ ๊ฑฐํ๋ฉด์ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
v3. Model ์ถ๊ฐ
1. ์๋ธ๋ฆฟ ์ข ์์ฑ ์ ๊ฑฐ
v2์ ๊ฒฝ์ฐ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ HttpServletRequest, HttpServletResponse์ ๊ฐ์ฒด๋ฅผ ๋๊ธฐ๋๋ก ํ์๋ค. ๊ทธ ์ด์ ๋ ํ์ ์ปจํธ๋กค๋ฌ์์ ์์ฒญ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ์ป๊ฑฐ๋ ์ ๋ณด๋ฅผ ๋ด๋ ๊ณผ์ ์์ ํด๋น ๊ฐ์ฒด๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ๋๊ธฐ๋ ๋์ , ๋ฏธ๋ฆฌ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋๋ก ๊ฐ์ ํ ์ ์๋ค. (ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ด์ Map ์์ฑ)
์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ํ๋ผ๋ฏธํฐ๋ก ์๋ฐ์ Map์ ๋๊ฒจ ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ๋งต์ ๋ด๊ธด ๊ฐ์ ํ์ธํ๋๋ก ํ๊ณ , ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํด์๋ ๋ณ๋์ ๋ชจ๋ธ ๊ฐ์ฒด(ModelView; ๋ทฐ์ ์ด๋ฆ๊ณผ ๋ทฐ๋ฅผ ๋ ๋๋ง ํ ๋ ํ์ํ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์์)๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋๋ก ํ๋ค๋ฉด ์ปจํธ๋กค๋ฌ ์ ์ฅ์์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ง ์๊ณ ๋ ๋์ํ ์ ์๋ค.
2. ๋ทฐ ์ด๋ฆ ์ข ์์ฑ ์ ๊ฑฐ
์ปจํธ๋กค๋ฌ์์ ๋ทฐ ์ด๋ฆ์ ์ง์ ํ ๋ ์์น๋ฅผ ํฌํจ์ํค๊ธฐ ๋๋ฌธ์ ์ด๋ฆ์๋ ์ค๋ณต์ด ๋ฐ์ํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ปจํธ๋กค๋ฌ๋ ๋ทฐ์ ๋
ผ๋ฆฌ ์ด๋ฆ์ ๋ฐํํ๊ณ , ์ค์ ๋ฌผ๋ฆฌ ์์น์ ์ด๋ฆ์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์ฒ๋ฆฌํ๋๋ก ๋จ์ํํ ์ ์๋ค. (e.g. /WEB-INF/views/new-form.jsp
→ new-form
)
์ด๋ ๊ฒ ํ๋ฉด ๋ทฐ์ ๋๋ ํฐ๋ฆฌ ์์น๊ฐ ๋ฐ๋์ด๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ง ๊ณ ์น๋ฉด ๋๊ณ , ์ด๋ฆ์ ์ค๋ณต๋ ์ ๊ฑฐ๋๋ ์ด์ ์ ์ป์ ์ ์๋ค.
์ด๋ฅผ ์ํด viewResolver๋ฅผ ๋์
ํ์๋๋ฐ, ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐํํ ๋
ผ๋ฆฌ ๋ทฐ ์ด๋ฆ์ ์ค์ ๋ฌผ๋ฆฌ ๋ทฐ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝํ๊ณ , ํด๋น ์ ๋ณด๋ฅผ ๋ด์ MyView ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ์ญํ ์ ๋ด๋นํ๋ค. ๋ํ v2์์๋ ํ์ ์ปจํธ๋กค๋ฌ์์ ์๋ธ๋ฆฟ ๊ฐ์ฒด์ ์ง์ ์ ๋ณด๋ฅผ ๋ด์๋ค๋ฉด v3์์๋ ๋ณ๋์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์, ์๋ธ๋ฆฟ ๊ฐ์ฒด์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ฃผ์ด์ผ ํ๋ค.(jsp๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ HttpServletRequest์ request()
๋ฉ์๋๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ) ํด๋น ์์
์ญ์ ๋ทฐ ๋ฆฌ์กธ๋ฒ์์ ์ฒ๋ฆฌํ๋ค.
v4. ๋จ์ํ ์ปจํธ๋กค๋ฌ
v3์ ๊ฒฝ์ฐ ์ข ์์ฑ ๋ฐ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ ์ด๋ ์ ๋ ์ ์ค๊ณ๋ ๊ฒ์ด์ง๋ง, ์ค์ ์ปจํธ๋กค๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค๊ณ ์๊ฐํด ๋ณด์์ ๋ ํญ์ ModelView ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ ๋ถ๋ถ์์ ๋ฒ๊ฑฐ๋ก์ด ๋๋์ด ์๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ ์ ์งํ๋ ๊ตฌํ์ ์ ์ฅ์์ ํธ๋ฆฌํ๊ฒ ๊ฐ์ ํด ๋ณด๋ ๋ฒ์ ์ด๋ค.
์ฐจ์ด์ ์ด ์๋ค๋ฉด ํ์ ์ปจํธ๋กค๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ๋ ํ๋ผ๋ฏธํฐ๋ก Map<String, Object> ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ์ปจํธ๋กค๋ฌ ๋ด์์ ์ง์ ๋ชจ๋ธ ์ด๋ฆ๊ณผ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๋๋ก ํ๊ณ , ๋ฐํ ํ์ ์ผ๋ก ModelView๋ฅผ ๋๋ ๋์ String์ผ๋ก ๋ทฐ์ ๋ ผ๋ฆฌ ์ด๋ฆ๋ง์ ๋ฐํํจ์ผ๋ก์จ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ๋ทฐ์ ์ด๋ฆ์ ํตํด MyView ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํธ์ถํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
v5. ์ ์ฐํ ์ปจํธ๋กค๋ฌ
์ง๊ธ๊น์ง ๊ฐ๋ฐํ ์ปจํธ๋กค๋ฌ๋ ํ ๊ฐ์ง ๋ฐฉ์์ ์ปจํธ๋กค๋ฌ ์ธํฐํ์ด์ค๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์, ์๋ก ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ๋ฅผ ์ด์ฉํ ์๊ฐ ์์๋ค.
๋งํ์๋ฉด ์๋ก ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ ์ธํฐํ์ด์ค ๊ฐ ํธํ์ด ๋ถ๊ฐ๋ฅํ ์ํ์๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ด ๋ฐ๋ก ์ด๋ํฐ ํจํด์ธ๋ฐ, ํด๋น ํจํด์ ์ ์ฉํจ์ผ๋ก์จ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ๋ค์ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
ํธ๋ค๋ฌ ์ด๋ํฐ
๋ง ๊ทธ๋๋ก ์ค๊ฐ์์ ์ด๋ํฐ ์ญํ ์ ํ๋ ๊ฒ์ผ๋ก, ๋ค์ํ ์ข ๋ฅ์ ์ปจํธ๋กค๋ฌ ํธ์ถ์ ๊ฐ๋ฅ์ผ ํด ์ค๋ค.
์ด๋ํฐ์ ์ธํฐํ์ด์ค์๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค.
1. ์ด๋ํฐ๊ฐ ํด๋น ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ๋จ
2. ์ด๋ํฐ์ ์ํด ํธ์ถ๋ ํ์ ์ปจํธ๋กค๋ฌ์ ํด๋นํ๋ ModelView ๊ฐ์ฒด๋ฅผ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ ๋ฐํ
ํธ๋ค๋ฌ
์ด๋ํฐ๊ฐ ์กด์ฌํจ์ผ๋ก์จ ์ปจํธ๋กค๋ฌ ๊ฐ๋ ๋ฟ ์๋๋ผ ์ ํฉํ ์ด๋ํฐ๊ฐ ์๋ ๊ฒ์ด๋ผ๋ฉด ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ์ ์ด๋ฆ์ ๋ ๋์ ๋ฒ์์ธ ํธ๋ค๋ฌ๋ก ๋ณ๊ฒฝํ์๋ค. ํน์ ํ์ ๋ฟ๋ง ์๋๋ผ ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ ๋ ธํ ์ด์ ์ ์ง์ํ๋ ์ด๋ํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ํ์ฅ์ฑ ์๋ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด์ ์๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ฅผ ๋ด๊ธฐ ์ํด Map<String, Controllerv4> ํ์๊ณผ ๊ฐ์ด ์ ํด์ง ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ์ ์ธํ๋ค๋ฉด, ์ด์ ๋ Map<String, Object>๋ก ์ ์ธํ์ฌ ์ด๋ค ํ์ ์ด๋ ๋ฐ์ ์ ์๋ค. ๊ทธ ๋์ ํด๋น ํ์ ์ ์ ํฉํ ํธ๋ค๋ฌ ์ด๋ํฐ ์ ๋ฌด๋ฅผ ํ๋จํด์ผ ํ๊ธฐ ๋๋ฌธ์, ์ด๋ํฐ๋ฅผ ๋ด์๋๋ ๋ฆฌ์คํธ๋ ํจ๊ป ์ ์ธํ๊ฒ ๋๋ค.
'Language & Framework > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง MVC] ๊ธฐ๋ณธ ๊ธฐ๋ฅ (0) | 2023.02.05 |
---|---|
[์คํ๋ง MVC] ์คํ๋ง MVC ๊ตฌ์กฐ ์ดํด (0) | 2023.02.03 |
[์คํ๋ง MVC] ์๋ธ๋ฆฟ/JSP/MVC ํจํด (0) | 2023.01.23 |
[์คํ๋ง MVC] ์๋ธ๋ฆฟ (0) | 2023.01.21 |
[์คํ๋ง MVC] ์น ์ ํ๋ฆฌ์ผ์ด์ ์ดํด (0) | 2023.01.21 |