MVC 패턴
Model
- 어플리케이션 상태의 캡슐화
- 상태 쿼리에 대한 응답
- 어플리케이션의 기능 표현
- 변경을 view에 통지
View
- 모델을 화면에 시각적으로 표현
- 모델에게 업데이트 요청
- 사용자의 입력을 컨트롤러에 전달
- 컨트롤러가 view를 선택하도록 허용
Controller
- 어플리케이션의 행위 정의
- 사용자 액션을 모델 업데이트와 mapping
- 응답에 대한 view 선택
특징
- 어플리케이션의 확장을 쉽게 하기 위해 Model, View, Controller 세가지 영역으로 분리
- 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않음 (유지보수 용이)
- 컴포넌트 간의 결합성이 낮아 프로그램 수정 용이(확장성이 뛰어남)
장점
- 화면과 비즈니스 로직을 분리하여 작업
- 영역별 개발 => 확장성 뛰어남
- 표준화된 코드를 사용하여 공동작업 용이, 유지보수 좋음
단점
- 개발과정 복잡 => 초기 개발속도 느림
- 초보자가 이해하고 개발하기 어려움 => 개발 비용 증가
Spring MVC
DispatcherServlet (Front Controller)
- 모든 클라이언트의 요청을 받음
- Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성
HandlerMapping
- 클라이언트의 요청 URL을 어떤 Controller가 처리할지 결정
- URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있음
Controller
- 클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에 전달
ViewResolver
- Controller가 리턴한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 결정
View
- Controller의 처리결과를 보여줄 응답화면을 생성
Spring MVC 요청 흐름

요청 순서
- Client의 요청을 DispatcherServlet이 받음
