Spring MVC란?
Spring의 모듈 중에는 웹 계층을 담당하는 몇 가지 모듈이 있습니다.
그중 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데,
그 모듈의 이름은 spring-webmvc입니다.
spring-webmvc를 줄여서 Spring MVC라 부르고 있고, Spring MVC가 웹 프레임워크의 한 종류이기 때문에
Spring MVC 프레임워크라고도 부릅니다.
Spring MVC에서 MVC의 의미를 살펴보도록 하겠습니다.
Model
Model은 Spring MVC에서 M에 해당합니다.
Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 합니다.
이렇게 처리한 작업의 결과 데이터를 클라이언트에게 응답으로 돌려줘야 하는데, 이때 클라이언트에게 응답으로 돌려주는 작업의 처리결과 데이터를 Model이라고 합니다.
다시 말해, Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분입니다.
- 클라이언트의 요청 사항을 구체적으로 처리하는 영역을 서비스 계층(Service Layer)라 하며, 실제로 요청 사항을 처리하기 위해 Java 코드로 구현한 것을 비즈니스 로직(Business Logic)이라고 합니다.
View
View는 Spring MVC에서 V에 해당합니다.
View는 비즈니스 로직의 처리 결과(Model data)를 이용하여 사용자 인터페이스 화면에 보이는 리소스(Resource)를 제공하는 역할을 합니다.
View의 형태는 아래와 같이 나눌 수 있습니다.
- HTML 페이지 출력
- HTML 페이지를 직접 렌더링하여 클라이언트 측에 전송하는 방식
- HTML 태그로 구성된 페이지에 Model 데이터를 채운 후, 최종적인 HTML 페이지를 만들어서 클라이언트에 전송
- PDF, Excel등의 문서 형태로 출력
- Model data를 가공하여 PDF문서나 Excel 문서를 만들어 클라이언트 측에 전송하는 방식
- 문서 내에서 데이터가 동적으로 변경되어야 하는 경우 사용할 수 있는 방식
- XML, JSON 등 특정 형식의 포맷으로 변환
- Model 데이터를 특정 프로토콜 형태로 변환해서 변환된 데이터를 클라이언트 측에 전송
- 이 방식의 경우 프론트엔드 측에서 수신한 데이터를 기반으로 HTML 페이지를 만드는 방식
- 위 방식의 장점
- 프론트엔드 영역과 백엔드 영역을 구분하여 개발 및 유지보수 용이
- 프론트엔드 측에서 비동기 클라이언트 애플리케이션을 만드는 것이 가능해짐
Controller
Controller는 Spring MVC에서 C에 해당됩니다.
Controller는 클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트(Endpoint)로써 Model과 VIew의 중간에서 상호 작용을 해주는 역할을 합니다.
Model과 VIew는 서로 연결돼 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어줍니다.
예제 코드
@RestController
@RequestMapping(path = "/v1/menu")
public class MenuController {
private final MenuService menuService;
MenuController(MenuService menuService{
this.menuService = menuService;
@GetMapping("/{menu-id}") // (1)
public Menu getMenu(@PathVariable("menu-id") long menuId) {
return menuService.findMenu(menuId); // (2)
}
}
Spring MVC에서 Controller에 해당되는 영역을 코드로 작성하였습니다.
- (1)의 @GetMapping 어노테이션을 통해 클라리언트 측의 요청을 수신합니다.
- (2)에서 MenuService 클래스의 findMenu() 메서드를 통해 비즈니스 로직을 처리합니다.
- (2)에서 비즈니스 로직을 처리한 값인 Menu가 Model 데이터가 됩니다.
- getMenu()는 Model 데이터를 리턴하는데, 리턴되는 이 Model 데이터는 위 코드 예제에서는 확인할 수 없지만, Spring View가 전달받아 JSON 포맷으로 변경한 후에 클라이언트 측에 전달합니다.
'Spring > Spring MVC' 카테고리의 다른 글
[Spring MVC] Spring MVC 동작 방식 (0) | 2023.04.14 |
---|