MVC패턴의 개념과 모델 2 아키텍처

MVC(Model-View-Controlle) 패턴의 개념

  • 모델-뷰-컨트롤러는 소프트웨어 공학에서 사용되는 아키텍처 패턴으로 MVC 패턴의 주목적은 비즈니스 로직과 presentaiton 로직을 분리하기 위함이다.
  • MVC 패턴을 사용하면, 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.
  • Model 애플리케이션의 정보 (데이터, 비즈니스 로직 포함)
  • View 사용자에게 제공할 화면 (Presentation Logic)
  • Controller Model과 View 사이의 상호작용을 관리

MVC 패턴의 개념


각각의 MVC 컴포넌트 역할

모델 컴포넌트

  • 데이터 저장소 (DB) 와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일
  • 여러 개의 데이터 변경 작업 (추가 변경 삭제)을 하나의 작업으로 묶는 트랜잭션을 다루는 일도 함
  • DAO 클래스, Service 클래스에 해당

뷰 컴포넌트

  • 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일
  • 생성된 화면은 웹 브라우저가 출력하고 뷰 컴포넌트는  html, css, 자바 스크립트를 사용하여 UI 제작
  • html, jsp를 이용하여 제작

컨트롤러 컴포넌트

  • 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트 호출
  • 클라이언트가 보낸 데이터가 있다면, 모델 호출 시 전달하기 쉽게 데이터를 적절히 가공
  • 모델이 업무수행을 완료하면 그 결과를 가지고 화면을 생성하도록 뷰에게 전달
  • Sevlet과 JSP를 사용하여 작성

모델 2 아키텍쳐 개념

모델 1 아키텍쳐

  • Controller 역할을 JSP가 담당함
  • JSP에 자바 코드가 들어가게 되어 복잡해짐.

모델 2 아키텍쳐

  • 모델 2 아키텍쳐 : Controller 역할을 Servlet 이 담당함


모델2 아키텍처의 호출 순서

  1.  웹브라우저가 웹 애플리케이션 실행을 요청하면, 웹 서버가 그 요청을 받아 서블릿 컨테이너 (톰캣 서버)에 넘겨준다. 서블릿 컨테이너는 URL을 확인하여 그 요청을 처리할 서블릿을 찾아서 실행한다.
  2. 서블릿은 실제 업무를 처리하는 모델 자바 객체의 메서드를 호출한다. 만약 웹브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그 데이터를 가공하여 VO 객체를 생성하고, 모델 객체의 메서드를 호출할 때 그 인자 값으로 넘긴다. 모델 객체는 엔터프라이즈 자바 빈 일 수도 있고, 일반 자바 객체 (POJO로 된 서비스 , DAO object) 일 수도 있다.
  3. 모델 객체는 JDBC를 사용하여 매개변수로 넘어온 값 객체를 데이터베이스에 저장하거나, 질의 결과를 가져와 VO 객체로 만들어 반환한다.
  4. 서블릿은 모델 객체로부터 반환 값을 JSP에 전달한다.
  5. JSP는 서블릿으로부터 받은 값 객체를 참조하여 웹 브라우저가 출력할 결과 화면을 만들고 요청 처리 완료
  6. 웹 브라우저는 서버로부터 받은 응답 내용을 화면에 출력한다.

Front Controller 패턴 아키텍처

Front Controller 프로세스

  • 클라이언트가 보낸 요청을 받아 공통적인 작업을 먼저 수행
  • 적절한 세부 Controller에게 작업을 위임
  • 각각의 애플리케이션 컨트롤러는 클라이언트에게 보낼 뷰를 선택하여 최종 결과를 생성
  • 인증이나 권한 체크처럼 모든 요청에 대해 공통적으로  처리해야 하는 로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우에 사용

Spring MVC 개념

Spring MVC 특징

  • DI나 AOP 같은 기능뿐만 아니라, 서블릿 기반의 웹 개발을 위한 MVC 프레임워크 제공
  • 모델 2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공
  • Spring을 기반으로 하고 있기에 트랜잭션 처리나 DI AOP를 손쉽게 사용

Spring MVC와 Front Controller 패턴

  • 대부분의 MVC 프레임워크들은 Front Controller 패턴을 적용해서 구현
  • Spring MVC 도 Front Controller 역할을 하는 DispatcherServlet이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 요청을 받아서 처리하도록 구성됨
  • 예외가 발생했을 때 일관된 방식으로 처리하는 것도 Front Controller의 역할

DispatcherServlet 클래스

  • Front Controller 패턴 적용
  • web.xml 에 설정
  • 클라이언트로부터의 모든 요청을 전달받음
  • Controller 나 View와 같은 Spring MVC 구성요소를 이용하여 클라이언트에게 서비스 제공

호출 순서

  1. 앞단에서 DispatcherServlet 이 들어오는 요청을 받는다.
  2. 개발자가 작성한 컨트롤러 클래스에게 요청을 위임한다.
  3. 컨트롤러 클래스는 해당되는 요청을 처리, 데이터베이스를 다녀와 model 객체에 담아줌
  4. 컨트롤러는 DispatcherServlet에게 model 전달
  5. DispatcherServlet은 View template에게 model 전달
  6. View template은 model을 이용하여 화면을 그리고 결괏값을 DispatcherServlet 에게 전달
  7. DispatcherServlet 최종 응답을 브라우저에게 전달

Spring MVC의 주요 구성 요소

DispatcherServlet

  • 클라이언트의 요청을 받아 컨트롤러에게 클라이언트의 요청을 전달하고, 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성

HandlerMapping

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

Controller

  • 클라이언트의 요청을 처리한 뒤, 모델을 호출하고 결과를 DispatcherServlet에게 알려줌

ModelAndView

  • Controller 가 처리한 데이터 및 화면에 대한 정보를 보유한 객체

View

  • Controller의 처리 결과 화면에 대한 정보를 보유한 객체

ViewResolver

  • Controller가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰를 결정

Spring MVC의 주요 구성 요소의 요청 처리 과정

  1. 클라이언트의 요청이 DispatcherServlet에게 전달된다.
  2. DispatcherServlet은 HandlerMapping을 사용하여 클라이언트 요청을 처리할 Controller 획득
  3. DispatcherServlet은 Controller 객체를 이용하여 클라이언트의 요청 처리
  4. Controller는 클라이언트의 요청 처리 결과와 View 페이지 정보를 담은 ModelAndView 객체를 반환
  5. DispatcherServlet은 ViewResolver로부터 응답 결과를 생성할 View 객체 구현
  6. View는 클라이언트에게 전송할 응답을 생성

Spring MVC 기반 웹 애플리케이션 개발

Spring MVC 기반 웹 어플리케이션 작성 절차

  1. 클라이언트의 요청을 받는 DispatcherServlet을 web.xml에 설정
  2. 클라이언트의 요청을 처리할 Controller 작성
  3. Spring Bean으로 Controller 등록
  4. JSP를 이용한 View 영역의 코드 작성
  5. Browser 상에서 JSP 실행

'Back-end > Spring' 카테고리의 다른 글

Spring MVC 어플리케이션 작성(1)  (0) 2021.06.14
Spring MVC 환경설정  (0) 2021.06.14
MyBatis 어플리케이션 작성(2)  (0) 2021.06.14
MyBatis 어플리케이션 작성(1)  (0) 2021.06.14
MyBatis 개요  (0) 2021.06.11

+ Recent posts