개발 낙서장

Spring MVC 본문

Java

Spring MVC

권승준 2024. 1. 18. 12:08

MVC

어떤 건물을 건축할 때 설계도 없이 그냥 되는대로 막 짓는 사람은 거의 없을 것이다. 건축 설계도를 만드는 방법, 건축 양식 등을 미리 생각해두고 작업을 하는데 프로그래밍에도 디자인 패턴이라는 것이 존재한다.
개발을 할 때 효율적인 방법들을 패턴화해놓은 것을 디자인 패턴이라고 하는데 그 중에 MVC 패턴이 있다.

MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, COntroller로 각각 분리해 역할을 부여한 패턴이다.

  • Model : 데이터와 비즈니스 로직을 담당한다. DB와 연동해 데이터를 불러오고 저장하는 등의 작업을 수행한다.
  • View : UI 부분을 담당한다. 사용자가 보는 모든 것들을 디자인하고 구현한다.
  • Controller : Model과 View 사이의 상호작용을 제어한다. 사용자의 입력을 받아 Model을 구성하고 그 결과를 View에 출력한다.

Spring MVC

Spring Web MVC는 Servlet API를 기반으로 구축된 독창적인 웹 프레임워크로, 처음부터 Spring Framework에 포함되어 왔으며, 정식 명칭인 "Spring Web MVC"는 소스 모듈(spring-webmvc)의 이름에서 따왔으나, "Spring MVC"로 더 일반적으로 알려져 있습니다.

Spring MVC는 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는 Front Controller 패턴을 중심으로 설계되어 있으며 이 모델은 유연하고 다양한 워크 플로우를 지원합니다.

https://docs.spring.io/spring-framework/reference/web/webmvc.html

Spring 공식 문서에 있는 설명이다. 쉽게 표현하면 Spring에도 MVC 패턴을 적용해 HTTP 요청을 효율적으로 처리할 수 있도록 하는 것이다.

Survlet

자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말한다.

  1. 사용자가 클라이언트를 통해 서버에 요청
  2. 요청을 받은 Survlet 컨테이너는 HttpSurvletRequest, HttpSurvletResponse 객체 생성
  3. 설정된 정보를 통해 Survlet을 분석하고 어떤 Survlet에 대한 요청인지 찾는다.
  4. 해당 Survlet에서 servise 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출
  5. 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client에 반환
  6. 응답이 완료되면 생성한 Survlet 객체는 소멸

DispatcherSurvlet

모든 API 요청을 위의 방식으로 구현한다면 각 요청에 따른 모든 Survlet을 구현해야 한다. 따라서 이런 API 요청을 효율적으로 처리하기 위해 Spring에서는 DispatcherSurvlet을 사용한다.

DispatcherSurvlet이란 HTTP의 모든 요청을 가장 먼저 받아 처리하는 Front Controller이다.

  1. 클라이언트에서 요청이 발생하면 DispatcherSurvlet에서 요청을 분석
  2. 분석한 요청을 Handler Mapping을 통해 Controller를 찾아 요청을 전달
    ex) GET /api/hello → HelloController 의 hello() 함수
  3. Controller는 요청에 맞게 작업을 해서 데이터(Model)과 화면(View) 정보를 전달
  4. ViewResolver를 통해 View에 Model를 적용
  5. 클라이언트에게 응답으로 View를 전달

이렇게 보면 잘 이해가 안 되니 예시를 통해 다시 정리하면, 만약 네이버에서 마이 페이지를 접근하는 요청을 한다면 어떤 작업이 이루어질까?

  1. 마이 페이지를 가져오는 GetMapping해 Controller에 전달한다.
  2. Controller에서 마이 페이지를 가져오는 mypage.html(예시)를 View에, 내 정보들(아이디, 비밀번호, 포인트 등)을 Model에 담는다.
  3. mypage.html에 내 정보들을 채워준다.
  4. 완성된 View를 브라우저에 띄운다.

만약 이런 FrontController가 없었다면 일련의 과정들을 전부 if문이나 각각의 알고리즘을 사용해 전부 직접 구현해야 했을 것이지만 Spring에서 해당 기능들을 제공해주기에 굉장히 효율적으로 작업을 처리할 수 있다.

'Java' 카테고리의 다른 글

데이터베이스(DB, DataBase)  (0) 2024.02.13
[Spring] Filter 예외 처리  (0) 2024.02.05
[Spring] 쿠키와 세션  (0) 2024.01.25
Jackson  (0) 2024.01.18
Lombok - 롬복  (0) 2024.01.18
Comments