💻본 포스팅은 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 김영한'님의 강의를 듣고 작성되었습니다.
목차
1. 스프링 부트 - 오류페이지 1
2. 스프링 부트 - 오류페이지 2
스프링 부트 - 오류페이지 1
예외처리를 위해서 앞서서는 다음과 같은 복잡한 과정을 거쳤다.
- 서블릿이 제공하는 예외 발생 시 해당 페이지를 제공해주는 클래스를 생성해야 했다.
- 예외 종류에 따라서 ErrorPage를 추가 해줬어야 했다. (뷰페이지 생성을 의미한다. html 등..)
- 예외 처리용 컨트롤러를 만들어야 했다.
스프링 부트를 사용한 방식
- ErrorPage 를 자동으로 등록한다. 이때 /error 라는 경로로 기본 오류 페이지를 설정한다.
- new ErrorPage("/error") , 상태코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용된다.
- 서블릿 밖으로 예외가 발생하거나, response.sendError(...) 가 호출되면 모든 오류는 /error 를 호출하게 된다.
- BasicErrorController 라는 스프링 컨트롤러를 자동으로 등록한다.
- ErrorPage 에서 등록한 /error 를 매핑해서 처리하는 컨트롤러다.
개발자는 오류 페이지만 등록
BasicErrorController는 기본적인 로직이 모두 개발되어 있기 때문에 개발자는 오류 페이지 화면만 BasicErrorController가 제공하는 우선순위와 룰에 따라서 등록해주면 된다.
뷰 선택 우선순위
- 뷰 템플릿(templates에 들어 있는 html)
- 정적 리소스(static에 들어 있는 html)
- 적용 대상이 없을 때 뷰 이름(error.html)
또한 뷰 선택 우선순위 역시 404, 500처럼 구체적인 것이 5xx처럼 덜 구체적인 것보다 우선순위가 높다.
스프링 부트 - 오류페이지 2
BasicErrorController가 제공하는 기본 정보들
* timestamp: Fri Feb 05 00:00:00 KST 2021
* status: 400
* error: Bad Request
* exception: org.springframework.validation.BindException
* trace: 예외 trace
* message: Validation failed for object='data'. Error count: 1
* errors: Errors(BindingResult)
* path: 클라이언트 요청 경로 (`/hello`)
- BasicErrorController는 위와 같은 정보를 model에 담아 뷰에 전달한다.
- 뷰 템플릿은 이 값을 활용해 출력이 가능하다.
- 그러나 오류 관련 내부 정보를 노출하는 것은 해킹에 취약하게 하고 고객에게도 별 도움이 되지 않는다. 그래서 컨트롤러에서 다음 오류 정보를 model에 포함할지 여부를 선택할 수 있게 한다.
오류 정보 model에 포함 여부 설정
application.properties
server.error.include-exception=false : exception 포함 여부( true , false )
server.error.include-message=never : message 포함 여부
server.error.include-stacktrace=never : trace 포함 여부
server.error.include-binding-errors=never : errors 포함 여부
기본값이 never인 경우 아래와 같은 3가지 옵션 사용이 가능하다.
never : 사용하지 않음
always :항상 사용
on_param : 파라미터가 있을 때 사용(해당 정보를 노출하는 개념으로 디버그 시 문제 확인에 사용할 수 있다 개발 서버에서는 사용할 수 있지만, 운영 서버에서는 권장하지 않는다.)
'Back-End > Spring' 카테고리의 다른 글
[Spring DB][JDBC 이해] - JDBC와 ORM SQL Mapper에 대해서 알아보자. (0) | 2022.06.21 |
---|---|
[Spring MVC2][API 예외처리] - 기본 예외처리, 서블릿 예외처리, 스프링이 지원하는 API 예외처리 (0) | 2022.06.02 |
[Spring MVC2][예외 처리와 오류 페이지] - 필터와 인터셉터 (0) | 2022.05.28 |
[Spring MVC2][예외 처리와 오류 페이지] - 서블릿 예외 처리를 사용해서 오류 화면을 제공해보자 (0) | 2022.05.28 |
[Spring MVC2][예외 처리와 오류 페이지] - 서블릿 예외 처리 (0) | 2022.05.28 |