스프링

DataAccessException이란?

그zi운아이 2023. 12. 29. 15:37

스프링에서의 데이터 액세스 예외 처리의 진화

과거의 JDBC 예외 처리와 그 문제점

과거의 자바 데이터베이스 애플리케이션은 JDBC API를 사용하여 직접 데이터베이스와 상호작용했습니다. 이러한 접근 방식은 몇 가지 중요한 문제를 가지고 있었습니다.

 

체크 예외 처리의 강제성: 과거의 자바 데이터베이스 애플리케이션은 JDBC API를 사용하여 직접 데이터베이스와 상호작용했습니다. 이 접근법은 SQLException과 같은 체크 예외를 던질 가능성이 높았습니다. 이로 인해 모든 데이터베이스 작업에 대한 강제적인 예외 처리 코드 작성이 요구되었습니다. 개발자가 예외 처리 코드를 작성하지 않으면 컴파일 에러가 발생하는 부담이 있었습니다.

 

데이터베이스 종속성: 각 데이터베이스 벤더는 고유한 에러 코드와 메시지를 제공했습니다. 이로 인해 애플리케이션을 다른 데이터베이스 시스템으로 전환하려 할 때 예외 처리 로직을 전면적으로 수정해야 할 수 있었습니다.

public List<User> getUsers() throws SQLException {
    Connection connection = null;
    try {
        connection = dataSource.getConnection();
        PreparedStatement ps = connection.prepareStatement("SELECT * FROM users");
        ResultSet rs = ps.executeQuery();
        // 결과 처리
    } finally {
        if (connection != null) {
            connection.close();
        }
    }
}

스프링의 혁신적인 접근: DataAccessException

스프링 프레임워크는 이러한 문제들을 해결하기 위해 DataAccessException 계층을 도입했습니다. 이러한 추상화는 다음과 같은 이점을 제공합니다

 

런타임 예외 처리: DataAccessException은 런타임 예외로, 개발자가 강제적으로 처리해야 하는 체크 예외의 부담을 줄여줍니다. 따라서 개발자는 필요한 경우에만 예외 처리 코드를 작성할 수 있습니다.

 

일관된 예외 처리: DataAccessException을 통해 JDBC, JPA 등 다양한 데이터 액세스 기술에 대한 예외 처리가 일관되게 관리됩니다. 이로써 모든 데이터 액세스 기술에서 일관된 예외 처리 방식을 적용할 수 있습니다.

 

추상화의 도입: DataAccessException 계층을 통해 데이터베이스 작업 중 발생하는 다양한 문제들을 특정한 런타임 예외로 매핑합니다. 이로써 데이터베이스 오류를 더 구체적으로 분류하여, 오류 처리를 명확하게 할 수 있습니다.

 

데이터베이스 이식성 향상: 스프링의 DataAccessException은 데이터베이스 벤더에 독립적인 예외 처리를 가능하게 합니다. 이는 다양한 데이터베이스 시스템 간의 이식성을 크게 향상시킵니다.

스프링의 JDBC 코드 예시:

public List<User> getUsers() {
    try {
        return jdbcTemplate.query("SELECT * FROM users", new UserRowMapper());
    } catch (DataAccessException e) {
        // 예외 처리 로직
    }
}

JPA 사용 시의 변화

스프링과 JPA를 함께 사용할 때, 스프링은 JPA 예외도 DataAccessException으로 변환하여 일관된 예외 처리 경험을 제공합니다. 이는 스프링이 제공하는 데이터 액세스 예외 처리의 일관성을 강화합니다.

스프링의 JPA 코드 예시:

@Transactional
public User getUser(Long id) {
    try {
        return entityManager.find(User.class, id);
    } catch (PersistenceException e) {
        throw new DataAccessResourceFailureException("Error accessing data.", e);
    }
}

결론

스프링 프레임워크의 DataAccessException 추상화는 체크 예외의 강제성과 데이터베이스 종속성 문제를 해결합니다. JDBC와 JPA를 포함한 다양한 데이터 액세스 기술을 사용할 때 일관된 예외 처리 방식을 제공함으로써, 코드의 간결성과 이식성을 향상시키고 유지보수를 용이하게 합니다. 이것이 스프링에서의 데이터 액세스 예외 처리의 핵심 원리입니다.

'스프링' 카테고리의 다른 글

토비의 스프링 | 8장 스프링이란 무엇인가  (0) 2024.01.10
스프링 핵심 AOP!  (1) 2024.01.03
빈(Bean)을 등록하는 여러가지 방법!  (0) 2023.12.20
스프링 빈이란?  (0) 2023.12.20