반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 클라우드컴퓨팅
- 컴퓨터과학
- 자료구조
- 데이터구조
- 자바스크립트
- Yes
- 데이터분석
- 딥러닝
- 네트워크
- I'm Sorry
- 데이터베이스
- 파이썬
- 컴퓨터비전
- 소프트웨어
- 디자인패턴
- 프로그래밍언어
- 소프트웨어공학
- 사이버보안
- 웹개발
- 버전관리
- 빅데이터
- 머신러닝
- 알고리즘
- 인공지능
- 프로그래밍
- 네트워크보안
- 보안
- springboot
- 컴퓨터공학
- 데이터과학
Archives
- Today
- Total
스택큐힙리스트
@ControllerAdvice 전역 예외 처리 – REST API에서 메시지·HTTP Status 자동 매핑 본문
반응형
Spring Boot로 REST API를 개발할 때 예외 처리 코드를 매번 컨트롤러에 작성하는 건 유지보수에 큰 부담이 됩니다. 이를 해결하기 위해 사용하는 것이 바로 @ControllerAdvice입니다.
이번 포스팅에서는 @ControllerAdvice를 활용해 전역적으로 예외를 처리하고, 클라이언트에 적절한 메시지와 HTTP 상태 코드를 자동으로 매핑해주는 방법을 소개합니다.
✅ 왜 전역 예외 처리인가?
- 모든 컨트롤러에서 발생하는 예외를 하나의 클래스에서 처리
- 코드 중복 제거
- 일관된 에러 응답 구조 제공
✅ 기본 사용법
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException ex) {
return ResponseEntity.badRequest().body(ex.getMessage());
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("예상치 못한 오류가 발생했습니다.");
}
}
- @RestControllerAdvice는 @ControllerAdvice + @ResponseBody 조합
- 예외 종류별로 @ExceptionHandler로 메서드를 나눠 처리
✅ 커스텀 예외 + DTO 응답 구조 만들기
public class ApiErrorResponse {
private String message;
private int status;
private LocalDateTime timestamp;
// 생성자, getter, setter 생략
}
@ResponseStatus(HttpStatus.NOT_FOUND)
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ApiErrorResponse> handleUserNotFound(UserNotFoundException ex) {
ApiErrorResponse response = new ApiErrorResponse(
ex.getMessage(),
HttpStatus.NOT_FOUND.value(),
LocalDateTime.now()
);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response);
}
- 커스텀 예외를 정의해 도메인 중심 에러 설계 가능
- 일관된 API 에러 포맷으로 응답
✅ 실무에서 자주 쓰는 팁
- @Validated와 함께 사용하면 검증 에러도 처리 가능
- 에러 코드, 로그 추적 ID 등을 포함한 에러 응답 포맷을 설계하면 운영에 유리
- Swagger 문서에서 예외 응답 형식도 함께 명세할 것
반응형
'개발' 카테고리의 다른 글
Spring Boot 필터·인터셉터에서 발생한 예외 처리 방법 (1) | 2025.07.10 |
---|---|
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 3장. 성능을 좌우하는 DB 설계와 쿼리 (1) | 2025.07.10 |
실전 포스트모템, 이렇게 쓰면 끝! (2) | 2025.07.10 |
자바 스프링 개발 시작하기 - 4일차 예외 처리와 CSV 통계 실습 (2) | 2025.07.10 |
백프레셔 한 방에 끝! 대기 큐 설계·구현 실습 가이드 (3) | 2025.07.10 |
Comments