[스프링] 예외 처리 방법

스프링 애플리케이션을 개발하다보면 예외 처리는 필연적으로 발생하는 문제입니다. 스프링은 이를 다루기 위한 다양한 방법을 제공합니다.

1. @ControllerAdvice와 @ExceptionHandler를 사용한 예외 처리

@ControllerAdvice 애노테이션을 사용하면 전역 수준에서 예외를 처리할 수 있습니다. @ExceptionHandler 애노테이션과 함께 사용하여 특정 예외에 대한 처리 로직을 정의할 수 있습니다.

예시:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleException(Exception ex) {
        // 예외 처리 로직
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

2. ResponseEntity를 활용한 응답 처리

ResponseEntity를 사용하면 HTTP 응답 코드와 함께 데이터를 반환할 수 있어, 예외 상황에 따른 적절한 응답을 제공할 수 있습니다.

예시:

@GetMapping("/resource")
public ResponseEntity<Resource> getResource() {
    // 리소스 가져오기
    if (resource == null) {
        return ResponseEntity.notFound().build();
    }
    return ResponseEntity.ok(resource);
}

3. @RestControllerAdvice를 활용한 RESTful 서비스 예외 처리

@RestControllerAdvice 애노테이션을 사용하여 RESTful 서비스에서 예외를 처리할 수 있습니다. JSON 형태로 예외 정보를 반환할 수 있어 클라이언트에서 바로 처리할 수 있습니다.

예시:

@RestControllerAdvice
public class RestGlobalExceptionHandler {
    @ExceptionHandler(EntityNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public ErrorResponse handleEntityNotFoundException(EntityNotFoundException ex) {
        // 예외 처리 로직
        return errorResponse;
    }
}

스프링에서의 예외 처리 방법에 대해 알아보았습니다. 이러한 기능들을 활용하여 안정적이고 효율적인 애플리케이션을 개발할 수 있습니다.

참고: