백엔드 기초 재정비/스프링 계층 구조 이해

Exception 종류 정리

namerong 2026. 3. 4. 21:03

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은 크게 두 가지로 나뉜다.

  1. Checked Exception
  2. 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은 프로그램 실행 중 발생하는 오류 상황을 의미한다.

자바의 예외는 다음과 같이 구분된다.

  1. Error
  2. Checked Exception
  3. Runtime Exception

또한 실제 서비스 개발에서는 예외를 다음과 같이 구분하여 관리한다.

  1. Business Exception
  2. System Exception

이러한 구조로 예외를 관리하면 서비스의 안정성과 유지보수성을 높일 수 있다.