spring boot로 익명 게시판 서버 만들기
GitHub : https://github.com/zomeong/Post-Borad
이전에 기본 CRUD 기능 구현을 해둔 프로그램의 경우 throw로 예외를 던지면 단순히 에러 화면이 표시가 된다. 이에 대해 판단할 수 있도록 JSON으로 에러 코드와 메세지 데이터를 반환해주는 처리를 하였다.
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려준다. 크게 5개의 그룹으로 나뉘며 100~500까지의 번호대로 구분한다.
스프링은 컨트롤러 밖으로 던져진 예외를 해결하고 동작 방식을 새로 정의할 수 있는 방법을 제공한다. HandlerExceptionResolver(줄여서 ExceptionResolver)을 사용하면 된다. 날아온 예외를 ExceptionResolver에서 해결한 후, 정상적인 호출로 WAS로 리턴한다.
ExceptionHandlerExceptionResolver는 스프링 부트에서 기본으로 제공하는 예외 처리 기능, ExceptionResolver로 @ExceptionHandler
애너테이션을 통해 구현할 수 있다.
🔍 예외 처리 구현 과정
1. Json 형식으로 보낼 오류 필드 클래스 생성
@Data
@AllArgsConstructor
public class ErrorResult {
private String code;
private String message;
}
@Slf4j
@RestControllerAdvice
public class ApiExceptionController {
}
@Slf4j
: Simple Logging Facade for Java, 로깅 프레임워크에 대한 추상화 라이브러리@RestControllerAdvice
: 여러 컨트롤러에 대해 전역적으로 ExceptionHandler를 적용하여 예외 처리 가능@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(IllegalArgumentException.class)
public ErrorResult errorHandle(IllegalArgumentException e){
log.error("[exceptionHandle] ex", e);
return new ErrorResult("BAD", e.getMessage());
@ResponseStatus
: HttpStatus 지정⚠️ 이러한 방식 말고도 여러 방법으로 에러 처리가 가능하다.
if (!getPassword.equals(feed.getPassword())){
throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
}
service에서 던진 IllegalArgumentException을 처리하여 json 형식으로 반환하였다.