TIL

250131 금 TIL

파란배개 2025. 1. 31. 17:50

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 콘솔 또는 서버 로그에서 확인
  • 예외 메시지와 함께 출력된 메서드 호출 순서를 따라가며 원인 파악

스택 트레이스 활용 팁

  1. 가장 마지막에 출력된 예외 메시지부터 확인
  2. Caused by 부분에 집중 (문제의 원인이 되는 첫 번째 예외)
  3. 패키지명을 보고 내가 작성한 코드에서 발생한 부분을 우선 확인

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