Programming
MVC 패턴(Model-View-Controller Pattern)
두잇츄우
2025. 4. 16. 17:09
- 소프트웨어 공학에서 사용되는 아키텍처 패턴 중 하나
- 애플리케이션을 세 가지 역할로 분리하여 개발하는 방법론을 의미
Model(모델) | - 데이터와 비즈니스 로직을 처리 -사용자가 편집하길 원하는 모든 데이터를 의미 |
View(뷰) | - 사용자에게 보여지는 UI 부분 - 데이터를 시각적으로 표현하는 역할 |
Controller(컨트롤러) | - 사용자의 입력을 처리하고, 모델과 뷰를 연결하는 역할 |
MVC1
- JSP로 구현한 기존 웹 어플리케이션은 모델 1 구조로 웹 브라우저의 요청을 JSP 페이지가 받아서 처리 하는 구조이다.
- JSP 페이지에 비지니스 로직을 처리 하기 위한 코드와 웹 브라우저에 결과를 보여주기 위한 출력 관리 코드가 뒤섞여 있는 구조
- JSP 페이지 안에서 모든 정보를 표현(view)하고 저장(model)하고 처리(control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어진다.
- 정의: 모든 클라이언트 요청과 응답을 JSP가 담당하는 구조
MVC1 패턴 장점
- 코드의 재사용성과 코드 관리가 용이: 구성 요소를 크게 3가지 역할로 구분하기 때문에 각각의 구성 요소에만 집중할 수 있고 개발과 유지 보수가 편리
- 코드의 분리로 인해 디버깅이 더 쉬워짐: 오류가 발생하면 해당 영역만 확인하면 되기 때문
MVC1 패턴 단점
- 간단한 애플리케이션에는 적합하지만 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해짐
MVC2
- MVC1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 됨
- 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 JSP 페이지로 포워딩
- 정의: 클라이언트의 요청처리와 응답처리, 비지니스 로직 처리하는 부분을 모듈화시킨 구조
Spring MVC
- MVC2 + 스프링 프레임워크: 스프링 프레임워크, 스프링이 제공하는 트랜잭션 처리, DI, AOP, 프레임워크를 손쉽게 사용
MVC 처리 순서
- 클라이언트가 서버에 요청을 하면, front controller인 DispatcherServlet 클래스가 요청을 받는다
- DispatcherServlet = web.xml
- DispatcherServlet는 프로젝트 파일 내의 servlet-context.xml 파일의 @Controller 인자를 통해 등록한 요청 위임
- < annotation-driven />
- 컨트롤러를 찾아 매핑(mapping)된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리할 메소드로 이동한다.
- 컨트롤러는 해당 요청을 처리할 Service(서비스)를 받아 비즈니스로직을 서비스에게 위임한다.
- Service(서비스)는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야한다면 DAO에 요청하여 처리를 위임한다.
- DAO는 DB정보를 DTO를 통해 받아 서비스에게 전달한다.
- 서비스는 전달받은 데이터를 컨트롤러에게 전달한다.
- 컨트롤러는 Model(모델) 객체에게 요청에 맞는 View(뷰) 정보를 담아 DispatcherServlet에게 전송한다.
- DispatcherServlet는 ViewResolver에게 전달받은 View정보를 전달한다.
- ViewResolver = InternalResourceViewResolver
- ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
- DispatcherServlet는 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다.
- DispatcherServlet는 클라이언트에게 Rendering된 뷰를 응답하며 요청을 마친다