본문 바로가기
  • Let's study
BackEnd/Spring

[Spring] 왜 Exception을 던질까?

by 코딩고수이고파 2026. 8. 7.

Java에서는 예외 상황이 발생했을 때 return으로 값을 반환하기보다 Exception을 발생시키는 것이 일반적이다.

Spring도 메서드가 정상적으로 return되면 정상적으로 작업이 완료된 것으로 판단한다.

왜 Exception을 사용할까?

예를 들어 회원을 조회한다고 가정해 보자.

 

public Member findMember(Long id) {
    if (id < 0) {
        throw new IllegalArgumentException("id는 0 이상이어야 합니다.");
    }

    ...
}

 

id가 잘못된 값이라면 메서드를 계속 실행하는 것보다 즉시 예외를 발생시키는 것이 안전하다.

예외가 발생하면 메서드 실행이 즉시 중단되고, 호출한 곳에서도 문제가 발생했다는 사실을 명확하게 알 수 있다.

return은 정상 종료

아래 메서드는 정상적으로 종료된 것으로 처리된다.

 

public void save() {
    return;
}

 

하지만 아래처럼 Exception이 발생하면 Spring은 작업이 실패한 것으로 판단한다.

특히 @Transactional이 적용된 메서드라면 RuntimeException이 발생했을 때 트랜잭션이 Rollback된다.

 

public void save() {
    throw new RuntimeException();
}

자주 사용하는 Exception

Exception 사용 시점
IllegalArgumentException 잘못된 인자가 전달된 경우
IllegalStateException 객체의 현재 상태가 올바르지 않은 경우
NullPointerException null 객체를 참조한 경우(직접 던리는 경우는 거의 없음)
NoSuchElementException 원하는 데이터를 찾지 못한 경우
IndexOutOfBoundsException 배열이나 List의 범위를 벗어난 경우
UnsupportedOperationException 지원하지 않는 기능을 호출한 경우
ArithmeticException 0으로 나누기 등의 산술 오류
RuntimeException 적절한 예외가 없을 때 사용하는 부모 예외

상황에 맞는 Exception

예외를 던질 때는 의미가 맞는 Exception을 사용하는 것이 좋다.

 

throw new IllegalArgumentException();
 

만 봐도 "잘못된 인자가 전달되었구나." 라는 것을 바로 알 수 있다.

 

throw new RuntimeException();
 

만 사용하면 어떤 문제가 발생했는지 의미를 파악하기 어렵다.

따라서 적절한 Exception이 있다면 그 Exception을 사용하는 것이 좋다.

적절한 Exception이 떠오르지 않는다면 RuntimeException을 사용한다.

예외 메시지

예외를 발생시킬 때는 메시지도 함께 작성하는 것이 좋다.

 

throw new IllegalArgumentException("회원 ID는 0 이상이어야 합니다.");

 

로그를 확인하거나 디버깅할 때 원인을 빠르게 파악할 수 있다.

댓글