스프링에서 제공하는 데이터 접근 객체는 데이터 접근 기술을 쉽고 일관된 방법으로 사용하게 만들고자 하는 목적을 갖고 있습니다. 덕분에 데이터 접근 기술을 변경이 쉽죠. 그 중에서도 각 기술이 변경되더라도 에러 처리에 대한 걱정을 하지 않아도 되는 부분이 발군입니다.
이번 포스팅에서는 스프링이 어떤 방식으로 일관된 예외처리를 제공하는지 살펴보고자 합니다.
일관된 예외 계층 구조
스프링은 데이터 접근 기술 중심적인 예외를 일관된 방법으로 처리하는 것을 지원합니다.
아래 코드를 통해 간단히 살펴보겠습니다.
jdbcTemplate
에서 update
메서드를 이용하면 JdbcOperation에서 상속한 update
를 이용하여 쿼리를 날립니다.
JDBC api
의 executeUpdate
를 써서 만약 에러가 발생하면 SQLException
을 던져주죠 그리고 해당 클래스를 DataAccesException
으로 묶어 사용합니다.
DataAccessException
은 스프링 DAO 예외의 가장 부모 예외 처리로 하위 예외에 대한 내용을 모두 담고 있어 어떤 문제로 예외가 발생했는지 정확하게 파악할 수 있습니다. 또한 DataAccessException
은 RuntimeException입니다. 그 뜻은 SQL에서 발생한 처리할 수 없는 예외를 적절한 계층에서 처리할 수 있도록 유도합니다.
즉, DAO에서의 try-catch구문이 사라지게 되는 것이죠.
글의 서두에서 말했듯이 DataAccessException
덕분에 Data Access 기술에 구애받지 않고 예외를 일관되게 처리할 수 있습니다.
위 코드에서 볼 수 있듯, 다른 Data Access 접근 기술도 각 예외를 dao exception hierarachy에 포함되는 예외로 변경해주고 있습니다. 그리고 해당 예외를 DataAccessException
으로 던져주고 있습니다.
SQLExceptionTranslator
SQLExceptionTranslator
는 SQLException을 DataAccessException
으로 변경해주는 역할을 하는 인터페이스입니다. 기본적으로 SQLErrorCodeSQLExceptionTranslator
를 상속받아 사용하고 이 구현체는 각 벤더사의 코드를 사용합니다. 벤더사들의 코드를 기반으로 한 메타데이터로부터 exception 정보를 가져와 translate하는 것이죠.
스프링은 이처럼 일관된 에러 처리 방법을 사용하기 때문에 데이터 접근 기술에 구애받지 않고 개발을 할 수 있습니다.
'우아한테크코스 4기 > 레벨2' 카테고리의 다른 글
[Spring] ATDD 가독성 개선기 (0) | 2022.05.23 |
---|---|
[Spring] 로그백을 사용하여 로그를 남겨보자 (0) | 2022.05.13 |
[SQL] 페이징 구현하기 (2) | 2022.05.07 |
[Spring] Transaction 추상화, 동기화 (0) | 2022.04.27 |
[Spring] 컨트롤러 테스트 시 한글 깨짐 문제 해결 (0) | 2022.04.24 |