MVC(Model-View-Controller) 패턴의 개념
소프트웨어 공학에서 사용되는 아키텍쳐 패턴으로 MVC 패턴의 주 목적은 Business logic과 Presentation logic을 분리하기 위함이다.
Model
- 데이터 저장소(DB)와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 함.
- DAO클래스, Service 클래스에 해당함
View
- 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 함.
- 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML과 CSS, Java Script를 사용하여 웹 브라우저가 출력할 UI를 만든다.
- HTML과 JSP를 사용하여 작성할 수 있다.
Controller
- 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출하는 일을 함.
- 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 한다.
- 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 뷰에게 전달한다.(클라이언트 요청에 대해 모델과 뷰를 결정하여 전달)
- Servlet과 JSP를 사용하여 작성할 수 있다.
- 클라이언트 요청
- Controller(요청 처리 및 흐름 제어 담당)가 요청에 대한 Model 호출
- Model(비즈니스 로직 및 데이터 처리 담당)이 결과를 Controller에게 돌려줌
- Controller가 Model의 결과에 대한 화면생성요청을 View에게 보냄
- View(Model이 처리한 결과 데이터의 화면 생성 담당)가 결과 화면을 Controller에게 보냄
- Controller가 클라이언트에게 응답을 보내줌.
모델2 아키텍쳐 개념
Controller 역할을 Servlet이 담당하는 아키텍쳐
- 클라이언트가 Controller 역할을 하는 Servlet에게 요청
- Servlet이 클라이언트 요청에 대한 모델 객체를 호출
- 모델이 DB와 연동해서 Sql문을 실행
- DBMS가 sql 실행 결과를 다시 모델에게 보냄
- 모델이 결과를 VO 객체에 저장하고 참조한다.
- 모델이 참조하고 있는 저장된 VO 객체를 Servlet에게 돌려준다.
- 모델이 돌려준 VO 객체의 정보를 View에 전달한다.
- View가 VO 객체를 다시 참조한다.
- View가 결과 화면을 Servlet에게 보내준다.
- Servlet이 클라이언트에게 화면을 출력해준다.(응답)
Spring MVC
Spring은 DI 나 AOP 같은 기능뿐만 아니라, 서블릿 기반의 웹 개발을 위한 MVC 프레임워크를 제공하는데,
Spring MVC는 모델2 아키텍쳐와 Front Controller 패턴을 프레임워크 차원에서 제공하는 것이다.
Spring MVC 프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜잭션 처리나 DI 및 AOP 등을 손쉽게 사용할 수 있다.
Front Controller 패턴
DispatcherServlet이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 요청을 받아서 처리하도록 하는 구성이다.
예외가 발생했을 때 일관된 방식으로 처리하는 것도 Front Controller의 역할이다.
DispatcherServlet 클래스
web.xml에 설정
클라이언트로부터의 모든 요청을 전달 받는다.
Spring MVC의 주요 구성 요소
DispatcherServlet
클라이언트의 요청을 받아서 Controller에게 클라이언트의 요청을 전달하고, 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성한다.
HandlerMapping
URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있다.
Controller
클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에게 알려준다.
ModelAndView
Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체이다.
View
Controller의 처리 결과 화면에 대한 정보를 보유한 객체
ViewResolver
Controller가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰를 결정한다.
'개발 관련 지식 > Spring Framework Basic' 카테고리의 다른 글
@Autowired (0) | 2020.05.26 |
---|---|
MyBatis (0) | 2020.05.05 |
JDBC (0) | 2020.04.25 |
프로젝트 아키텍쳐 (0) | 2020.04.24 |
Bean 등록 및 의존관계 설정 Annotation (0) | 2020.04.24 |