TIL 231015

geon·2023년 10월 15일
0

스프링 DB 1편

서비스 계층으로의 예외 누수 해결

런타임 예외로 전환

서비스가 처리할 수 없는 예외에 대한 의존을 제거하기 위해 리포지토리가 던지는 SQLException 체크 예외런타임 예외로 변환 (ex. MyDbException)
그러면 서비스 계층은 해당 예외에 의존하지 않고 예외를 상위 계층으로 던짐
예외를 변환할 때는 기존 예외를 cause로 포함해서 스택 트레이스로 원인이 되는 예외를 확인할 수 있도록 해야 함

특정 예외를 복구하고 싶은 경우

데이터 저장 로직에서 키 중복 오류가 발생한 경우 이를 복구하고 싶다고 가정

데이터베이스는 키 중복이 발생한 경우 오류 코드를 반환하고 오류 코드를 받은 JDBC 드라이버는 SQLException을 던짐
SQLException는 오류 코드를 저장하는 필드(vendorCode)를 가짐

리포지토리에서는 SQLException이 발생한 경우 이를 잡아 에러 코드를 확인함
키 중복이 발생한 경우 MyDuplicateKeyException(MyDbException을 상속하여 데이터베이스 관련 예외 계층 형성)으로 변환함
서비스 계층에서는 MyDuplicateKeyException을 잡아서 키 중복이 발생한 경우 복구를 시도할 수 있음
이때 해당 예외는 특정 기술에 종속적이지 않으므로 순수한 서비스 계층 유지 가능

profile
뭐라도 적기

0개의 댓글