1. Exception이란
Exception은 프로그램 실행 중 발생하는 오류 상황을 의미한다.
프로그램이 정상적으로 동작하는 과정에서 예상하지 못한 문제가 발생할 수 있으며, 자바에서는 이러한 상황을 Exception 객체로 표현하여 처리한다.
예를 들어 다음과 같은 상황에서 예외가 발생할 수 있다.
- 존재하지 않는 파일을 읽으려고 할 때
- 배열의 범위를 벗어난 인덱스를 접근할 때
- 데이터베이스 연결이 실패할 때
- 0으로 나누기를 수행할 때
이러한 예외를 적절하게 처리하면 프로그램이 갑자기 종료되는 것을 방지하고 안정적인 시스템을 만들 수 있다.
2. Exception 계층 구조
자바의 예외는 Throwable 클래스를 최상위로 하는 계층 구조를 가진다.
Throwable
├─ Error
└─ Exception
├─ Checked Exception
└─ Runtime Exception
각 계층의 의미는 다음과 같다.
3. Error
Error는 애플리케이션에서 복구하기 어려운 심각한 오류를 의미한다.
대표적인 예시는 다음과 같다.
- OutOfMemoryError
- StackOverflowError
특징
- JVM 내부에서 발생하는 오류
- 애플리케이션 코드에서 직접 처리하기 어려움
- 일반적으로 try-catch로 처리하지 않음
즉, Error는 개발자가 처리하는 대상이 아니라 시스템 수준의 문제에 가깝다.
4. Exception
Exception은 개발자가 처리할 수 있는 오류를 의미한다.
Exception은 크게 두 가지로 나뉜다.
- Checked Exception
- Runtime Exception
5. Checked Exception
Checked Exception은 컴파일 시점에 반드시 처리해야 하는 예외이다.
즉, 컴파일러가 try-catch 또는 throws 처리를 강제한다.
대표적인 예시는 다음과 같다.
- IOException
- SQLException
- FileNotFoundException
예시 코드
try {
FileReader file = new FileReader("test.txt");
} catch (IOException e) {
e.printStackTrace();
}
특징
- 컴파일 단계에서 예외 처리 여부를 확인
- 반드시 예외 처리를 해야 컴파일 가능
- 주로 외부 시스템과 관련된 작업에서 발생
예시
- 파일 입출력
- 네트워크 통신
- 데이터베이스 연결
6. Runtime Exception (Unchecked Exception)
Runtime Exception은 프로그램 실행 중 발생하는 예외이다.
컴파일 시점에는 체크되지 않기 때문에 Unchecked Exception이라고도 한다.
대표적인 예시는 다음과 같다.
- NullPointerException
- IllegalArgumentException
- IndexOutOfBoundsException
- ArithmeticException
예시 코드
int[] arr = new int[3];
System.out.println(arr[5]);
실행 결과
ArrayIndexOutOfBoundsException
특징
- 주로 개발자의 로직 오류에서 발생
- 컴파일러가 예외 처리를 강제하지 않음
- 코드 수정으로 해결되는 경우가 많음
7. Business Exception vs System Exception
실제 서비스 개발에서는 예외를 단순히 Checked / Runtime으로만 구분하지 않고, 비즈니스 예외와 시스템 예외로 구분하여 관리하는 경우가 많다.
8. Business Exception
Business Exception은 비즈니스 로직에서 의도적으로 발생시키는 예외이다.
즉, 시스템 오류가 아니라 서비스 규칙을 위반한 상황을 의미한다.
예시
- 재고 부족
- 이미 가입된 회원
- 잔액 부족
- 주문 불가 상품
예시 코드
if (product.getStock() < request.getQuantity()) {
throw new RuntimeException("재고 부족");
}
설명
상품 재고가 부족하면 주문을 진행할 수 없다.
이 경우 시스템이 고장 난 것이 아니라 비즈니스 규칙을 위반한 상황이다.
특징
- 서비스 정책과 관련된 예외
- 사용자에게 이해 가능한 메시지 제공 필요
- 보통 Custom Exception으로 정의하여 관리
예시
OutOfStockException
AlreadyExistsUserException
NotEnoughBalanceException
9. System Exception
System Exception은 시스템 내부 문제로 인해 발생하는 예외이다.
예시
- 데이터베이스 연결 실패
- 서버 장애
- 외부 API 호출 실패
- 네트워크 문제
예시 코드
Connection conn = dataSource.getConnection();
데이터베이스 연결이 실패하면 예외가 발생할 수 있다.
특징
- 개발자가 직접 제어하기 어려움
- 로그 기록이 매우 중요
- 사용자에게는 단순한 오류 메시지를 제공하는 경우가 많음
예시
DatabaseConnectionException
ExternalApiException
10. Business Exception vs System Exception 비교
| 구분 | Business Exception | System Exception |
| 원인 | 비즈니스 규칙 위반 | 시스템 오류 |
| 예시 | 재고 부족 | DB 연결 실패 |
| 발생 주체 | 서비스 로직 | 시스템 환경 |
| 사용자 메시지 | 상세 메시지 제공 | 일반 메시지 제공 |
| 처리 방식 | 예외 정의 후 처리 | 로그 기록 후 장애 처리 |
11. 최종 정리
Exception은 프로그램 실행 중 발생하는 오류 상황을 의미한다.
자바의 예외는 다음과 같이 구분된다.
- Error
- Checked Exception
- Runtime Exception
또한 실제 서비스 개발에서는 예외를 다음과 같이 구분하여 관리한다.
- Business Exception
- System Exception
이러한 구조로 예외를 관리하면 서비스의 안정성과 유지보수성을 높일 수 있다.
'백엔드 기초 재정비 > 스프링 계층 구조 이해' 카테고리의 다른 글
| GlobalExceptionHandler (0) | 2026.03.06 |
|---|---|
| 트랜잭션 실패 사례와 롤백 필요성 정리 (0) | 2026.03.03 |
| 트랜잭션(Transaction) 개념과 주문 생성 예제 (0) | 2026.03.02 |
| 로그인 API가 하는 일과 요청 → 응답 흐름 정리 (0) | 2026.02.27 |
| DTO vs Entity 정리 (0) | 2026.02.26 |