JAVA/이론

54. [ JAVA ] Spring Boot에서 발생하는 예외처리(@Exception Hander)

천재단미 2025. 1. 11. 13:59
728x90
반응형

 

     

    1. 프로그램 오류의 종류

    프로그램 오류는 크게 세 가지로 나눌 수 있습니다:

    1. 컴파일 에러: 컴파일 시에 발생하는 에러
    2. 런타임 에러: 프로그램 실행 중에 발생하는 에러
    3. 논리적 에러: 프로그램이 실행은 되지만, 의도와 다르게 동작하는 경우

    이 중 런타임 에러는 다시 '에러(Error)'와 '예외(Exception)'로 나눌 수 있습니다.

    • 에러(Error): 프로그램 코드로 수습할 수 없는 심각한 오류 (예: 메모리 부족, 스택 오버플로우)
    • 예외(Exception): 프로그램 코드로 수습할 수 있는 비교적 경미한 오류

     

    2. 예외 클래스의 계층 구조

    자바에서는 실행 시 발생할 수 있는 오류(Error와 Exception)를 클래스로 정의하고 있습니다.

     

     

     
     

    예외 클래스의 최상위 클래스

    모든 예외의 최고 조상은 Exception 클래스입니다.

    예외 클래스의 두 그룹

    예외 클래스는 크게 두 그룹으로 나눌 수 있습니다:

     

    Exception 클래스와 그 자손들

    • 주로 외부 요인에 의해 발생
    • 예: 존재하지 않는 파일명 입력, 클래스 이름 오타, 잘못된 데이터 형식 입력 등

    RuntimeException 클래스와 그 자손들

    • 주로 프로그래머의 실수로 발생
    • 예: 배열 범위 초과, null 참조 변수 사용, 잘못된 형변환, 0으로 나누기 등

     

    3.  예외 주요 처리 방법

    @ExceptionHandler 사용

    컨트롤러 클래스 내에서 특정 예외를 처리하는 메서드를 정의할 수 있습니다.

        @PostMapping("/api/v1/places/{placeId}/photos")
        public ResponseEntity<Void> uploadPhoto(@PathVariable long placeId,
                                                @RequestParam("photo") MultipartFile photo,
                                                @RequestParam(value = "description", required = false) 
                                                String description ){
    
            try {
                photoService.uploadPhoto(placeId, photo, description);
                return ResponseEntity.status(201).build();
            } catch (Exception e) {
                return ResponseEntity.status(400).build();
            }
    
        }
    

     

     

    @ControllerAdvice 사용

    전역적으로 예외를 처리하는 클래스를 정의할 수 있습니다.

    @ControllerAdvice
    public class GlobalExceptionHandler {
        @ExceptionHandler(Exception.class)
        public ResponseEntity<String> handleException(Exception e) {
            return ResponseEntity.internalServerError().body("서버 오류 발생: " +
             e.getMessage());
        }
    }
    

     

    ResponseStatusException 사용

    예외 발생 시 HTTP 상태 코드를 지정할 수 있습니다.

    주로 Service클래스에 자주 사용됩니다. 

     

     

                    try {
                        s3Client.putObject(putObjectRequest,
                                RequestBody.fromInputStream(photo.getInputStream(),
                                        photo.getSize()));
                    } catch (Exception e) {
                        throw new RuntimeException();
                    }
    
    

    커스텀 예외 클래스 정의

    특정 비즈니스 로직에 맞는 예외 클래스를 직접 정의할 수 있습니다.

     

     

    클래스 생성

     

    exception 패키지 생성 OrderNotFoundException 클래스 생성

     

    public class OrderNotFoundException extends RuntimeException{    
    public OrderNotFoundException(long id) {        
    super("오더 아이디 : " + id + "는 존재하지 않습니다.");    }}
    

     

    이러한 방법들을 조합하여 Spring Boot 애플리케이션의 예외를 효과적으로 처리할 수 있습니다. 예외 처리는 애플리케이션의 안정성과 사용자 경험을 향상하는 중요한 부분입니다.

    728x90
    반응형
    home top bottom
    }