• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

ViewResolver 관련 질문 있습니다

21.10.05 22:23 작성 조회수 157

0

이번이 처음 듣는 것도 아니고, 몇 년 전에 구매하여 지금까지 여러번 반복해서 정주행 했는데 오늘 갑자기 잘 이해가 안가는 부분이 생겼습니다.

제가 지금 이해하고 있는 것은 이렇습니다.
1.  ViewResolver는 View를 resolving한다.
(ThymeleafViewResolver를 예로 들면 문자열을 View의 이름으로 해석해서 View를 resolving한다.)
2. 강의 속 핸들러는 @ResponseBody가 붙어 있으므로 View가 없다.
3. ViewResolver는 요청의 accept 헤더를 확인한다.
4. accept 헤더에 맞게 User라는 객체를 변환하여 응답 본문에 싣는 일은 HttpMessageConverters의 구현체가 한다.

일단 2번이 맞다면, ViewResolver는 강의 속 핸들러에서 어떤일을 하는 건가요? 아니면 응답 본문도 하나의 View로 볼 수 있는건가요? 아니면 ViewResolver가 @ResponseBody를 보고 View 없이 응답 본문만 있으면 된다고 판단하여 HttpMessageConverters에게 알려주는 일을 하는건가요??

3번도 맞고, 4번도 맞다면 ViewResolver는 자기가 변환 작업을 해줄 것도 아니면서 accept 헤더는 왜 확인하는 건가요? 오히려 변환작업을 하는 HttpMessageConverters가 확인하는 게 더 자연스러울 것 같은데.. 

ViewResolver가 어떤 일을 하는지, HttpMessageConverters와의 협업? 플로우가 어떻게 되는지 궁금합니다.

강의 나온지가 언젠데 지금 질문을 드려 죄송합니다 :( 좋은 강의 감사합니다. 항상 잘 보고 있습니다!

답변 1

답변을 작성해보세요.

1

@ResponseBody가 붙어있으면 ViewResolver는 아무일을 하지 않습니다. 정리하신대로 MessageConverter가 일을 합니다.

그리고 3번은 잘못된것 같습니다. ViewResolver가 확인하는게 아니라 여러개의 Converter중에 어떤 ContentType을 보고 어떤 Converter를 쓸지 판단하는 코드가 핸들러에 연결되어 있습니다. 정확히 어떤 인터페이스인지는 기억나지 않지만 ViewResovler는 아닙니다.

blackmamba님의 프로필

blackmamba

질문자

2021.10.06

감사합니다~