Spring boot에서는 기본적으로 에러페이지를 지원해주고 있는데요. 배포해놓은 서비스에 기본적인 에러페이지가 뜨게되면 좋지않다고 생각되어 변경해보도록 하겠습니다.
먼저 templates 디렉토리 아레에 error 디렉토리를 만든 후 에러코드별 페이지를 하나씩 만들어 줍니다.
이렇게 에러코드별로 만들어놓은 HTML은 해당 HTTP status code가 발생 하였을 경우 status code에 맞는 html을 보여주게 됩니다.
그러나 서버에서 보내주는 에러의경우 매우 다양한 에러가 있는데요
- 해당 유저를 찾을 수 없어서 500에러
- 해당 포스트를 찾을 수 없어서 500에러
- 글쓰다가 등록실패로 500에러 등이 있을수 있습니다.
이러한 에러를 모두 500.html 페이지 하나로 관리하려면 어떤 에러가 발생했는지 관리하기 힘들어집니다.
이것을 해결하기위해 커스텀 에러를 정의하고 @ControllerAdvice에러 커스텀에러를 처리하도록 하겠습니다.
@Slf4j
public class PostNotFoundException extends RuntimeException {
public PostNotFoundException(Long id) {
super("해당 포스트를 찾을 수 없습니다.");
log.error(id + " 번 포스트를 찾을 수 없습니다!");
}
public PostNotFoundException() {
super();
}
}
먼저 커스텀에러를 정의해 줍니다 저는 해당 포스트를 찾지 못하였을경우 에러를 뱉도록 하였습니다.
ServiceLayer에서 해당 포스트를 찾지 못할경우 방금 정의한 PostNotFoundException을 던져줍니다.
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler extends RuntimeException {
@ExceptionHandler(PostNotFoundException.class)
public String PostNotFoundException(PostNotFoundException e) {
log.error(e.getMessage());
return "error/post_not_found.html";
}
}
그후 @ControllerAdvice를 이용하여 전체 Controller에서 발생하는 에러를 여기서 처리해주는데요
@ExceptionHandler를 사용하여 PostNotFoundException이 발생하였을 경우 처리를 해줍니다.
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler extends RuntimeException {
@ExceptionHandler(PostNotFoundException.class)
public String PostNotFoundException(PostNotFoundException e) {
return "error/post_not_found.html";
}
}
에러 메시지를 로그로 출력하고 template/error/post_not_found.html 파일로 에러화면을 보여줍니다.
'스프링 부트' 카테고리의 다른 글
스프링부트 게시판 API 만들기 - 4 (게시글 수정, 삭제 테스트 코드 작성) (0) | 2021.04.23 |
---|---|
스프링부트 게시판 API 만들기 - 3 (게시글 수정, 삭제 코드 작성) (0) | 2021.04.22 |
스프링부트 게시판 API 만들기 - 1 (환경 설정, 게시물 가져오기, 게시물 등록하기) (0) | 2021.04.21 |
스프링부트] CK Editor4 이미지 드래그&드롭 기능으로 AWS S3 이미지 업로드하기 (0) | 2021.04.16 |
도커를 활용하여 배포 환경별로 설정하는법 (0) | 2021.04.15 |