BACKEND/스프링 Spring

Spring MVC 패턴 구조

꾸준히개발하자 2023. 12. 17. 15:03

 

 

 

Spring MVC(Model-View-Controller)는 Spring 프레임워크의 웹 애플리케이션 개발을 위한 디자인 패턴 및 아키텍처입니다. Spring MVC는 사용자 인터페이스와 비즈니스 로직을 분리하여 유지보수성과 확장성을 향상시키는 데 중점을 둡니다. Spring MVC의 구조는 주로 다음과 같은 세 가지 주요 구성 요소로 나눌 수 있습니다:

  1. Model (모델):
    • 모델은 애플리케이션의 데이터와 비즈니스 로직을 나타냅니다.
    • 비즈니스 로직을 처리하고 데이터를 저장, 검색, 조작하는데 사용됩니다.
    • 모델은 POJO(Plain Old Java Object)로 표현되며, Spring에서는 @Entity 어노테이션이 붙은 JavaBeans, JPA 엔터티 등을 모델로 사용합니다.
  2. View (뷰):
    • 뷰는 사용자에게 표시되는 화면과 사용자 인터페이스를 나타냅니다.
    • HTML, JSP, Thymeleaf, FreeMarker 등과 같은 템플릿 엔진을 사용하여 모델의 데이터를 표시하고 사용자에게 보여줍니다.
    • 뷰는 모델의 상태에 따라 동적으로 업데이트되며, 사용자와 상호작용하는 화면 부분을 담당합니다.
  3. Controller (컨트롤러):
    • 컨트롤러는 사용자 입력 및 이벤트를 처리하고, 모델의 업데이트 및 뷰의 선택을 관리합니다.
    • 클라이언트의 요청을 처리하고, 그에 따라 모델의 데이터를 업데이트하고 적절한 뷰를 선택하여 응답을 생성합니다.
    • 주로 Spring에서는 @Controller 어노테이션이 붙은 클래스로 표현되며, 메서드 단위로 요청을 처리하는데, 이를 통해 하나의 컨트롤러에서 여러 동작을 처리할 수 있습니다.

Spring MVC 애플리케이션은 주로 다음의 흐름으로 동작합니다:

  1. 클라이언트가 웹 브라우저 등을 통해 HTTP 요청을 보냅니다.
  2. Dispatcher Servlet이 요청을 받고, Handler Mapping을 사용하여 어떤 컨트롤러가 해당 요청을 처리할지 결정합니다.
  3. 선택된 컨트롤러가 비즈니스 로직을 수행하고 모델을 업데이트합니다.
  4. 모델의 상태에 따라 적절한 뷰를 선택하여 결과를 생성합니다.
  5. Dispatcher Servlet이 클라이언트에게 응답을 보냅니다.

 

 

Spring MVC 구성 요소:

  1. Dispatcher Servlet:
    • 모든 클라이언트 요청의 진입점으로 동작합니다.
    • 클라이언트의 요청을 받아 해당 요청을 처리할 컨트롤러를 찾아줍니다.
    • web.xml 파일에 등록하거나 Spring Boot에서는 자동으로 등록됩니다.
  2. Handler Mapping:
    • 클라이언트의 요청 URL에 해당하는 컨트롤러를 찾아주는 역할을 합니다.
    • @RequestMapping 어노테이션 등을 사용하여 URL 매핑을 지정할 수 있습니다.
  3. Controller:
    • 클라이언트의 요청을 처리하고, 비즈니스 로직 수행 후 모델을 업데이트하고 뷰를 선택하는 역할을 합니다.
    • @Controller 어노테이션을 사용하여 선언하며, 메서드에는 @RequestMapping 등을 사용하여 URL 매핑을 지정합니다.
  4. Model:
    • 비즈니스 로직의 처리 결과를 담고 있는 데이터 객체입니다.
    • 뷰에 전달되어 뷰에서 데이터를 표시하게 됩니다.
    • Model 객체나 ModelMap, ModelAndView 등을 사용하여 모델 데이터를 저장하고 전달합니다.
  5. View:
    • 사용자에게 결과를 표시하는 부분으로, HTML, JSP, Thymeleaf 등을 사용합니다.
    • InternalResourceViewResolver 등을 통해 뷰를 해석하고 템플릿 엔진을 적용할 수 있습니다.

Spring MVC 동작 흐름:

  1. 클라이언트 요청:
    • 클라이언트(브라우저 등)에서 HTTP 요청을 보냅니다.
  2. Dispatcher Servlet 동작:
    • Dispatcher Servlet이 요청을 받아 처리합니다.
    • Handler Mapping을 통해 어떤 컨트롤러가 해당 요청을 처리할지 결정합니다.
  3. Controller 처리:
    • 선택된 컨트롤러가 클라이언트의 요청을 처리하고 비즈니스 로직을 수행합니다.
    • 필요한 경우 모델을 업데이트하고, 뷰 이름을 반환합니다.
  4. View Resolver 동작:
    • View Resolver는 뷰 이름을 실제 뷰 객체로 변환합니다.
    • 주로 JSP, Thymeleaf, FreeMarker 등의 템플릿 엔진을 사용하여 뷰를 렌더링합니다.
  5. 클라이언트 응답:
    • 최종적으로 Dispatcher Servlet은 클라이언트에게 렌더링된 뷰를 응답으로 전송합니다.

이러한 구조를 통해 Spring MVC는 모델, 뷰, 컨트롤러를 분리하여 애플리케이션의 유지보수성, 확장성, 테스트 용이성을 높일 수 있습니다.