11월 23일-스프링에서의 예외 처리

Yullgiii·2023년 11월 23일
0
post-thumbnail

@ControllerAdvice와 @ExceptionHandler를 이용한 전역 예외 처리

스프링에서는 @ControllerAdvice와 @ExceptionHandler 어노테이션을 이용해 전역에서 발생하는 예외를 처리할 수 있다. 이렇게 하면 개별 컨트롤러에서 예외를 처리하는 것이 아니라, 한 곳에서 모든 예외를 관리할 수 있어 유지보수가 용이하다.

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public ResponseEntity<String> handleException(Exception e){
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

위의 코드는 모든 예외를 잡아내서 500 에러와 함께 예외 메시지를 반환한다.

커스텀 예외 클래스 생성 및 사용 방법

스프링에서는 개발자가 직접 예외 클래스를 정의하여 사용할 수 있다. 이를 통해 보다 세밀한 예외 처리가 가능하며, 비즈니스 로직에 맞는 예외 메시지를 전달할 수 있다.

public class CustomException extends RuntimeException {

    public CustomException(String message) {
        super(message);
    }
}

위의 코드는 사용자 정의 예외 클래스를 생성하는 방법을 보여준다.

HTTP 상태 코드와 예외 처리의 연관성

예외 처리 시 HTTP 상태 코드를 적절히 사용하면 클라이언트에게 더욱 정확한 상황을 전달할 수 있다. 예를 들어, 리소스를 찾지 못했을 때는 404 Not Found, 권한이 없을 때는 403 Forbidden 등의 상태 코드를 반환한다.

예외 발생 시 사용자에게 응답하는 정보 설정 방법

예외 발생 시 사용자에게 어떤 정보를 전달할지 설정할 수 있다. 예를 들어, 예외 메시지, HTTP 상태 코드, 발생 시간 등의 정보를 포함시킬 수 있다.

@ExceptionHandler(CustomException.class)
public ResponseEntity<Map<String, Object>> handleCustomException(CustomException e) {
    Map<String, Object> errorInfo = new HashMap<>();
    errorInfo.put("message", e.getMessage());
    errorInfo.put("status", HttpStatus.BAD_REQUEST);
    errorInfo.put("timestamp", LocalDateTime.now());
    
    return new ResponseEntity<>(errorInfo, HttpStatus.BAD_REQUEST);
}

위의 코드는 커스텀 예외 발생 시 예외 메시지, 상태 코드, 발생 시간을 포함한 에러 정보를 반환한다.

회고

오늘의 학습을 통해 스프링에서 예외를 어떻게 처리하는지에 대해 배웠다. @ControllerAdvice, @ExceptionHandler 어노테이션을 사용하는 방법, 커스텀 예외 클래스를 만드는 방법, HTTP 상태 코드와 예외 처리의 연관성 등에 대해 알아보았다. 이를 통해 사용자 친화적인 애플리케이션을 만드는 데 도움이 될 것이라고 생각한다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글