2023.02.04 - [π’ Study/Spring boot] - 1. Spring Web MVC(1) - Servlet
MVC ν¨ν΄
- Model, View, Controller μν μ λ°λΌ ν¬κ² μΈ κ°μ§λ‘ λΆλ₯νκ³ κ° μν μ μννλλ‘ ν¨ν΄μΌλ‘ λ§λ κ².
Controller
μ¬μ©μμ μμ²μ λ°μ μ΄λ»κ² μ²λ¦¬ν μ§ κ²°μ νλ μν λ‘ μμ²μ λΆμνλ μν μ λ΄λΉνλ€.
λ°μ΄ν°λ₯Ό μ²λ¦¬νλλ° νμν HTTP 쿼리μ€νΈλ§μ΄λ ν€λ, λ°λ κ°μ μ 보λ₯Ό HTTPλ©μμ§μμ νμ±νμ¬ μΆμΆνλ€.
μ μ ν Modelμ΄λ μμ²μ μ ν©ν Viewμ μ λ¬νλ μν μ νλ€.
Model
컨νΈλ‘€λ¬μμ μ λ¬λ°μ μ¬μ©μ μμ² λ°μ΄ν°λ₯Ό κ°κ³΅νκ±°λ λ°μ΄ν° μ μ₯μμμ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ μμ μ λ΄λΉ.
μΉ μ ν리μΌμ΄μ μ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νλ μν μ νλ€.
View
μ¬μ©μμκ² μλ΅νλ νλ©΄μ λ΄λΉνλ€.
μΉ μ ν리μΌμ΄μ μ μ§μ νλ©΄μ 보μ¬μ£Όλ μν μ νμ§ μκ³ μ¬μ©μκ° μμ²ν Acceptν€λμ μ ν©ν MIMEλ¬Έμλ₯Ό μ λ¬νλ€.
κ·Έλ¬λ©΄ ν΄λΌμ΄μΈνΈλ MIMEλ¬Έμλ₯Ό νμ±νμ¬ μ ν©ν νλ©΄μΌλ‘ λ λλ§νλ€. κ·Έλ¬λ―λ‘ Viewλ μ¬μ©μμκ² μλ΅νλ λ©μμ§ ν¬λ§·μ κ²°μ νκ±°λ Model λ°μ΄ν°λ₯Ό HTML, XML, JSON λ©μμ§λ‘ λ§λ λ€.
DispatcherServlet
DispatcherServlet μ νλ‘ νΈ μ»¨νΈλ‘€λ¬ ν¨ν΄μΌλ‘ λμμΈ λμ΄μλ€.
νλ‘ νΈ μ»¨νΈλ‘€λ¬λ λͺ¨λ μ¬μ©μμ μμ²μ λ°κ³ μ΄ μμ²μ λΆμν ν μ μ ν μ»΄ν¬λνΈλ‘ μ λ¬νλ μ€μΌμ€νΈλ μ΄μ μν μ νλ€. λν μΉ μ ν리μΌμ΄μ μ μ 체 νλ¦μ μ‘°μ νλ μν λ νλ€.
Handler Mapping
- o.s.web.servlet.HandlerMapping μΈν°νμ΄μ€λ₯Ό ꡬνν μ»΄ν¬λνΈλ€.
- μ¬μ©μμ HTTP μμ² λ©μμ§λ₯Ό μΆμνν HttpServletRequest κ°μ²΄λ₯Ό λ°μμ¬μ©μ μμ²μ μ²λ¦¬νλ νΈλ€λ¬ κ°μ²΄λ₯Ό μ‘°νν μ μλ getHandler() λ©μλλ₯Ό μ 곡νλ€.
- μ€νλ§ λΆνΈ νλ μμν¬μ κΈ°λ³Έ μ€μ μΌλ‘ μ€νμ μ λν μ΄μ κΈ°λ°μΌλ‘ λμνλo.s.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping ꡬνμ²΄κ° μ€νλλ€.
- μ΄ κ΅¬ν체λ @RequestMapping μ λν μ΄μ μ μμ±μ 보λ₯Ό λ‘λ©ν μ μλ€.
HandlerAdapter
- o.s.web.servlet.HandlerAdapter μΈν°νμ΄μ€λ₯Ό ꡬνν μ»΄ν¬λνΈλ€.
- μ¬μ©μμ μμ²κ³Ό μλ΅μ μΆμνν HttpServletRequest, HttpServletResponse κ°μ²΄λ₯Ό 컨νΈλ‘€λ¬ ν΄λμ€μ λ©μλμ μ λ¬νλ μ€λΈμ ν° μ΄λν° μν μ νλ€.
- ModelAndView κ°μ²΄λ₯Ό 리ν΄νλ handle() λ©μλ μ 곡.
- @RequestMapping μ λν μ΄μ μ μ²λ¦¬νλ RequestMappingHandlerMapping ꡬν체μ νμμΌλ‘ ReqeustMappingHandlerAdapter ꡬν체λ₯Ό λ§μ΄ μ¬μ©νλ€.
ModelAndView
- 컨νΈλ‘€λ¬ ν΄λμ€μμ μ²λ¦¬ν κ²°κ³Όλ₯Ό μ΄λ€ λ·°μμ μ²λ¦¬ν μ§ κ²°μ νκ³ λ·°μ μ λ¬ν λ°μ΄ν°λ₯Ό ν¬ν¨νλ ν΄λμ€
ViewResolver
λ¬Έμμ΄ κΈ°λ°μ View μ΄λ¦μ μ€μ Viewꡬνμ²΄λ‘ λ³κ²½νλ€.
λ€μν ν νλ¦Ώ λ·° μμ§μ΄ μμΌλ©°, κ°κ°μ μ ν©ν ViewResolver ꡬν체λ μ€νλ§ νλ μμν¬μμ μ 곡νλ€.
ex_) JSP : InternalResourceViewResolver, Velocity : VelocityViewResolver, Freemarker: FreemarkerViewResolver
μ΄ κ΅¬ν체λ₯Ό μ΄μ©νμ¬ μ€νλ§ λΉμΌλ‘ μ μνλ€.