HTTP Response Status Code
- 200 - 성공
- 300 - 리다이렉션
- 400 - 클라이언트 요청 오류
- 500 - 서버 오류
예외 처리는 한곳에서 관리하는 것이 좋다
(다른 의견이 있을 수도 있음.)
이를 위한 스프링부트의 예외 처리기
package com.example.rest.global.exception;
import com.example.rest.global.entity.RsData;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.NoSuchElementException;
// 컨트롤러에서 발생하는 예외를 가로채는 어노테이션
@ControllerAdvice
public class AllExceptionHandler {
// NoSuchElementException이 발생했을 때 처리
@ExceptionHandler(NoSuchElementException.class)
public ResponseEntity<ResponseData<Void>> handle(NoSuchElementException e) {
e.printStackTrace(); // 개발 중에는 스택 트레이스 로그 출력 (운영 환경에서는 자제 필요)
return ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body(new ResponseData<>(
"404",
"해당 데이터가 존재하지 않습니다."
)
);
}
}
에러를 확인하는 방법 - 스택 트레이스
스택 트레이스란?
- 예외 발생 시 실행된 메서드 호출 스택을 출력하는 로그.
- 어떤 코드에서 문제가 발생했는지 추적하는 데 사용됨.
스택 트레이스를 보는 방법
- IDE 콘솔 또는 서버 로그에서 확인
- 예외 메시지와 함께 출력된 메서드 호출 순서를 따라가며 원인 파악
스택 트레이스 활용 팁
- 가장 마지막에 출력된 예외 메시지부터 확인
- Caused by 부분에 집중 (문제의 원인이 되는 첫 번째 예외)
- 패키지명을 보고 내가 작성한 코드에서 발생한 부분을 우선 확인
ControllerAdvice 사용 시 주의점
문제
- @ControllerAdvice를 사용하면 기본적으로 예외가 처리되므로 스택 트레이스가 출력되지 않음.
- 개발 중에는 디버깅이 어려울 수 있음.
해결 방법
- @ExceptionHandler 메서드에서 e.printStackTrace();를 추가하여 예외 발생 시 서버 로그에 출력.
- 단, 운영 환경에서는 성능 저하 및 보안 이슈가 있을 수 있으므로 스택 트레이스 출력은 자제할 것.
@ExceptionHandler(NoSuchElementException.class)
public ResponseEntity<ResponseData<Void>> handle(NoSuchElementException e) {
e.printStackTrace(); // 개발 환경에서만 사용
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ResponseData<>("404", "해당 데이터가 존재하지 않습니다."));
}
'TIL' 카테고리의 다른 글
250204 화 TIL (0) | 2025.02.04 |
---|---|
250203 월 TIL (0) | 2025.02.03 |
250127 월 TIL (1) | 2025.01.27 |
250124 금 TIL (0) | 2025.01.24 |
250123 목 TIL (0) | 2025.01.23 |