스프링은 웹 애플리케이션을 개발할 때 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” 메시지를 반환합니다.
차근차근 애플리케이션의 예외 상황에 대응하는 것은 안정적인 웹 서비스를 제공하기 위해 중요합니다. 스프링의 예외 처리 기능을 적절히 활용하여 웹 서비스를 보다 안전하게 운영할 수 있습니다.