Developer/Spring eGov4.0 (Java11, Tomcat9)

Spring, 스프링의 MVC

단님 2024. 9. 26. 00:55
728x90
MVC 모델

 

스프링의 MVC (Model-View-Controllor) 모델은 웹 어플리 케이션 개발에서 가장 많이 사용되는 구조중 하나

MVC 패턴은 애플리 케이션 비즈니스 로직 , UI , 그리고 이들 간의 상호작용을 분리하는데 중점을 둔다.

이 구조를 사용하면 코드의 유지보수와 확장성이 좋아진다.

 

MVC 모델의 흐름

 

  • 사용자 요청: 사용자가 웹 브라우저를 통해 특정 URL을 요청하면, 요청은 DispatcherServlet으로 전달.
  • Controller: DispatcherServlet은 해당 요청을 처리할 컨트롤러를 찾아서 매핑하고,
    컨트롤러가 비즈니스 로직을 처리한다. 필요한 경우 모델 데이터를 준비하고, 이를 뷰에 전달할 준비를 한다.
  • Model: 비즈니스 로직에서 처리된 데이터를 모델 객체로 담아 컨트롤러에서 뷰로 전달한다.
    이때 데이터베이스에서 가져온 정보나 다른 서비스로부터 받은 데이터를 사용하게 된다.
  • View: 컨트롤러가 반환한 이름에 해당하는 템플릿 파일을 이용해,
    모델 데이터를 HTML로 변환하고, 사용자의 브라우저에 표시한다.
  • 응답: 최종적으로 사용자에게 렌더링된 페이지가 브라우저에 표시된다.
Spring에서의 용어 변경

스프링의 용어변경은 전통적 서블릿 기반 웹개발의 방식에서

스프링 MVC 아키텍쳐로 전환되면서 생긴 개념의 차이로 비롯된다.

각 부분의 역할을 명확히하고 기능을 캡슐화 되었다.

전통적 서블릿 기반의 용어와 스프링 mvc 용어가 어떻게 변화 했는지 알아보자

 

1. Front Controller → DispatcherServlet

 

  • Front Controller: 전통적인 웹 애플리케이션에서는 클라이언트의 모든 요청을 하
    나의 중앙 컨트롤러(서블릿)가 처리했다.
  • DispatcherServlet: 스프링 MVC에서 Front Controller 역할을 하는 것이 DispatcherServlet이다.
    모든 HTTP 요청을 중앙에서 받아 각 컨트롤러와 뷰로 분배하는 역할을 한다.

 

2. ServiceFactory → Handler Mapping

 

  • ServiceFactory: 전통적으로 애플리케이션의 비즈니스 로직을 처리하는 객체(서비스)를 관리하고,
    각 요청을 처리할 서비스를 찾아주는 역할을 했다.
  • Handler Mapping: 스프링 MVC에서는 Handler Mapping이 클라이언트 요청을 처리할 컨트롤러(핸들러)를 찾아주는 역할을 한다. 요청 URL에 따라 적절한 Controller메서드를 매핑한다.

 

3. Interface Controller → Controller

 

  • Interface Controller: 전통적으로 특정 작업을 처리하는 인터페이스를 만들어 모든 컨트롤러들이 같은 규칙을 따르도록 했었다.
  • Controller: 스프링에서는 @Controller 애노테이션을 사용하여 비즈니스 로직을 처리하고, 모델을 뷰에 전달하는 역할을 하는 컨트롤러를 만들 수 있다. 이 컨트롤러는 MVC 패턴에서 'C'에 해당하는 역할을 한다.

 

4. ModelAndView 객체 → Model과 View로 분리

 

  • ModelAndView: 전통적으로는 ModelAndView 객체를 사용해 **데이터(Model)와 뷰(View)**를 함께 관리했다.
    모델 객체를 설정하고, 뷰로 데이터를 전달하고, 뷰를 지정하는 역할을 했다.
  • Model과 View의 분리: 스프링에서는 ModelView를 명확히 분리한다.

 

5. ViewResolver → View를 찾는 역할

 

  • ViewResolver: 전통적인 방식에서는 개발자가 직접 forward() 메서드를 통해 요청을 특정 JSP 파일로 포워딩했다.
  • ViewResolver: 스프링 MVC에서는 뷰 이름만 반환하면 ViewResolver가 해당 이름에 맞는 뷰(JSP, Thymeleaf 등)를 찾아준다.

 

 

 

스프링의 MVC 패턴을 병원에 비유하여 설명한다면 ?

 

1. DispatcherServlet - 접수 담당 직원

- 방문자가 병원에 들어오면 가장 먼저 만나게 되는 사람

- 방문자의 상태에 따라 적절한 진료과(컨트롤러)로 안내하고, 필요할 경우 진료 기록(모델)을 준비하여 의사(뷰)에게 전달

 

2. HandlerMapping - 안내 데스크

- 병원의 각 부서를 안내하는 역할

- 태에 맞는 진료과를 찾을 수 있도록 안내판(HandlerMapping)을 통해 올바른 의사(컨트롤러)에게 연결

 

3. Controller - 의사

- 의사는 방문자(클라이언트)의 상태를 진단하고, 필요한 검사를 하거나 치료 계획을 세움

- 이 과정에서 필요한 정보를 취합하여 보고서(모델)를 작성하고, 이를 기반으로 환자에게 설명하거나 처방(뷰)을 제공

 

4. Model - 진료 기록

- 진료 기록은 환자의 병력, 현재 상태, 검사 결과 등을 담고 있는 문서

- 의사(컨트롤러)가 작성하고, 환자(클라이언트)에게 전달되기 전에 간호사나 약사(뷰)에 의해 처리

 

5. ViewResolver - 조제실

- 의사의 처방을 바탕으로 실제 약을 준비하는 곳

- 사의 처방전(뷰 이름)을 받아 적절한 약(실제 뷰)으로 변환하여 환자에게 전달

 

6. View -

- 약은 의사가 환자에게 줄 치료제

- 조제실(ViewResolver)에서 준비된 약은 환자(클라이언트)에게 직접 전달되며, 이 약을 통해 환자는 치료받음.

- 사용자가 볼 수 있는 최종 결과물로, HTML, PDF, JSON과 같은 형태로 제공