[SEB BE]Section 3. MVC기본개념 간단정리!

박두팔이·2023년 2월 13일
0

MVC

1. Model(M)

클라이언트에게 응답으로 돌려주는 작업의 처리결과 데이터를 Model이라고 한다.

  • Spring MVC기반의 웹 애플리케이션이 클라이언트의 요청사항을 전달받으면, 그 요청사항을 처리하기 위한 작업을 한다.
  • 결과 데이터를 클라이언트에게 응답으로 돌려준다.
  • 클라이언트의 요청사항을 구체적으로 처리하는 영역을 서비스 계층(@Service)이라고 한다.
  • 비즈니스 로직이란, 실제로 요청사항을 처리하기 위해 코드로 구현한 것이다.

2. View(V)

Model의 작업처리결과 데이터를 클라이언트 애플리케이션 화면에 보여지도록 리소스를 제공하는 역할을 하는 것이 View.

View의 형태?

1) HTML페이지를 출력한다.

  • HTML태그로 구성된 페이지에 Model 데이터를 채워넣은 후 최종적인 HTML페이지를 만들어서 클라이언트 측에 전송한다. -> JSP + JSTL, Tiles 등이 있다.

2) PDF, Excel등 문서형태로 출력한다.

  • Model데이터를 가공해서 PDF, Excel등 문서형태로 클라이언트에게 전송한다.
  • 문서 내에서 데이터가 동적으로 변경되어야 하는 경우 사용할 수 있다.

3) XML, JSON등 특정 형식의 포맷으로 변환한다.

  • 데이터만 전송한다. 프론트엔드에서 이 데이터를 기반으로 HTML을 만드는 방식이다.
  • 프론트/백의 영역이 확실하기 때문에 개발 및 유지보수가 상대적으로 용이하다.
  • JSON의 기본 포맷
    {”속성”:”값”} 형태.

Controller(C)

  • 클라이언트의 요청을 직접적으로 전달받는 엔드포인트가 된다.
  • Model과 View의 중간에서 상호작용을 해주는 역할을 한다.

코드예시

@RestController
@RequestMapping(path = "/v1/coffee")
public class CoffeeController {                 
    private final CoffeeService coffeeService;

    CoffeeController(CoffeeService coffeeService) {
        this.coffeeService = coffeeService;
    }

    @GetMapping("/{coffee-id}")  // (1)의 @GetMapping 애노테이션을 통해 클라이언트 측의 요청을 수신
    public Coffee getCoffee(@PathVariable("coffee-id") long coffeeId) {
        return coffeeService.findCoffee(coffeeId); // (2) 에서 CoffeeService 클래스의 findCoffee() 메서드를 호출해서 비즈니스 로직을 처리
    }
}

💡 MVC흐름
1️⃣ 클라이언트가 컨트롤러에게 요청하는 데이터를 전송한다.
2️⃣ 컨트롤러는 @Service로직을 처리한 뒤 Model데이터를 생성한다.
3️⃣ 컨트롤러에게 모델 데이터를 전달하면 컨트롤러는 View에게 Model데이터를 전달한다.
4️⃣ View가 응답 데이터를 생성하여 클라이언트의 화면에 보여준다.


핵심!

Spring MVC의 요청 처리 흐름

  • 클라이언트의 요청을 제일 먼저 전달 받는 구성요소는 DispatcherServlet이다.
  • DispatcherServlet은 HandlerMapping 인터페이스에게 Controller의 검색을 위임한다.
  • DispatcherServlet은 검색된 Controller 정보를 토대로 HandlerAdapter 인터페이스에게 Controller 클래스내에 있는 Handler 메서드의 호출을 위임한다.
  • HandlerAdapter 인터페이스는 Controller 클래스의 Handler 메서드를 호출한다.
  • DispatcherServlet은 ViewResolver에게 View의 검색을 위임한다.
  • DispatcherServlet은 View에게 Model 데이터를 포함한 응답 데이터 생성을 위임한다.
  • DispatcherServlet은 최종 응답 데이터를 클라이언트에게 전달한다.
  • DispatcherServlet이 애플리케이션의 가장 앞단에 배치되어 다른 구성요소들과 상호작용하면서 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라고 한다.
profile
기억을 위한 기록 :>

0개의 댓글