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 처리 순서

  1. 클라이언트가 서버에 요청을 하면, front controller인 DispatcherServlet 클래스가 요청을 받는다
    • DispatcherServlet = web.xml
  2. DispatcherServlet는 프로젝트 파일 내의 servlet-context.xml 파일의 @Controller 인자를 통해 등록한 요청 위임
    • < annotation-driven />
  3. 컨트롤러를 찾아 매핑(mapping)된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리할 메소드로 이동한다.
  4. 컨트롤러는 해당 요청을 처리할 Service(서비스)를 받아 비즈니스로직을 서비스에게 위임한다.
  5. Service(서비스)는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야한다면 DAO에 요청하여 처리를 위임한다.
  6. DAO는 DB정보를 DTO를 통해 받아 서비스에게 전달한다.
  7. 서비스는 전달받은 데이터를 컨트롤러에게 전달한다.
  8. 컨트롤러는 Model(모델) 객체에게 요청에 맞는 View(뷰) 정보를 담아 DispatcherServlet에게 전송한다.
  9. DispatcherServlet는 ViewResolver에게 전달받은 View정보를 전달한다.
    • ViewResolver = InternalResourceViewResolver
  10. ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
  11. DispatcherServlet는 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다.
  12. DispatcherServlet는 클라이언트에게 Rendering된 뷰를 응답하며 요청을 마친다