Spring 06 - Spring MVC Flow


스프링 MVC

스프링 MVC는 자바 기반의 웹 애플리케이션 개발에서 가장 널리 사용되는 프레임워크 중 하나이며, Model-View-Controller (MVC) 패턴을 사용하여 웹 애플리케이션을 구성하고, 코드의 분리와 유지 보수를 쉽게 도와준다.

  • Model(모델): 애플리케이션의 데이터와 비즈니스 로직을 담당. 데이터를 처리하고, 뷰에 전달할 준비
  • View(뷰): 사용자에게 보여지는 UI 담당. 모델에서 전달된 데이터를 기반으로 화면을 렌더링
  • Controller(컨트롤러): 사용자의 요청을 처리, 적절한 모델과 뷰를 선택하는 역할. 사용자의 입력을 받아 모델을 갱신하고, 그 결과를 뷰에 전달

MVC 패턴을 이용하여 비즈니스 로직과 프레젠테이션 로직을 분리되게 만들어, 각각의 요소를 재사용하거나 유지보수를 쉽게 할수 있다.

DispatcherServlet

FrontController
출처: ‘https://www.slideshare.net/AnselmKim/3-mvc-77568773’.

스프링 MVC에 대한 구조는 크게보면 위와 같다. 클라이언트로부터 들어오는 모든 요청을 하나의 대표 컨트롤러인 프론트 컨트롤러가 처리하게 만든다. 이를 스프링에서는 DispatcherServlet이라 한다.

DispatcherServlet은 Dispatcher(보내는 자) + Servlet(웹 요청을 간단한 메서드 호출만으로 반환해주는 기술)이 합쳐진 단어다. 즉, 클리아온트 요청을 받는 서블릿 역할과 받은 요청을 적절한 컨츠롤러를 찾아 보내는 디스패쳐 역할을 하는 스프링 MVC 구조의 핵심 요소이다.

스프링 작동 흐름

'스프링 흐름'
출처: ‘https://ss-o.tistory.com/160’

  1. Request
    클라이언트로 들어온 요청을 프론트 컨트롤러인 DispatcherServlet이 받는다.
  2. Handler Mapping
    DispatcherServlet이 들어온 요청의 URL과 매칭되는 Controller를 Handler Mapping을 통해 검색
  3. Hanlder Adapter
    검색된 Controller를 Handler Adapter에 처리 요청
  4. Controller
    클라이언트 요청을 받아들여 비즈니스 로직 처리 (Service - Repository - DB) 이후 View에 전달할 객체를 Model에 저장
  5. return View name
    Controller가 비즈니스 로직 처리 이후 View에 해당되는 View이름 반환
  6. View Resolver
    Controller가 반환한 view이름 토대로 View를 찾기
  7. View
    찾은 View에 Model에 저장된 결과를 반영하여 랜더링
  8. Response
    랜더링된 View결과를 클라이언트에 전달

스프링 웹 MVC로 만들때 개발자가 직접 만들어야 하는 부분은 Controller, Service, repository, 그리고 view이다. 그외 나머지 부분은 스프링에서 자동으로 제공될 것이다. (+ Service/repository간 전달하는 도메인 객체도 만들어 줘야 함)
아래는 실제로 아주 간단하게 스프링 프레임워크를 이용하여 게시판 프로젝트를 만들 때 사용한 것이다.
'스프링 프로젝트 코드'