강의

멘토링

로드맵

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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

스프링 부트 - 오류 페이지1

400번대 에러 응답이 모두 404.html로 됩니다.

작성

·

39

0

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

[질문 내용]

1. resources/templates/error/4xx.html 만 존재할 때

  • localhost:8080/error-404 -> 4xx.html 응답

  • localhost:8080/error-400 -> 4xx.html 응답

  1. resources/templates/error/4xx.html, resources/templates/error/404.html 이 모두 존재할 때

  • localhost:8080/error-404 -> 404.html 응답

  • localhost:8080/error-400 -> 404.html 응답 -> 여기서 4xx.html이 응답해야하는거 아닌가요?

파일 경로에는 문제가 없는데 페이지 소스를 봐도 404.html이 맞습니다.

답변 2

0

우리가 /error-400으로 요청한다고 해서 서버에서 400 에러가 발생하는 것은 아닙니다. 지금은 ServletExceptionController/error-404 경로에 매핑된 컨트롤러 메서드 내부에서 sendError(404)를 호출하므로 경로와 발생 에러가 일치하는 것입니다.

따라서 작성자님의 의도대로 하려면 ServletExceptionController 코드에 아래 코드를 추가해주시고, /error-400으로 요청하시면 4xx.html이 렌더됩니다.

@GetMapping("/error-400")
public void error400(HttpServletResponse response) throws IOException {
    response.sendError(400, "400 오류!");
}

질문자님의 현재 상태에서의 /error-400 요청은 존재하지 않는 페이지에 대한 요청이고, 이 경우에는 기본적으로 404 에러가 발생합니다.

요청 경로에 400이라고 적는다고 해서 마법처럼 400 에러가 발생하지 않는다는 것이죠.

 

비슷한 예로, 컨트롤러 메서드가 존재하지 않는 /error-505로 요청해도 404 not found 에러 페이지가 렌더됩니다.

0

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

질문해주신 내용은 Spring Boot의 기본 오류 페이지 처리 순서와 관련이 있습니다. Spring Boot에서는 기본적으로 error 페이지를 뷰 리졸버(view resolver)를 사용하여 templates 디렉토리 아래의 error 폴더에서 찾습니다.

먼저 두 가지 경우로 나눠보면,

  1. resources/templates/error/4xx.html 만 존재할 때: 모든 4xx 오류에 대해 4xx.html 파일이 렌더링됩니다. 구체적인 404 에러 페이지가 없기 때문에 4xx 에러 페이지가 사용됩니다.

  2. resources/templates/error/4xx.html, resources/templates/error/404.html이 모두 존재할 때: Spring Boot는 보다 구체적인 오류 코드를 우선하기 때문에 404에러마다 404.html 파일이 사용됩니다. 동일하게 400에러도 404.html이 사용되는 이유는, 기본적으로 관련 설정이 되어 있지 않고, 406 Not Acceptable 등의 처리 방식이 404 페이지로 매칭되기 때문입니다. 구체적으로 400과의 우선순위 문제라기 보다는, 설정의 구체성이 없기 때문에 전반적인 방식으로 404로 처리되고 있습니다.

이와 관련된 더 많은 정보를 원하신다면 다음과 같은 기존 질문을 참고하실 수 있습니다:

  • 에러 페이지 설정을 참조해보세요. 이 링크를 통해 Spring Boot의 오류 페이지 처리 방식에 대한 다른 질문과 답변을 볼 수 있습니다.

우선순위 관련 설정에 대해 더 깊이 다루는 강의나 자료를 확인해보고, 보다 명확한 우선순위 설정이 필요할 수 있습니다.

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

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기