카테고리 없음

MVC 구조를 알아보자

daram 2022. 3. 26. 12:26

 

 

Client -> DispatcherServlet


DispatcherServlet은 가장 앞단에서 Client의 요청을 받는 부분입니다.

가장 앞단에서 요청을 받아 FrontController 라고도 불립니다.

이것은 Spring에 의해 미리 구현이 되어있는 상태입니다.

DispatcherServlet -> HandlerMapping -> DispatcherServlet


DispatcherServlet은 Request로 부터 URL을 받은 상태입니다.

URL을 처리해줄 API를 찾아야겠죠?

 

HandlerMapping은 API path와 Controller 메서드가 매칭이 되어있는 상태입니다.

해쉬함수에 key로 API pat를 value로 Controller 메서드가 저장되어 있다고 생각하면 편할 듯 합니다.

DispatcherServlet이 HandlerMapping에 URL을 던져주면 그걸 처리할 Controller 메서드를 전달받을 수 있습니다.

DispatcherServlet -> Controller


HandlerMapping으로 부터 어떤 Controller의 메서드가 일을 할지 확정이 되었기 때문에

직접 가서 Request의 정보 ("Model")를 전달합니다.

@RequestParam 이런 어노테이션으로 값을 받을 수 있는 것도 DispatcherServlet이 전달을 해주었기 때문이지요.

 

@Controller
public class ItemSearchController {
		@GetMapping("/api/search")
    @ResponseBody
    public List<ItemDto> getItems(@RequestParam String query) {
			// ...
		}
}

Controller -> DispatcherServlet


Client로 받은 API요청을 처리하였습니다.

이제 "Model"정보와 "View"정보를 DispatcherServlet으로 전달을 합니다.

@ResponseBody 어노테이션이나 @RestController를 사용할 경우 "Model"정보와 "View"정보는 따로 전달하지 않겠네요.

(바로 HTTP body에 값을 집어넣어 버리기 때문입니다.)

DispatcherServlet -> ViewResolver


View에 Model을 적용하는 역할을 합니다.

thymeleaf를 활용해보았다면 어떤 내용인지 이해할 수 있을 것이라고 생각합니다. 

결과로 나온 view를 client에게 전달합니다.