..
Java 예외 처리: Checked vs Unchecked Exception 완벽 정리
1. 에러(Error) vs 예외(Exception)
- 에러(Error): 메모리 부족(OOM)이나 시스템 중단처럼 개발자가 코드로 제어할 수 없는 심각한 상황입니다.
- 예외(Exception): 개발자가 짠 로직에서 발생하는 문제로, 적절한 처리(
try-catch)를 통해 수습이 가능합니다.
2. 예외의 두 갈래: Checked vs Unchecked
Checked Exception (예외 처리 필수)
- 기준:
RuntimeException을 상속받지 않은 클래스들입니다. - 특징: 컴파일 시점에 체크되므로 무조건
try-catch로 감싸거나 부모 메소드로 던져야(throws) 합니다. - 대표 예시:
IOException,SQLException
Unchecked Exception (선택적 처리)
- 기준:
RuntimeException및 그 자손 클래스들입니다. - 특징: 실행 시점(Runtime)에 발견되며, 명시적인 처리를 강제하지 않습니다. 주로 개발자의 부주의로 발생하는 로직 오류가 많습니다.
- 대표 예시:
NullPointerException,IndexOutOfBoundsException
3. 스프링 트랜잭션과 롤백 전략
가장 중요한 차이 중 하나는 트랜잭션 롤백 기준입니다.
| 구분 | Checked Exception | Unchecked Exception |
|---|---|---|
| 자동 롤백 여부 | 롤백되지 않음 (데이터 보존) | 자동 롤백됨 (취소) |
| 의미 | 복구 가능한 상황으로 판단 | 복구 불가능한 시스템 장애로 판단 |
스프링의 @Transactional 어노테이션에서 rollbackFor 옵션을 사용하면, 기본 동작과 달리 특정 Checked Exception이 발생했을 때도 롤백이 일어나도록 설정할 수 있습니다.