반응형
예외 처리 방법
- 예외 복구 : 예외상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 것
- 예외 회피 : 예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던져버리는 것 (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
반응형
'Spring > 토비의 스프링 3.1' 카테고리의 다른 글
토비의 스프링 chap 5 - 서비스 추상화 (0) | 2022.07.01 |
---|---|
토비의 스프링 chap 3 - 템플릿 (2) | 2022.06.02 |
토비의 스프링 3.1 - 2장 (0) | 2022.05.30 |
토비의 스프링 3.1 - 1장 (0) | 2022.05.25 |
토비의 스프링 - 1장 (p.1 ~ 87) (0) | 2020.06.22 |
댓글