ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 스프링 MVC란 무엇인가?
    Spring 2024. 4. 18. 18:21

     

    MVC(Model View Controller)란?

    • MVC 패턴은 애플리케이션을 개발할 때 사용하는 디자인 패턴이다.
    • Spring MVC는 MVC 디자인 패턴에 기반해 웹 애플리케이션을 만들기 위한 Spring기능 중 하나이다.
    • 애플리케이션의 개발영역을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식이다.
    • MVC 패턴을 도입하면서 UI 영역과 도메인(비즈니스 로직) 영역으로 구분되어 서로에게 영향을 주지 않으면서 개발과 유지보수를 가능하게 되었다.

    Spring MVC는 Spring에서 제공하는 웹 모듈로, Model, View, Controller 세 가지 구성요소를 사용해 사용자의 다양한 HTTP Request를 처리하고 단순한 텍스트 형식의 응답부터 REST 형식의 응답은 물론 View를 표시하는 html을 return 하는 응답까지 다양한 응답을 할 수 있는 프레임워크이다.

     

    Model

    • Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다.
    • 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라고 한다
    • 클라이언트의 요청 사항을 구체적으로 처리하는 영역을 서비스 계층(Service layer)이라고 하며,
    • 요청 사항을 처리 하기위해 Java 코드로 구현한 것을 비즈니스 로직(Business Logic)이라고 한다.

    View

    view는 Model을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스(Resource)를 제공하는 역할을 한다.

     

    Spring MVC에는 다양한 View 기술이 포함되어 있다.

    • HTML 페이지 출력
    • PDF, Excel 등의 문서 형태로 출력
    • XML, JSON 등 특정 형식의 포맷으로 변환

     

    Controller

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

     

    클라이언트 측의 요청을 전달받아 비지니스 로직을 거친 후, Model 데이터가 만들어지면, 이 Model 데이터를 View로 전달하는 역할을 한다.


    MVC 패턴의 구조

    MVC 패턴에서도 여러 가지 구조를 가진다.

    MVC 패텬의 구조

     

    여러 가지 구조를 가진 MVC 패턴 중 위 그림의 구조를 그대로 사용하고 있는 것이 Spring MVC이다.

    일반 MVC 패턴도 유지보수하기에 좋은 패터임은 확실하나,

    구조가 복잡해지는것을 극복한 것이 Spring MVC이다.

     

    Spring MVC의 동작 방식과 구성 요소

    Spring MVC의 동작 방식과 구성 요소

     

    DispatcherServlet

    • HttpServlet을 상속받아 사용하고, 서블릿으로 동작한다.

    DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet

    • DispacherServlet을 사용하면 서블릿을 등록하면서 모든 경로에 (urlPatterns="/")에 대해 매핑한다.

     

    요청 흐름

    • 서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출된다.
    • 스프링 MVC는 FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서 **DisparcherServlet.doDispatch()**가 최종적으로 호출된다.

    동작 순서

    1. 핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
    2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
    3. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.
    4. 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다.
    5. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 .ModelAndView로 변환하여 반환한다.
    6. viewResolver호출 : 뷰 리졸버를 찾고 실행한다.
    7. View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다
    8. 뷰 렌더링 : 뷰를 통해 뷰를 렌더링한다.

    인터페이스

    스프링 MVC의 큰 장점은 DispatcherServlet코드의 변경 없이 원하는 기능을 변경하거나 확장할 수 있다는 것이다.

    동작에 필요한 대부분의 기능을 확장할 수 있도록 인터페이스로 제공한다.

    따라서 인터페이스들만 구현하여 DispatcherServlet에 등록하면 원하는 기능의 컨트롤러를 만들 수 있다.


     

    "디자인 패턴" = 일반적으로 적용 가능한 프로그램 구조를 다루는 이론.

    "엔드포인트" = 컴퓨터 네트워크에서 데이터 송수신이 시작되거나 종료되는 지점을 가리킵니다.

    "서블릿(Servlet)" = 자바 언어를 기반으로 하는 웹 애플리케이션에서 동적인 웹 페이지를 만들기 위해 사용되는 자바 클래스입니다.

    "REST(Representational State Transfer)" = 아키텍처 스타일을 따르는 웹 서비스에서 클라이언트에게 반환되는 데이터의 형식.

    "핸들러(Handler)" = 이벤트나 요청을 처리하거나 처리하는 데 사용되는 코드 블록 또는 함수를 가리킨다.

     

kimjihoon