..

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이 발생했을 때도 롤백이 일어나도록 설정할 수 있습니다.