1. MVC 패턴
- MVC : Model-View-Controller의 약자로, 소프트웨어 디자인 패턴중 하나이다.
- MVC패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리한다.
Model
- 데이터와 비즈니스 로직을 담당한다.
- 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행한다.
View
- 사용자 인터페이스를 담당한다.
- 사용자가 보는 화면과 버튼, 폼등을 디자인하고 구현한다.
Controller
- Model과 View 사이에 상호작용을 조정하고 제어한다.
- 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트한다.
MVC 패턴은 소프트웨어를 구성하는 요소들을 분리함으로써 코드의 재사용성과 유지보수성을 높이고 개발자들 간의 협업을 용이하게한다. 따라서 소프트웨어를 개발할 때, MVC 패턴을 적용하여 구조를 잘 설계하는 것이 중요하다.
2. MVC1 & MVC2
우리가 많이 사용하고 있는 MVC패턴은 MVC1, MVC2에서 발전된 패턴을 말한다.
MVC1
View와 Controller를 모두 JSP가 담당하는 형태를 가진다. 즉, JSP 하나로 유저의 요청을 받고 응답을 처리함으로 구현 난이도는 쉽다.
내용이 복잡하고 거대한 프로젝트일수록 이 패턴은 힘을 잃는다. JSP하나에서 MVC가 모두 이루어지다보니 재사용성도 매우 떨어지고, 읽기도 힘들다는 단점이 있다.
MVC2
MVC2 패턴은 표준으로 사용되는 패턴이다. 요청을 하나의 컨트롤러가 먼저 받는다. 이 말은, MVC2 패턴은 MVC1패턴과 다르게 Controller, View가 분리되어있다. 이처럼 역할이 분리되어 MVC1 패턴에서의 단점을 보완할 수 있다. 이를 통해 개발자는 Model, View, Controller 중에서 수정해야 할 부분이 있다면, 이것만 수정하면 되기에 유지보수에 큰 이점을 가진다.
MVC2는 MVC1보다 구조가 복잡해질 수 있지만, 각종 프레임워크가 발전되어있어 개발자는 세부적인 구성까지 신경쓰지 않을 수 있다. 그 중 대표적인 것이 Spring 프레임워크이다.
3. Spring MVC 패턴
Spring 공식문서에서 Spring MVC에 대한 설명으로 'DispatcherServelet이 중앙에서 HTTP요청을 처리해주는데 이는 Front Controller패턴으로 설계되어 있다.'라고 설명하고 있다.
⇒ 'Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하고 있다'라는 말이다.
- Servlet이란?
Servlet이란 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 사양을 말한다.
- Front Controller란?
Front Controller란, 우선적으로 클라이언트의 모든 요청을 받고 그 요청을 분석하여 세부 컨트롤러에게 필요한 작업을 나눠 준다. Spring MVC에서는 DispatcherServlet이 Front Controller 역할을 수행한다.
- 클라이언트에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청을 분석한다.
- DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청을 전달한다.
- Handler mapping에는 API path와 Controller 메서드가 매칭되어 있다.
- Controller → DispatcherServlet
- 해당 Controller는 요청에 대한 처리를 완료 후 처리에 대한 결과 → 데이터(Model)과 View정보를 전달한다.
- DispatcherServlet → Clinet
- ViewResolver를 통해 View에 Model을 적용하여 View를 클라이언트에게 응답으로 전달한다.
'TIL' 카테고리의 다른 글
240607: TIL - Token (0) | 2024.06.10 |
---|---|
240604 TIL (0) | 2024.06.05 |
240531 TIL : ResponseEntity (0) | 2024.06.03 |
240530 TIL (0) | 2024.05.31 |
240529 TIL (0) | 2024.05.29 |