본문 바로가기
Java

[Spring] Spring MVC?

by WaterPunch 2021. 6. 2.

 

MVC Architecture ( Model 1 / Model 2 )

MVC Architecture란 ? Model, View, Controller를 분리한 디자인 패턴 Model View Controller - 애플리케이션의 상태를 나타낸다 - 비즈니스 로직과 데이터 엑세스 로직 - Java Class가 담당, Java Beans - 디스플..

wpunch2000.tistory.com

Java MVC Architecture은 위 링크를 참고

1. Spring MVC

- Spring MVC는 자바 기반의 웹 애플리케이션을 개발할 때 사용하는 프레임워크의 하나로서

  프레임워크 Architecture로 MVC 패턴을 채택

- Model 2 MVC 을 기반으로 하는 스프링 프레임워크에서 제공하는 웹모듈

 

 

1-1 Spring MVC 특징

POJO (Plain Old Java Object) 구현

  - Controller, Model 등의 클래스는 POJO 형태로 구현
  - 특정 프레임워크에 종속적인 형태로 구현할 필요가 없기 때문에 단위 테스트를 하는것이 상대적으로 수월

 

Annotation을 이용한 정의 정보 설정

  - 요청 Mapping과 같은 각종 정의 정보를 설정 파일이 아닌 Annotation 방식으로 설정 가능
  - 비즈니스 로직과 그 로직을 수행하기 위한 각종 정의 정보를 Java파일 내에 함께 기술할 수 있음(효율적으로 개발)

 

유연한 메서드 시그니쳐 정의

  - Controller 클래스의 매개변수에는 처리에 필요한 것만 골라서 정의가 가능
  - 프레임워크가 인수에 전달하는 값을 자동으로 담아주거나 변환

 

Servlet API 추상화

  - HttpServletRequest, HttpServletResponse, HttpSession 등의 Servlet API를 추상화하는 기능을 제공
  - Servlet API를 직접 사용하는 코드가 제거가 되기 때문에 Controller 클래스의 테스트가 상대적으로 쉬워짐

 

View 구현 기술의 추상화

  - Controller는 View 이름만 알면 되기 때문
     View가 어떤 구현기술(JSP, 타임리프, 서블릿 API, 프리마커 등)로 만들어졌는지 몰라도 됨

 

스프링 IoC 컨테이너와의 연계

  - 스프링 MVC는 스프링 IoC 컨테이너 상에서 동작하는 프레임워크
  - DI나 AOP 같은 구조를 그대로 활용 가능

 

 

 

1-2 Spring MVC 동작구조 정리

(구성요소 설명  처리순서별로 정리, 구성요소 개념빨간색으로 표시)

처리순서 구성요소 역할
1, 2, 3, 6, 7 DispatcherServlet
(Front Controller)
Front Controller 역할, 일종의 중앙처리장치와 같은 것(모든 연결을 담당한다)

(1)
사용자(클라이언트)의 모든 요청을 받음
(2) HandlerMapping 객체에게 클라이언트의 요청을 처리할 Controller를 탐색하도록 요청

(3-1) HandlerAdapter 객체에 @Controller 를 이용해  요청처리를 위임
(3-2) (컨트롤러가 요청 처리 후)HandlerAdapter로부터 ModelAndView를 반환받음

(6-1) ModelAndView 객체를 반환 받은 후, ViewResolver 객체를 이용 (View 파일 탐색)
(7) 리턴한 결과값을 View에게 전달하여 응답결과를 요청
2 HandlerMapping (2) DispatcherServlet의 요청을 직접적으로 처리할 Controller를 매핑(탐색)함
- 구체적인 매핑은 xml 파일이나 java config 관련 Annotation을 통해 처리할 수 있음

어노테이션으로 주로 @RequestMapping , @PostMapping이 있다
3, 4 HandlerAdapter (3-1) 매핑된 컨트롤러의 실행을 DispatcherServlet로부터 요청받음
(4) Controller의 알맞은 메서드를 호출

(컨트롤러가 요청 처리 후)
(5 > 3-2) Controller로부터 ModelAndView 객체를 받은 후 DispatcherServlet에 리턴
4, 5 Controller 직접 요청을 처리하며, 처리 결과를 반환
(4) HandlerAdapter로부터 처리 요청을 받음

(5) 결과가 반환되면 HandlerAdapter가 ModelAndView 객체로 변환되며
     여기에는 View Name과 같이 응답을 통해 보여줄 View에 대한 정보와 관련 데이터가
     포함되어 있음

  (※ ModelAndView : Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체)
  ( ModelAndView 는 예전에 많이 쓰고 지금은 Model을 많이 쓴다고 함)
  (※ 개별 Controller 클래스는 핸들러(Handler)라고도 함)
6 ViewResolver (6-2) ModelAndView객체에 담긴 View Name을 확인한 후,
         실제로 컨트롤러로부터 받은 로직 처리결과를 반영할 View 파일(JSP)을 탐색 리턴
         (
매번 새로운 View 객체를 생성해서 DispatcherServlet에 리턴)
7, 8 View (7) DispatcherServlet으로부터 응답결과 요청을 받음
(8) 로직 처리 결과를 반영한 최종 화면을 생성

 

참고도서 : 스프링 철저 입문(위키북스)

참고블로그 : 혼자하는 공부공간(https://junu0516.tistory.com/92)

Welcome to NeverLand(https://tinkerbellbass.tistory.com/40)

반응형

댓글