본문 바로가기
Spring/토비의 스프링 3.1

토비의 스프링 chap 4 - 예외

by 성건희 2022. 6. 30.
반응형

예외 처리 방법

  • 예외 복구 : 예외상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 것
  • 예외 회피 : 예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던져버리는 것 (throws)
  • 예외 전환 : 발생한 예외를 그대로 던지는게 아니라 적절한 예외로 변환해서 던진다.
    • 예외 전환의 목적
      • 의미를 분명하게 해줄 수 있는 예외로 바꿔주기 위함
      • 예외를 처리하기 쉽고 단순하게 만들기 위해 포장하는 것 (주로 체크 예외를 언체크 예외로 바꾸는 경우)

SQLException

JdbcTemplate 으로 전환하면서 throws SQLException 이 사라졌는데,
JdbcTemplate 의 내부 코드를 보면 템플릿과 콜백에서 발생하는 모든 SQLException 을 런타임 예외인 DataAccessException 으로 포장해서 던져준다.
그 밖에도 스프링 API 메서드에 정의되어 있는 대부분의 예외는 런타임 예외다.

DataAceessException 주의사항

스프링을 활용하면 DB 종류나 데이터 액세스 기술에 상관없이 키 값이 중복되는 상황에서 동일한 예외가 발생할 것이라 생각하는데,
DuplicateKeyException 은 JDBC 를 이용하는 경우에만 발생한다.
그 이유는 SQLException 에 담긴 DB 에러코드를 바로 해석하는 JDBC 의 경우와 달리 JPA 나 하이버네이트 등에서는 각 기술이 재정의한 예외를 가져와 스프링이 최종적으로 DataAccessException 으로 변환하는데, DB 에러코드와 달리 이런 예외들은 세분화되어 있지 않기 때문이다. 참고로 하이버네이트의 중복 키 에러는 ConstrainViolationException 을 발생한다.

만약 DAO 에서 사용하는 기술에 상관없이 동일한 예외를 얻고 싶다면 직접 예외를 정의해두고 예외 전환을 하면 된다.

정리

예외 처리는 개발하면서 가장 자주 처리하는 중요한 작업인데, 에러 발생 시 로그에서 바로 파악할 수 있도록 의미있는 예외로 던져주는게 중요한 것 같다.

참고

  • 토비의 스프링 3.1 Vol. 1
반응형

댓글