728x90
반응형
1. 프로그램 오류의 종류
프로그램 오류는 크게 세 가지로 나눌 수 있습니다:
- 컴파일 에러: 컴파일 시에 발생하는 에러
- 런타임 에러: 프로그램 실행 중에 발생하는 에러
- 논리적 에러: 프로그램이 실행은 되지만, 의도와 다르게 동작하는 경우
이 중 런타임 에러는 다시 '에러(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
반응형
'JAVA > 이론' 카테고리의 다른 글
79. [JAVA] @OneToMany & @ManyToOne ?? (1) | 2025.01.15 |
---|---|
60. [ JAVA ] SpringBoot JPA @Entity 사용법 (0) | 2025.01.12 |
36. [ JAVA ] 배열 : HashMap (0) | 2024.12.17 |
35. [ JAVA ] 배열 : ArrayList (0) | 2024.12.17 |
34. [ JAVA ] 문자열 생성하는 방법 (1) | 2024.12.17 |