[스프링] 스프링 웹 서비스와 예외 처리

스프링은 웹 애플리케이션을 개발할 때 Spring MVC를 통해 웹 서비스를 구축하는 데 매우 편리한 도구를 제공합니다. 그러나 가끔 발생할 수 있는 예외 상황에 대한 처리는 반드시 고려해야 합니다. 이에 대해 알아보겠습니다.

1. 스프링 웹 서비스 구축

스프링은 @RestController 어노테이션을 사용하여 간단하게 RESTful 웹 서비스를 구축할 수 있습니다. 아래는 간단한 예시입니다.

@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/data")
    public String getData() {
        return "Some data";
    }
}

위의 코드는 “/api/data” 엔드포인트에 대한 GET 요청을 처리하고 “Some data”를 반환합니다.

2. 예외 처리

웹 서비스에서 발생하는 예외에 대한 적절한 처리는 매우 중요합니다. 스프링은 @ExceptionHandler 어노테이션을 통해 예외를 처리할 수 있습니다. 아래는 예외 처리 메서드의 예시입니다.

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception ex) {
        return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

위의 코드는 애플리케이션에서 발생하는 모든 예외에 대해 “An error occurred: “를 포함한 메시지와 500 상태코드를 반환합니다.

3. 리소스 미발견 및 권한 에러 처리

특정 리소스를 찾을 수 없거나 권한이 없는 경우에 대한 처리도 중요합니다. ResponseEntityExceptionHandler를 확장하여 이러한 상황을 처리할 수 있습니다.

@ControllerAdvice
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler({ResourceNotFoundException.class})
    public ResponseEntity<Object> handleResourceNotFoundException(ResourceNotFoundException ex, WebRequest request) {
        return new ResponseEntity<>("Resource not found", HttpStatus.NOT_FOUND);
    }

    @ExceptionHandler({AccessDeniedException.class})
    public ResponseEntity<Object> handleAccessDeniedException(Exception ex, WebRequest request) {
        return new ResponseEntity<>("Access denied", HttpStatus.FORBIDDEN);
    }
}

위의 코드는 리소스를 찾을 수 없는 경우 404 상태코드와 “Resource not found” 메시지를, 권한이 없는 경우 403 상태코드와 “Access denied” 메시지를 반환합니다.


차근차근 애플리케이션의 예외 상황에 대응하는 것은 안정적인 웹 서비스를 제공하기 위해 중요합니다. 스프링의 예외 처리 기능을 적절히 활용하여 웹 서비스를 보다 안전하게 운영할 수 있습니다.