- 스프링은 데이터 접근 계층에 대한 수십 가지 예외를 정리해서 일관된 예외 계층을 제공한다.
- 각각의 예외는 특정 기술에 종속적이지 않게 설계되어 있다. 따라서 서비스 계층에서도 스프링이 제공하는 예외를 사용하면 된다.
- 위 그림 말고도 더 많은 예외 계층이 존재한다
- 예외의 최고 상위는 DataAccessException이다. 런타임 예외를 상속받았기 때문에 모두 언체크 예외이다.
- 그리고 NonTransient와 Transient로 갈리는데
- Transient의 하위 예외는 동일한 SQL을 다시 시도했을 때 성공할 가능성이 있다.
- 예를 들어서 쿼리 타임아웃, 락과 관련된 오류들이 존재한다.
- NonTransient는 같은 SQL을 반복해서 실행하면 실패한다.
- SQL 문법 오류, 데이터베이스 제약조건 위배 등이 있다.
- Transient의 하위 예외는 동일한 SQL을 다시 시도했을 때 성공할 가능성이 있다.
- 스프링 메뉴얼에 모든 예외가 표시되있지 않기 때문에 DataAccessExcpton의 코드를 열어보는 것이 필요하다.
- 또한, 스프링은 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해주는 변환기를 제공한다.
...
// 변환기
catch(SQLException e) {
SQLErrorCodeSQLExceptionTranslator exTranslator = new SQLErrorCodeSQLExceptionTranslator(dataSoruce);
DataAccessException resultEx = exTranslator.translate("select", sql, e);
}
...
위의 변환기는 어떻게 작동되는 것일까? org.springframwork.jdbc.support.sql-error-codes.xml 파일을 열어보면 에러코드가 정의 된 모습을 볼 수 있다.
- 스프링은 데이터 접근 계층에 대한 일관된 예외 추상화를 제공하고 변환기를 통해서 적절한 데이터 접근 예외로 변환할 수 있다.
- 예외 추상화 덕분에 특정 기술에 종속적이지 않게 예외 처리를 할 수 있다. -> 스프링 기술 종속성은 발생한다.
'Spring > JDBC' 카테고리의 다른 글
[Spring DB] Mybatis (0) | 2024.08.12 |
---|---|
[Spring DB] Jdbc Template (0) | 2024.08.12 |
[Spring] 예외 누수 문제 해결 (0) | 2024.08.09 |
[Spring DB] 스프링 부트 리소스 등록 (0) | 2024.08.08 |
[Spring DB 개념] 트랜잭션 - AOP(proxy) (1) | 2024.08.08 |