이번에는 Spring의 Architecture인 MVC 구조에 대해서 알아보려고한다.
우선, MVC는 Model, View, Controller에 약자이다. 각각의 의미를 살펴보며 MVC의 기본 구조를 알아보자.
Model
- 데이터 처리
- 변경을 뷰에 통지
View
- 사용자들에게 보여줄 화면 처리
- 모델에게 업데이트 요청
- 사용자의 입력을 컨트롤러에게 전달
Controller
- 요청에 대한 행위 정의
- 뷰 선택
- 모델 업데이트와 매핑
근데 여기서는 자세히 알아야 할 필요는 없고 Controller가 뭔지, View가 뭔지, Model이 뭔지 정도만 알면 된다.
웹에서는 기본적인 이런 MVC 구조에 FrontController 패턴을 더해 생성한다.
FrontController 구조를 살펴보자.
이는 기본적인 MVC 구조에 Front Controller(Dispatcher Servlet)을 앞단에 두어 MVC 를 컨트롤 하는 구조이다. 이러한 구조로 웹이 동작하고 있다.
동작과정
Client(HTTP요청)
-> FrontController(요청에 맞는 Controller 매핑)
-> Controller(요청에 맞는 Model로 데이터처리 요청)
-> Model(요청에 맞는 데이터 처리 후 결과 Controller에 전달)
-> Controller(받은 데이터와 요청에 맞는 viewName을 FrontController에 전달)
-> FrontController(전달받은 데이터를 요청받은 view에 전달)
-> View(데이터를 자신과 합쳐 FrontController에전달)
-> FrontController(Client에 결과 응답)
위의 동작과정을 통해 웹이 동작을 한다.
더 나아가 최신 MVC의 추가적인 사항에 대해서 알아보려고 한다.
1. Front Controller의 변화
- Dispatcher Servlet 이라고도 불린다.
- 기존) 직접 xml파일 등을 통해 작성했고 Handler Mapping(Controller Mapping), View Resolver(View Mapping)을 직접 설정하였다. 마찬가지로 View Resolver나 Handler Mapping 또한 xml파일로 저장되었었음.
- 현재) spring boot 프로젝트 실행시 @SpringBootApplication이 설정된 클래스를 통해 알아서 매핑, 개발자가 직접 구현할 필요가 없음.
2. View 처리의 변화
- 기존) 서버에서 뷰를 생성하고 client에 전달하는 방식이였음. 위의 MVC 구조와 같이 서버가 뷰를 전달한다. 즉, 각 요청에 맞는 여러가지 jsp, thymeleaf 파일들이 존재했고 그들을 Client에 전달하는 방식이였음.
- 현재) Front Controller는 JSON의 형태로 데이터만 전달하고 뷰처리는 React.js나 여러가지 다른 기술을 통해 화면에 뷰를 표현 하는 방식. 즉, ModelAndView를 전달했던 기존의 방식에서 Model만 전달하는 방식임.
용어 정리
- Dispatcher Servlet : 모든 HTTP 요청 처리
- Handler Mapping : 요청에 맞는 Controller 처리
- ModelAndView : 컨트롤러에서 뷰에 전달할 데이터를 갖고 뷰의 이름을 갖는 객체
- ViewResolver : 뷰 이름을 바탕으로 전달할 뷰 객체 결정
기술정리
- UI 영역 : JS, HTML, CSS, React, Angular 등
- 프레젠테이션 영역 : JSP/Servlet, SpringMVC 등
- 서비스 발행 영역 : Jersey, CXF, SpringMVC 등 -> 서버의 수 등 관리 영역
- 비즈니스 로직 영역 : POJO
- 자원 접근 영역 : Spring JDBC, Mybatis, JPA 등
- 자원 영역 : DB
'Server Development > Spring Basic' 카테고리의 다른 글
Spring - AOP (0) | 2023.04.02 |
---|---|
Spring - Exception (0) | 2023.04.01 |
Spring - Log(LogBack) (0) | 2023.04.01 |
Spring - Spring Boot (0) | 2023.03.24 |
Spring - IoC/DI (0) | 2023.03.22 |