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

kjoooo님의 프로필 이미지
kjoooo

작성한 질문수

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

스프링부트가 아닌, 스프링 프레임워크일 경우 BasicErrorController

해결된 질문

작성

·

360

·

수정됨

0

안녕하세요,

  1. 스프링 부트일 경우, BasicErrorController 가 자동적으로 등록되어 사용된다고 하셨는데, 부트가 아닌 일반 스프링 프레임워크일 경우, BasicErrorController 와 비슷한 역할을 해주는 Controller 가 자동적으로 등록되지는 않는 것인지요?

  2. 부트가 아닌 스프링 프레임워크에서는 개발자가 예외나 response.sendError(); 에 대해서 아무런 대비/대처 설정 (예와나 sendError 를 처리해주는 코드를 작성하지 않았을 경우) 을 해주지 않았을 경우에는 어떤 default 설정을 따라가는지 궁금합니다.

  3. 스프링 부트일 경우,

    WebServerFactoryCustomizer<ConfigurableWebServerFactory> 를 구현한 클래스를 작성해서 ErrorPage를 지정해주고 있는데, 부트가 아닌 스프링 프레임워크에서는 어떻게 WebServerFactoryCustomizer<ConfigurableWebServerFactory> 를 구현한 것과 동일하게 custom 을 해줄 수 있는지 궁금합니다.

감사합니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. kjoooo님

  1. 스프링 프레임워크와 BasicErrorController:

    • 스프링 부트에서는 BasicErrorController가 기본적으로 제공되어 예외 상황을 처리합니다. 이 컨트롤러는 /error 경로에 매핑되어 있으며, 애플리케이션에서 발생하는 대부분의 예외를 캐치하고 적절한 응답을 반환합니다.

    • 반면, 일반 스프링 프레임워크에서는 BasicErrorController와 같은 기본적으로 제공되는 에러 처리 컨트롤러가 없습니다. 따라서 개발자는 직접 예외 처리 로직을 구현해야 합니다. 이를 위해서는 @ControllerAdvice@ExceptionHandler를 사용하여 예외 처리 클래스를 만들 수 있습니다.

  2. 일반 스프링 프레임워크에서의 기본 에러 처리:

    • 스프링 프레임워크에서 개발자가 별도의 에러 처리를 구현하지 않았을 경우, 서블릿 컨테이너(예: 톰캣)의 기본 에러 페이지가 사용됩니다. 이는 일반적으로 사용자에게 기술적인 세부 정보를 보여주는 것이 아니라, 간단한 에러 메시지나 상태 코드를 보여줍니다.

    • response.sendError() 메소드를 호출할 때, 서블릿 컨테이너는 해당 상태 코드에 대응하는 기본 에러 페이지를 보여줍니다.

  3. 스프링 프레임워크에서의 커스텀 에러 페이지 설정:

    • 스프링 부트에서는 WebServerFactoryCustomizer 인터페이스를 구현하여 커스텀 에러 페이지를 설정할 수 있습니다. 그러나 일반 스프링 프레임워크에서는 이런 방식을 직접 구현할 필요가 있습니다.

    • 일반 스프링 프레임워크에서는 웹 서버의 설정(예: 톰캣)을 직접 조작하여 에러 페이지를 지정할 수 있습니다. 이는 보통 서블릿 컨테이너의 설정을 통해 이루어집니다. 여기서 각각의 에러 코드나 예외 타입에 대한 에러 페이지를 지정할 수 있습니다.

관련해서 스프링 부트 - 핵심원리와 활용 강의에서 스프링 없이 내장 톰캣이 어떻게 작동하는지 설명하고 있으니 참고해주세요.

kjoooo님의 프로필 이미지
kjoooo
질문자

답변 감사드립니다.

말씀해주신 3번 답변에 대해 추가적인 질문 사항이 있습니다.

서블릿 컨테이너의 설정을 통해 이루어진다고 하셨는데,

그럼 web.xml 에 (강의 노트에도 잠깐 언급되어 있는...)

<error-page>

<error-code>404</error-code>

<location>/error404</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/error500</location>

</error-page>

이 방식이랑, 말씀해주신 톰캣을 직접 조작하여 에러 페이지를 지정하는 것이랑은 완전히 다른 것인지요?

감사합니다.

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. kjoooo님

서블릿 컨테이너의 설정이 말씀하신 web.xml의 내용과 같은 내용입니다.

감사합니다.

kjoooo님의 프로필 이미지
kjoooo

작성한 질문수

질문하기