Spring Global Exception Handler (전역 예외 처리)

2024. 10. 20. 23:06·💻 Backend Development/🌱 Spring Framework
반응형

Spring Global Exception Handler

개요

Spring에서 예외 처리 방법은 여러 가지가 있다.
가장 흔히 사용되는 방법으로는 try-catch 문을 이용한 예외 처리, @ExceptionHandler를 이용한 예외 처리, 그리고 전역에서 예외를 처리할 수 있는 @ControllerAdvice를 이용한 방법이 있다.
이 글에서는 각 방법의 특징과 장단점을 알아본다.

1. try-catch 문을 이용한 예외 처리

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        try {
            // 예외 발생 코드
            throw new Exception("고의로 발생시킨 예외");
        } catch (Exception e) {
            return "예외 발생: " + e.getMessage();
        }
    }
}

try-catch 문을 이용한 예외 처리는 가장 기본적인 방법이다.
특정 로직에서 예외가 발생했을 때 즉시 해당 로직 내에서 예외를 처리할 수 있다.
하지만, 예외가 발생할 수 있는 모든 부분마다 try-catch를 추가해야 하므로 중복 코드가 발생할 수 있다.
이러한 중복은 코드의 유지보수를 어렵게 만들고, 휴먼 에러가 발생할 가능성을 높인다.

2. @ExceptionHandler를 이용한 예외 처리

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        // 예외 발생 코드
        throw new RuntimeException("고의로 발생시킨 예외");
    }

    @ExceptionHandler(Exception.class)
    public String exceptionHandler(Exception e) {
        return "예외 처리됨: " + e.getMessage();
    }
}

@ExceptionHandler를 이용하면 특정 컨트롤러에서 발생하는 예외를 중앙에서 처리할 수 있다.
이 방법은 각 컨트롤러 내에 존재하는 예외를 담당하는 메서드를 만들어, 해당 컨트롤러에서 발생하는 예외를 일관되게 처리할 수 있다.
하지만 컨트롤러가 많아질수록 각 컨트롤러에 @ExceptionHandler 메서드를 추가해야 하는 번거로움이 발생하며, 중복 코드가 생길 수 있다.

3. @ControllerAdvice를 이용한 전역 예외 처리

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleAllExceptions(Exception e) {
        return ResponseEntity
                .status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body("전역 예외 처리: " + e.getMessage());
    }
}

@ControllerAdvice는 전역 예외 처리를 담당하는 어노테이션이다.
이를 통해 모든 컨트롤러에서 발생하는 예외를 한 곳에서 처리할 수 있다.
즉, 중복된 예외 처리 로직을 없애고, 예외 처리를 일관성 있게 유지할 수 있다는 큰 장점이 있다.
이렇게 하면 코드가 간결해지고, 유지보수성이 크게 향상된다.

@ControllerAdvice와 @RestControllerAdvice의 차이

@ControllerAdvice
@RestControllerAdvice

@ControllerAdvice는 View를 반환하는 예외 처리에 사용되고, @RestControllerAdvice는 JSON 데이터를 반환할 때 사용된다.
즉, @RestControllerAdvice는 @ControllerAdvice에 @ResponseBody가 추가된 형태다.

추가로 @RestControllerAdvice(annotations = RestController.class)와 같이 특정 어노테이션이 있는 컨트롤러에 대해서만 예외를 처리하도록 설정할 수 있다.
이는 특정 컨트롤러 타입에 맞춘 예외 처리도 가능하게 해준다.

반응형

'💻 Backend Development > 🌱 Spring Framework' 카테고리의 다른 글

필터(Filter) vs 인터셉터(Interceptor)  (0) 2024.10.22
Dispatcher Servlet (디스패처 서블릿)  (0) 2024.10.21
'💻 Backend Development/🌱 Spring Framework' 카테고리의 다른 글
  • 필터(Filter) vs 인터셉터(Interceptor)
  • Dispatcher Servlet (디스패처 서블릿)
KilPenguin
KilPenguin
penguin-dev 님의 블로그 입니다.
    반응형
  • KilPenguin
    Penguin Dev
    KilPenguin
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • 🏗️ Architecture & Design (2)
        • 📐 Clean Architecture (2)
        • 🔄 Design Patterns (0)
      • ⚡ Performance & Optimizatio.. (4)
        • 🗄️ Database Tuning (2)
        • 🚀 Caching Strategy (1)
        • 🖥️ Server Optimization (1)
      • 💻 Backend Development (9)
        • 🔒 Concurrency Control (5)
        • 🌱 Spring Framework (3)
        • 📨 Event-Driven Architecture (0)
        • ☕ Java Fundamentals (1)
      • 🔧 Dev Tools & Environment (4)
        • 🔄 Version Control (2)
        • 📝 Documentation Tools (1)
        • 🎨 Blog Setup (1)
      • 📈 Career & Growth (21)
        • 🎓 Learning Journey (15)
        • 🎤 Conference & Community (6)
      • 🎯 Personal (1)
        • 👋 Introduction (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해플러스백엔드
    인프런
    항해솔직후기
    항해99
    항해플러스후기
    판교퇴근길밋업
    개발바닥밋업
    항해플러스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
KilPenguin
Spring Global Exception Handler (전역 예외 처리)
상단으로

티스토리툴바