[CS] MVC 패턴

말하는 감자·2025년 2월 11일

CS

목록 보기
27/33

등장 배경

Servlet의 등장

  1. 초기 웹 서비스는 정적페이지
  2. 사용자마다 각각의 다른 응답을 생성해 줄 필요가 생김
  3. WAS의 등장
    • 로직을 수행해서 동적 컨텐츠 생성
    • Servlet : 동적 컨텐츠를 만드는 기술 혹은 사용되는 객체

Servlet의 한계

  • 가독성이 너무 구림
  • 유지보수 어려움

JSP 탄생

  • HTML 코드에 Java 코드를 넣어 동적 웹 페이지를 생성하는 서버 사이드 템플릿 엔진
  • 플레이팅 전용 알바

MVC 패턴이란

  • MVC 패턴은 애플리케이션을 개발할  사용하는 디자인 패턴으로, 애플리케이션의 개발 영역을 MVC(Model,View,Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식

사용 목적

  • 각 컴포넌트가 서로 분리되어 각자의 역할에 집중할 수 있기 때문에 시스템 결합도를 낮출 수 있다. 또한 유지보수가 쉽고, 애플리케이션의 확장성과 유연성이 증가

Model, View, Controller

  • Model

    클라이언트의 요청을 전달받으면 요청 사항 처리를 위한 작업을 하는데, 이 때 처리한 작업의 결과 데이터를 Model이라고 한다.

    데이터베이스와 상호작용하는 계층

  • View

    웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스를 제공하는 역할
    JSP,thymeleaf 등 다양한 템플릿 엔진 사용 가능

  • Controller

    클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트로써 Model과 View의 중간에서 상호작용을 해주는 역할

    클라이언트의 요청(Http Requset)을 전달받아 비즈니스 로직을 호출하여, Model 데이터가 만들어지면 이 데이터를 View로 전달(결과 반환)해주는 역할

MVC1


MVC1 패턴이란, 사용자로부터 요청이 들어오면 DB로부터 필요한 데이터를 받은 Model 객체를 JSP 페이지(View)에 담아 응답으로 보내는 패턴

한계

JSP가 비즈니스 로직과 HTML(View) 코드가 분리되지 않음

MVC2


MVC1에서 Controller 역할을 하는 Servlet이 추가

요청을 하나의 컨트롤러(Servlet)가 먼저 받는다.
서블릿은 요청에 대한 비즈니스 로직을 처리한 후, 이를 JSP 파일에 반영하는 역할을 수행

Spring MVC

스프링 프레임워크에서 MVC2 모델을 좀 더 발전시킨 모델

프론트 컨트롤러가 우선적으로 클라이언트로부터 모든 요청을 받게 되며, 실제 요청의 처리는 개별 컨트롤러 클래스로 위임을 한다.

개별 컨트롤러 클래스는 Handler라고 하며, DI를 통해 생성해둔 Bean을 통해 비즈니스 로직 처리 결과를 Model에 담아 다시 프론트 컨트롤러로 보낸다. 프론트 컨트롤러는 받은 Model을 알맞은 View 템플릿으로 전달하여 반영시키고, 최종적으로 클라이언트로 보낼 화면을 응답 결과로 전송한다.

구조

Front Controller(DispatcherServlet)

  • 모든 클라이언트의 요청을 전달받음
  • Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 View에 전달하여 알맞은 응답 생성

HandlerMapping

  • 클라이언트의 요청 URL을 어떤 Controller(Handler)가 처리할지를 결정
  • URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있다.

HandlerAdaptor

  • 컨버터
  • 핸들러 종류에 관계없이, 핸들러 어댑터로 핸들러를 실행 가능
  • 핸들러의 실행 결과로 얻은 모델 정보를 기반으로 뷰를 생성하여 반환

Controller(Handler)

  • 실제 비즈니스 로직을 포함하는 메서드나 클래스
  • 모델 데이터를 생성하거나 수정하여 반환
  • 클라이언트의 요청을 처리한 뒤, Model을 호출하고 결과를 DispatcherServlet에 알려줌

ViewResolver

  • 플레이팅
  • Controller의 처리 결과를 보여줄 View를 결정

View

  • 응답화면 생성

처리 과정


1. DispatcherServlet이 클라이언트로부터 요청을 수신
2. HandlerMapping이 어느 Handler(Controller)를 사용할지 결정
3. HandlerAdaptor를 통하여 Controller를 호출/실행
4. Controller가 생성한 모델 데이터를 이용하여 HandlerAdaptor가 ModelView 생성
5. ViewResolve가 처리 결과를 보여줄 View를 결정
6. 화면 생성

profile
주니어개발자(?)

0개의 댓글