본문으로 바로가기

https://www.inflearn.com/course/스프링-db-1

 

스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의

www.inflearn.com

 

스프링과 문제 해결 - 예외 처리, 반복

체크 예외와 인터페이스
  • 서비스가 SQLException을 처리할 수 없기 때문에 Repository 계층에서 RuntimeException 으로 바꿔서 던지자.
  • 체크 예외를 선언하려면 인터페이스에도 예외 선언이 되어있어야 한다.
    - 인터페이스가 SQLException 에 종속적이여서 순수하지 않다.
    - 순수한 인터페이스를 만들기 어려워진다.
  • 런타임 예외는 위에서 발생한 문제에서 자유롭다.
런타임 예외 적용
  • 체크 예외를 런타임 예외로 변경할 때, 반드시 체크 예외를 포함하여 만들자
데이터 접근 예외 직접 만들기
  • DB에서 중복키 같은걸로 ErrorCode 를 응답해줄 때가 있다.
    서비스 계층에서는 예외 복구를 위해 키 중복 오류를 확인할 수 있어야 한다.
    그래야 새로운 ID를 만들어서 다시 저장을 시도할 수 있기 때문이다.
    자바 순수성이 깨지기 때문에 Repository 에서 RuntimeException으로 변경하여 서비스 계층에 던져야한다.
  • 만약 복구할수 없는 예외 면 로그만 남기고 다시 예외를 던진다.
  • SQL ErrorCode 는 각각의 데이터베이스 마다 다르다.
    결과적으로 데이터베이스가 변경될 때마다 ErrorCode 도 변경해야한다.
스프링 예외 추상화 이해
  • 스프링은 데이터 접근 계층에 대한 수십 가지 예외를 정리해서 일관된 예외 계층을 제공한다.
  • 예외의 최고 상위는 DataAccessException 이다.
    - RuntimeException 을 상속받았기 때문에 스프링이 제공하는 데이터 접근 계층의 모든 예외는 런타임 예외이다.
  • Transient 는 일시적이라는 뜻이다.
    하위 예외는 동일한 SQL을 다시 시도했을 때 성공할 가능성이 있다.
  • NonTransient 는 일시적이지 않다는 뜻이다.
    하위 예외는 다시 성공해도 실패할 것이다.
  • 스프링이 제공하는 예외 변환기
    - 스프링은 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해주는 변환기를 제공한다.