https://www.inflearn.com/course/스프링-db-1
스프링과 문제 해결 - 예외 처리, 반복
체크 예외와 인터페이스
- 서비스가 SQLException을 처리할 수 없기 때문에 Repository 계층에서 RuntimeException 으로 바꿔서 던지자.
- 체크 예외를 선언하려면 인터페이스에도 예외 선언이 되어있어야 한다.
- 인터페이스가 SQLException 에 종속적이여서 순수하지 않다.
- 순수한 인터페이스를 만들기 어려워진다. - 런타임 예외는 위에서 발생한 문제에서 자유롭다.
런타임 예외 적용
- 체크 예외를 런타임 예외로 변경할 때, 반드시 체크 예외를 포함하여 만들자
데이터 접근 예외 직접 만들기
- DB에서 중복키 같은걸로 ErrorCode 를 응답해줄 때가 있다.
서비스 계층에서는 예외 복구를 위해 키 중복 오류를 확인할 수 있어야 한다.
그래야 새로운 ID를 만들어서 다시 저장을 시도할 수 있기 때문이다.
자바 순수성이 깨지기 때문에 Repository 에서 RuntimeException으로 변경하여 서비스 계층에 던져야한다. - 만약 복구할수 없는 예외 면 로그만 남기고 다시 예외를 던진다.
- SQL ErrorCode 는 각각의 데이터베이스 마다 다르다.
결과적으로 데이터베이스가 변경될 때마다 ErrorCode 도 변경해야한다.
스프링 예외 추상화 이해
- 스프링은 데이터 접근 계층에 대한 수십 가지 예외를 정리해서 일관된 예외 계층을 제공한다.
- 예외의 최고 상위는 DataAccessException 이다.
- RuntimeException 을 상속받았기 때문에 스프링이 제공하는 데이터 접근 계층의 모든 예외는 런타임 예외이다. - Transient 는 일시적이라는 뜻이다.
하위 예외는 동일한 SQL을 다시 시도했을 때 성공할 가능성이 있다. - NonTransient 는 일시적이지 않다는 뜻이다.
하위 예외는 다시 성공해도 실패할 것이다. - 스프링이 제공하는 예외 변환기
- 스프링은 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해주는 변환기를 제공한다.
'Spring' 카테고리의 다른 글
[Spring] 스프링 DB 2편 - 데이터 접근 활용기술 - 1 (0) | 2023.04.01 |
---|---|
[Spring] 재고시스템으로 알아보는 동시성 이슈 해결방법 (0) | 2023.03.19 |
[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 - 4 (0) | 2022.10.28 |
[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 - 3 (1) | 2022.10.01 |
[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 - 2 (0) | 2022.09.18 |