서비스가 처리할 수 없는 예외에 대한 의존을 제거하기 위해 리포지토리가 던지는 SQLException 체크 예외
를 런타임 예외
로 변환 (ex. MyDbException)
그러면 서비스 계층은 해당 예외에 의존하지 않고 예외를 상위 계층으로 던짐
예외를 변환할 때는 기존 예외를 cause
로 포함해서 스택 트레이스로 원인이 되는 예외를 확인할 수 있도록 해야 함
데이터 저장 로직에서 키 중복 오류가 발생한 경우 이를 복구하고 싶다고 가정
데이터베이스는 키 중복이 발생한 경우 오류 코드
를 반환하고 오류 코드를 받은 JDBC 드라이버는 SQLException을 던짐
SQLException는 오류 코드를 저장하는 필드(vendorCode
)를 가짐
리포지토리에서는 SQLException이 발생한 경우 이를 잡아 에러 코드를 확인함
키 중복이 발생한 경우 MyDuplicateKeyException(MyDbException을 상속하여 데이터베이스 관련 예외 계층 형성)으로 변환함
서비스 계층에서는 MyDuplicateKeyException을 잡아서 키 중복이 발생한 경우 복구를 시도할 수 있음
이때 해당 예외는 특정 기술에 종속적이지 않으므로 순수한 서비스 계층 유지 가능