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

비가싫어요님의 프로필 이미지
비가싫어요

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

정리

스프링 부트가 errorPage 자동으로 등록할 때 질문입니다.

작성

·

249

1

스프링부트가 제공하는 기능 중 errorPage를 자동으로 등록해주고 /error 라는 경로로 기본 오류 페이지를 설정한다는 부분에서 이해가 되지 않는 것이 있습니다.

이 때 /error라는 경로는 URL 경로를 의미하는 것인가요 아니면 에러 페이지가 있는 파일 경로를 의미하는 것인가요?

답변 1

4

안녕하세요.JUNN 님, 공식 서포터즈 OMG입니다.

-
"스프링부트 - 오류페이지1" 에서 영한님이 설명해주시는데요, 실제 스프링부트가 구현한 클래스의 코드와 같이 보시면 이해하시는 데에 도움이 됩니다.

  • 메뉴얼을 보시면 아래와 같이 ErrorMvcAutoConfiguration 클래스에서 오류 페이지를 자동 등록해준다고 나와있습니다.

imageimage에러페이지를 등록하는 registerErrorPages를 보면 new ErrorPage(인자) 코드에서 인자로 URL경로를 받는 것을 확인하실 수 있습니다.

여기서 인자는 this.dispatcherServletPath.getRelativePath(this.properties.getError().getPath())

dispatcherServletPath에서 상대경로를 가져오는데, 여기서 상대경로란 설정파일에서 에러 경로로 지정한 (/error 겠죠?) 값을 가져옵니다.

그러면 강의에서 설명한 아래 내용에 대해 확인해 보았습니다.

image

다음으로 BasicErrorController를 보면 마찬가지로 강의에서 설명하시는데,

image

2분 45초 설명을 보시면 "외부에서 경로를 설정할 수 있는데 없으면 /error로" 간다고 설명하십니다.

@RequestMapping에서 분기처리로 별도의 에러경로가 없으면 "/error"에 대한 처리를 받도록 되어있습니다.

image클래스 레벨에서 경로를 받고, 메서드 레벨에서는 두 가지 경우에 대해서 처리하고 있는데요, 여기서 봐야 할 것은 위에 있는

@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
   HttpStatus status = getStatus(request);
   Map<String, Object> model = Collections
         .unmodifiableMap(getErrorAttributes(request, getErrorAttributeOptions(request, MediaType.TEXT_HTML)));
   response.setStatus(status.value());
   ModelAndView modelAndView = resolveErrorView(request, response, status, model);
   return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);
} 

이 코드입니다.

 ModelAndView modelAndView = resolveErrorView(request, response, status, model);
 return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);

별도로 생성될 ModelAndView(에러 페이지)가 있다면 해당 뷰를 반환하고 그렇지 않은 경우

viewName이 error인 화면을 생성해서 반환합니다.

image

영한님 설명, 제 설명, 실제 코드, 자료 등을 다시 한번 곱씹으면서 보시면 이해 되실꺼에요 ^^

-
감사합니다.

비가싫어요님의 프로필 이미지
비가싫어요

작성한 질문수

질문하기