관리 메뉴

JIE0025

[Error] 근본적인 문제의 원인 파악하기 : Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause 본문

백엔드/이슈, 트러블슈팅

[Error] 근본적인 문제의 원인 파악하기 : Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause

Kangjieun11 2023. 4. 28. 17:45
728x90

 

✅ 개요

 

친구가 에러를 만났는데 도통 해결할 수 없다해서 도움을 요청했다.

 

나도 처음 만나본 에러메세지였는데 해결 방법을 떠올리는 과정에서 

역시 어떤 기술을 공부할때엔 동작원리부터 공부해야한다는 것을 다시 한번 느끼게 되어서 이 글을 작성한다.

 

 

 

✅ 에러메세지

Hibernate: select b1_0.id, b1_0.created_at, b1_0.post_content, b1_0.post_image, b1_0.post_purpose, b1_0.post_title, b1_0.user_id from board b1_0 2023-04-26T00:39:40.857+09:00 ERROR 9968 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [board]: would dispatch back to the current handler URL [/board] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause

 

 

에러메세지를 쭉 읽다 보면 눈에 띄는 문장은 두가지였다.

 

1. would dispatch back to the current handler URL [/board] again

현재 핸들러 URL [/board]로 다시 디스패치(보낸다)합니다.

 

2. Check your ViewResolver setup!

ViewResolver 설정을 확인하라!

 

 

 

 

 

✅ 해결 과정

 

두 문장을 읽었을 때 첫번째로 의문이든것은

ViewResolver가 왜 에러메세지에서 등장했을까? 였다.

 

 

먼저 친구의 코드는 다음과 같았다. 

 

내가 알기로 ViewResolver라는 것은 객체를 View 영역으로 전달하기 위해 알맞은 View 정보를 설정하는 역할 인데, 

CSR방식이냐, SSR방식이냐에 따라 ViewResolver가 작동할수도 안할수도 있다는 것을 알고 있었따.

 

 

 

그래서 친구가 어떤 프로젝트를 하고 있는건지에 대해 먼저 물어보았다. 

@Controller를 사용한것이 SSR프로젝트를 진행하고 있어서 였는지 파악하면, 해결 방안에 조금 더 가까워질수 있을것으로 판단했다.

 

 

 

💡 @RestController와 @Controller의 차이점

 

내가 아는 RestController는 Controller의 역할 + ResponseBody이다.

 

즉 Controller는 View를 반환하기 위함이고

RestController는 JSON을 반환한다.

 

 

 

 

📣  결국 근본적인 원인과 해결은!?

 

뷰리졸버 설정상 문제가 있다는 이야기를 보고 뷰리졸버 설정이 어디있지? 를 보러가러 갈수도 있는데

이번 경우엔 절대로 뷰리졸버 설정과 관련해 깊게 들어가면 안된다.

 

 

이문제는 React - Spring boot  협업프로젝트로 HTTP 통신과 JSON 요청 응답 데이터를 통해 통신하므로, RestController를 사용하면, 뷰리졸버를 아예 타지 않게 함으로써 해결할 수 있다.

 

 

해결! 😉