Spring MVC

김준석·2021년 1월 4일
1

Spring MVC

MVC

먼저 MVC란 무엇일까? MVC는 Model, View, Controller의 약자다.

각자의 역할은 무엇일까?

Model

  • 뷰가 렌더링하는데 필요한 데이터
  • 쉽게 말하면 애플리케이션의 데이터를 나타낸다.
  • 주문 내역, 상품 목록 등.

View

  • 웹 애플리케이션에서 View는 실제로 보이는 부분
  • 간단하게 말하면 사용자가 보는 화면이다.

Controller

  • 컨트롤러는 사용자의 액션에 응답하는 컴포넌트
  • 요청에 대한 처리하는 로직이 있다.
  • 뷰와 모델 사이의 통신 역할

왜 MVC로 역할을 나눈 것일까?

애플리케이션을 개발할 때, 하나의 역할이 서로 분리되어 각자의 역할을 만든다면 어떨까? 각자의 역할에 집중할 수 있게 된다. 또한, 역할을 나누었기에 유지보수성과 확장성, 유연성이 좋아진다.

MVC는 변천사가 있다. Model 1방식과 2방식이 있는데, 둘은 비즈니스 로직 영역과 프레젠테이션 영역이 분리되어있는지, 아닌지 차이다. Model 1방식이 비즈니스 로직 영역과 프레젠테이션 영역이 통합되어 있다 보니 유지보수에 어려움이 있었다. 그래서 View와 Controller를 분리시킴으로 이를 해결했다.

Spring MVC는 Model 2방식을 발전시킨 형태를 사용한다. 이러한 형태가 Spring 모듈 중 Web 모듈에 구현되어있다. Spring MVC는 어떤 형태를 가지고 있는지 밑에서 설명하겠다.

기본 동작 흐름

  1. 먼저 요청을 Dispatcher Servlet이 받는다.

    • 컨트롤러 중에서도 이렇게 맨 앞에서 요청을 받는 컨트롤러를 Front Controller라고 한다.
    • 로직에 들어오기 전에 요청에 대한 선처리 작업을 한다.
  2. Dispatcher Servlet이 요청을 처리해줄 컨트롤러와 메서드가 무엇인지 알기 위해 Handler Mapping에게 물어본다.

    • Handler Mapping은 우리가 XML 파일의 설정이나 Java 파일의 어노테이션으로 설정한 정보를 가지고 알맞은 컨트롤러와 메서드를 찾을 수 있다.
    • 그렇게 찾은 정보를 Dispatcher Servlet에게 전달한다.
  3. Dispatcher Servlet은 해당 컨트롤러와 메서드를 알았다면 Handler Adapter에게 실행을 요청한다.

  4. Handler Adapter가 컨트롤러와 해당 메서드를 실행시킨다.

    • 항상 예를 들어 했던 PostController로 설명하겠다.
    • Handler Adapter가 PostController의 find()메서드를 실행했다.
    • find()메서드에 있는 Service 로직이 실행된다.
    • 해당 Service 로직에 있는 Repository가 DB에 접근하여 데이터를 가져온다.
    • Service 로직이 끝나고 컨트롤러는 출력하려는 view name을 찾는다.
  5. 실행시킨 결과를 Model에 받아서 전달한다.

  6. 5번 과정에서 Dispatcher Servlet은 컨트롤러가 출력한 view name을 알고 있다. view name을 가지고 View Resolver가 알맞은 view를 찾아 렌더링해준다.

    The ViewResolver provides a mapping between view names and actual views. - Spring Docs

  7. View Resolver가 어떤 View인지 정확하게 알려주게 되면 데이터를 전달한다.

  8. 결과를 응답한다.

참고자료

boostcourse - 웹 백엔드

profile
내 몸에는 꼰대의 피가 흐른다.

0개의 댓글