์๋ก
์ง๋ ๊ธ์์ Springboot์ ๋์ ์๋ฆฌ์ ๋ํด ์ดํด๋ณด์๋ค. ์ด๋ฒ ๊ธ์์๋ ํด๋น ๋์์๋ฆฌ์์ ํต์ฌ์ด ๋๋ DispatcherServlet์ ๋ํด ์ค๋ช ํ๊ณ ์ ํ๋ค.
DispatcherServlet
DispatcherServlet์ Spring MVC์์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ์ญํ ์ ์ํํ๋ ํต์ฌ ์๋ธ๋ฆฟ์ด๋ค.
HTTP ์์ฒญ์ ๋ฐ์ ์ ์ ํ ์ปจํธ๋กค๋ฌ๋ก ์ ๋ฌํ๊ณ , ์๋ต๊น์ง ์ฒ๋ฆฌํ๋ ์์ฒญ-์๋ต ํ๋ฆ์ ์ค์ฌ ํ๋ธ์ด๋ค.
DispatcherServlet ์ ์
- javax.servlet.http.HttpServlet์ ์์ํ ์๋ธ๋ฆฟ์ผ๋ก,
- ๋ชจ๋ HTTP ์์ฒญ์ ๋ฐ์ Spring ๋ด๋ถ ์ปดํฌ๋ํธ์ ์์ํ๊ณ , ์ต์ข ์๋ต๊น์ง ์ฑ ์์ง๋ค.
- web.xml ๋๋ Spring Boot์์๋ ์๋ ์ค์ ์ ํตํด ๋ฑ๋ก๋๋ค.
DispatcherServlet์ ํ์ ๋ฐฐ๊ฒฝ
Spring MVC๋ Front Controller ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ,
๋ชจ๋ ์์ฒญ์ ๋จ์ผ ์ง์
์ ์์ ๋ฐ์ ์ผ๊ด์ฑ ์๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด DispatcherServlet์ด ๋์
๋์๋ค.
DispatcherServlet์ ๋ฐ๋ก ์ด Front Controller ํจํด์ ๊ตฌํํ ํด๋์ค์ด๋ฉฐ, ์คํ๋ง MVC ์ํคํ ์ฒ์ ํต์ฌ ์ญํ ์ ๋ด๋นํ๋ค.
์ฃผ์ ํน์ง
- HttpServlet์ ์์๋ฐ๋ ์๋ธ๋ฆฟ ํด๋์ค
- ํ์ค ์๋ธ๋ฆฟ ์ปจํ ์ด๋(Tomcat, Jetty ๋ฑ) ์์์ ๋์
- web.xml์ ๋ช ์์ ์ผ๋ก ๋ฑ๋กํ๊ฑฐ๋, @SpringBootApplication ์ด๋ ธํ ์ด์ ์ ํตํด ์๋์ผ๋ก ๋ฑ๋ก
- ํด๋ผ์ด์ธํธ์ ์์ฒญ ํ๋ฆ์ ์ ์ดํ๋ ์ค์ ํ๋ธ ์ญํ ์ ์ํ
- ๋ค์ํ ์ปดํฌ๋ํธ๋ค๊ณผ ๊ธด๋ฐํ๊ฒ ํ๋ ฅํ๋ฉด์ ์์ฒญ์ ์ฒ๋ฆฌ -> Spring MVC์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ธฐ๋ฐ
- HandlerMapping: ์์ฒญ URL์ ๋งค์นญ๋๋ ์ด๋ค ์ปจํธ๋กค๋ฌ๊ฐ ์ด ์์ฒญ์ ์ฒ๋ฆฌํ ์ง ์ฐพ์๋ด๋ ์ญํ (@RequestMapping ์ด๋ ธํ ์ด์ ๊ฐ์ ์ ๋ณด๋ฅผ ํ์ฉ)
- HandlerAdapter: HandlerMapping์ด ์ฐพ์๋ธ ์ปจํธ๋กค๋ฌ๋ฅผ ์ค์ ๋ก ์คํํ ์ ์๋๋ก ์ค๊ฐ์์ ์ด๋ํ (์ ์)
- ViewResolver: ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐํํ ๋ทฐ ์ด๋ฆ(๋ ผ๋ฆฌ์ ์ด๋ฆ)์ ์ค์ ํด๋ผ์ด์ธํธ์ ์๋ตํ ์ ์๋ View ๊ฐ์ฒด(๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค)๋ก ๋ณํ(ex: "hello"๋ผ๋ ๋ทฐ๋ฅผ "/WEB-INF/views/hello.jsp"์ ๊ฐ์ ์ค์ JSP ํ์ผ๋ก ๋งคํ)
- ExceptionResolver: ์์ฒญ ์ฒ๋ฆฌ ์ค์ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ ํ ์๋ฌ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฑฐ๋ JSON ํํ๋ก ์๋ฌ ์๋ต์ ๋ฐํํ๋ ๋ก์ง์ ๊ฒฐ์
์ฅ์ ๊ณผ ๋จ์
์ฅ์
- ์์ฒญ-์๋ต ํ๋ฆ์ ์ผ๊ด์ฑ ์ ๊ณต
- ๋ค์ํ ์ปดํฌ๋ํธ๋ฅผ ์ ์ฐํ๊ฒ ํ์ฅ ๊ฐ๋ฅ(์ปดํฌ๋ํธ๋ค์ ์ธํฐํ์ด์ค ๊ธฐ๋ฐ)
- JSP, Thymeleaf, FreeMarker ๊ฐ์ ๋ค์ํ ํ ํ๋ฆฟ ์์ง๋ฟ๋ง ์๋๋ผ, REST API๋ฅผ ์ํ JSON/XML ์๋ต ๋ฑ ๋ค์ํ ๋ทฐ ๋ฐ ์๋ต ํ์ ์ฐ๋ ๊ฐ๋ฅ
- Annotation ๊ธฐ๋ฐ ์ ์ธ์ ๋งคํ ์ง์
๋จ์
- ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ์ฒ์์ ์ดํดํ๊ธฐ ์ด๋ ต๋ค
- DispatcherServlet์ด ๋ชจ๋ ํ๋ฆ์ ์ฑ ์์ ธ์ SRP ์๋ฐฐ ๊ฐ๋ฅ
- DispatcherServlet์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ธ๋ฆฟ API์ ๋๊ธฐ ๋ธ๋กํน(Blocking) I/O ๋ชจ๋ธ์ ๊ธฐ๋ฐ ๋์
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Spring WebFlux์ ๊ฐ์ ๋ฆฌ์กํฐ๋ธ(Reactive) ๋ฐ ๋น๋๊ธฐ ๋ ผ๋ธ๋กํน(Non-blocking) I/O ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ์ํคํ ์ฒ์๋ ๊ทผ๋ณธ์ ์ธ ๋์ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์
'Springboot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Spring MVC: HandlerAdapter (1) | 2025.06.01 |
---|---|
[Spring] Spring MVC: HandlerMapping (0) | 2025.05.31 |
[Spring] Spring MVC (0) | 2025.05.29 |
[Spring] ์๋ธ๋ฆฟ๊ณผ ํฐ์บฃ์ ๋ด๋ถ ๊ตฌ์กฐ (1) | 2025.05.17 |
[Springboot] Springboot์ ๋ด๋ถ ์๋ ์๋ฆฌ(With Log) (0) | 2025.05.17 |