Chapter 15 - 고급 주제와 성능 최적화

예외 처리

JPA 표준 예외 정리

JPA 표준 예외들은 PersistenceException의 자식 클래스이다.

그리고 이 예외 클래스는 RuntimeException의 자식이다.

따라서 JPA 예외는 모두 unchecked 예외이다.

  1. 트랜잭션 롤백을 표시하는 예외
  2. 트랜잭션 롤백을 표시하지 않는 예외로 나뉜다.

트랜잭션 롤백을 표시하는 예외는 심각한 예외 → 복구해서는 안된다.

이 예외 발생 시 트랜잭션 강제 커밋해도 커밋 안되고 RollbackException 예외 발생.

트랜잭션 롤백을 표시하지 않는 예외는 심각한 예외 X → 개발자가 커밋할지 롤백할지 판단하면 된다.

스프링 프레임워크의 JPA 예외 변환

서비스 계층에서 데이터 접근 계층의 구현 기술에 직접 의존하는 것은 좋은 설계 x.

서비스 계층에서 JPA의 예외를 직접 사용하면 JPA에 의존하게 된다. → 스프링 프레임워크가 데이터 접근 계층에 대한 예외를 추상회해서 개발자에게 제공한다.

→ @Repository 사용한 곳에 예외 변환 AOP를 적용해 JPA 예외를 스프링 프레임워크가 추상화한 예외로 변환해준다. (AOP 인터셉터가 동작해서 예외 변환해준다)

** @Repository, 정확히 기능이 뭐지? AOP로 Repository 등록하는데, 그러면 Spring data JPA로 생성한 인터페이스도 동일하게 aop로 생성되나?