인프런 커뮤니티 질문&답변

11 1님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

정리

@ResponseBody를 쓰더라도 어댑터가 ModelAndView를 반환하나요?

해결된 질문

작성

·

156

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

1.jpg

@ResponseBody나 HttpEntity를 사용하면 뷰 리졸버를 사용하지 않는다고 기억하고 있습니다. 그러면 핸들러 어댑터에서 반환하는 건 ModelAndView가 아닌 건가요?

저는 아래 DispatcherServlet의 doDispatch() 코드를 보고

mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
if (asyncManager.isConcurrentHandlingStarted()) {
    return;
}

(mv 타입은 ModelAndView)

핸들러 어댑터는 항상 ModelAndView를 반환한다고 이해했던 거로 기억합니다. 일단 ModelAndView를 반환하지만, 뷰 리졸버까지 가진 않는다고 생각했었습니다.

그런데 HttpMessageConverter를 배울 때 뷰 리졸버를 사용하지 않는다고는 배웠지만 ModelAndView에 대한 언급이 없었던 거 같아서 확신이 안 듭니다.

@ResponseBody를 사용할 경우 아래 그림은 어떤 식으로 바뀌는 걸까요? 핸들러 어댑터가 ModelAndView를 반환하고, 뷰 리졸버나 뷰 render() 호출 없이 DispatcherServlet에서 바로 응답을 보낸다. 이렇게 생각하면 될까요?

1.jpg

답변 1

1

안녕하세요, 인프런 AI 인턴입니다.

@ResponseBody를 사용하는 경우와 관련해 저는 질문자님의 이해를 돕기 위해 유사한 내용을 다루고 있는 기존 질문과 그 답변 링크를 추천해드리고자 합니다.

  1. @ResponseBody인 경우의 실행흐름이 궁금합니다.“에서는 @ResponseBody 애노테이션이 붙은 컨트롤러의 메서드가 어떻게 실행되는지에 대한 질문과 이에 대한 답변을 제공합니다. 강사님께서는 @ResponseBody와 같이 뷰를 렌더링하지 않는 작업들에서는 뷰 생성에 관련된 뒷단의 작업들(ViewResolver와 View)이 이루어지지 않는다고 설명하십니다. DispatcherServlet에서 실제 응답 메시지가 만들어져 클라이언트에 전송된다고 답변하셨습니다. 이는 귀하의 질문에 직접적인 답변이 될 수 있습니다.

  2. html 대신 객체를 반환할 때 Dispatcher Servlet에서는 어떻게 처리가 되는걸까요??” 역시 비슷하게 @ResponseBody 또는 관련 기술을 사용하여 HTML 대신 객체를 반환할 때의 DispatcherServlet의 처리 과정에 대한 궁금증을 다루고 있습니다. 공식 서포터즈의 답변에 따르면, view가 없으면 view와 관련된 처리를 하지 않으며, 대신 응답 메시지의 바디에 직접 값을 쓰게 됩니다.

  3. HTTP 메시지 컨버터 사용 시 핸들러 어댑터의 반환 값“은 핸들러 어댑터가 @ResponseBody를 사용하여 HTTP 메시지 컨버터를 통해 값을 처리할 때의 반환값에 대해 다루고 있는데, 이 역시 귀하의 질문과 관련이 깊습니다. 공식 서포터즈는 핸들러가 반환하는 값과 ModelAndView 객체의 사용에 대해 설명합니다.

  4. HTTP 메시지 컨버터가 작동 과정“에서는 HTTP 메시지 컨버터가 작동되는 과정을 설명하며 @ResponseBody를 사용했을 때의 흐름에 대해서도 설명합니다. 이 역시 @ResponseBody 사용 시 Dispatcher Servlet에서의 처리 과정에 대한 이해를 돕습니다.

이러한 답변들을 통해 @ResponseBody 사용 시 DispatcherServlet과 핸들러 어댑터의 동작에 대해 보다 명확히 이해하시기 바랍니다. @ResponseBody가 붙은 메서드의 경우, 일반적인 뷰를 리턴하는 것과 다르게 HTTP 응답 바디에 직접 데이터를 작성하여 반환하는 과정이 포함되며, ModelAndView 객체의 사용 및 뷰 리졸버를 통한 뷰 처리 과정은 건너뛰게 된다는 점을 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

11 1님의 프로필 이미지
11 1
질문자

검색할 땐 못 찾았는데.. 해당 단원에서 검색해야 나오는 걸 이제 알았네요. 원하는 답을 찾았습니다.

감사합니다.

 

결론은 ModelAndView mv엔 null이 들어가는 거군요?

https://www.inflearn.com/questions/422763/responsebody%EC%9D%B8-%EA%B2%BD%EC%9A%B0%EC%9D%98-%EC%8B%A4%ED%96%89%ED%9D%90%EB%A6%84%EC%9D%B4-%EA%B6%81%EA%B8%88%ED%95%A9%EB%8B%88%EB%8B%A4

11 1님의 프로필 이미지

작성한 질문수

질문하기