외부 라이브러리(AWS SDK 등)의 예외를 catch로 잡으려면, 먼저 예외 계층 구조를 알아야 한다. 어떤 예외가 어떤 예외의 하위인지 모르면 catch를 제대로 구성할 수 없다. 확인하는 방법 3가지를 정리한다.


IntelliJ - Class Hierarchy (가장 빠른 방법)

클래스명 우클릭 → Open inClass hierarchy

전체 상속 트리를 한눈에 볼 수 있다.

SdkException
├── SdkClientException       — 네트워크, 타임아웃 등
└── SdkServiceException
    └── S3Exception           — S3 서버 측 오류
        ├── NoSuchKeyException
        ├── InvalidRequestException
        ├── TooManyPartsException
        └── ...

IntelliJ - 클래스 소스 직접 확인

클래스명 위에 커서 놓고 Ctrl+B (또는 클릭) → 소스로 이동한다.

소스 첫 줄의 extends에서 부모가 바로 보인다.

public class InvalidRequestException extends S3Exception {  // ← 여기

공식 문서

각 클래스 페이지의 클래스 정의 부분에 extends가 명시되어 있다.

  • AWS SDK v2 S3Client API: https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html
  • 각 메서드 페이지의 Throws: 섹션에서 던질 수 있는 예외 목록을 확인할 수 있다

catch에서 활용하는 방법

계층을 파악하면, 하위 예외를 하나씩 잡을 필요 없이 부모로 잡을 수 있다.

// ❌ 하위 예외를 하나씩 잡는 경우
} catch (InvalidRequestException e) {
} catch (TooManyPartsException e) {
} catch (NoSuchKeyException e) {
// ...

// ✅ 부모로 잡으면 하위 전부 포함
} catch (S3Exception e) {          // S3 서버 측 오류 전부
} catch (SdkClientException e) {   // 클라이언트 측 오류 전부
}

AWS SDK v2 예외 계층 참고

SdkException
├── SdkClientException
│   └── 네트워크 오류, 타임아웃, 설정 오류 등
└── SdkServiceException
    └── AwsServiceException
        └── S3Exception
            ├── NoSuchKeyException        — 파일 없음
            ├── NoSuchBucketException     — 버킷 없음
            ├── AccessDeniedException     — 권한 없음
            ├── InvalidRequestException   — 잘못된 요청
            ├── TooManyPartsException     — Multipart 파트 초과
            └── ...