inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

416

kjoooo

작성한 질문수 1

0

안녕하세요,

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

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

  3. 스프링 부트일 경우,

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

감사합니다.

spring mvc

답변 1

1

김영한

안녕하세요. kjoooo님

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

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

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

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

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

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

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

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

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

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

1

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>

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

감사합니다.

2

김영한

안녕하세요. kjoooo님

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

감사합니다.

이미지 업로드와 db 트랜잭션 묶는법

0

42

1

Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4

0

52

2

MessageSourceTest 코드

0

47

1

인터셉터 에러 설정

0

48

1

resolveArgument()메서드 질문

0

57

1

43강 검증1 에서 실패 로직 관련 질문있습니다.

0

55

2

타임리프 3.X 버전 rendering, serializer 에러 해결 방법

2

133

3

스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ

0

90

3

pdf 오타 문의

0

57

1

ItemUpdateForm 검증 관련 질문입니다.

0

48

1

22page 링크 주소 변경

0

59

2

특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문

0

53

1

섹션3번 수업에 대한 질문입니다.

0

80

2

@Autowired 보다 더 좋은 방법이 어떤 걸까요?

0

85

2

타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.

0

65

1

자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다

0

142

3

스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문

0

63

1

톰캣 에러 페이지가 안보입니다.

0

102

2

apiEceptionController에서 센드 에러 호출하면 안되는지?

0

81

1

세션 타임아웃시 쿠키 삭제 방법이 없나요?

0

118

2

ApiExceptionController 질문드립니다.

0

64

1

셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?

0

66

1

MemberRepository 필드의 fianl 선언 유무

0

85

2

혹시 index.html 에서는 fragment 사용이 안되는건가요

0

58

1