간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

SPRING/Spring

DataAccessException 란? -Spring 예외처리

2021. 8. 12. 17:35
728x90

1. SQLExcpetion

JDBC는 모든 Exception을 SQLException 에 하나에 모두 담아버린다. 대부분의 SQLException은 복구가 불가능하다. DAO 밖에서 SQLException을 다룰 수 있는 가능성은 거의 없다. 따라서 필요도 없는 기계적인 throws 선언이 등장하도록 방치하지 말고 가능한 한 빨리 언체크/런타임 예외로 전환해줘야 한다.

 

 

2. DataAccessException

런타임 예외이고 DataAccessException 중 가장 루트 class이다.

JdbcTemplate 템플릿과 콜백 안에서 발생하는 모든 SQLException을 런타임 예외인 DataAccessException으로 포장해서 던져준다.

Spring에서 DB 관련 Exception 은 DataAccessException 으로 한번 감싸줘서 알려준다고 보면 된다.

DBMS에 따라서 에러코드가 다를텐데 그래도 코드는 스프링에서 일관적으로 보여주니 일관성이 있어서 좋을 것이다. 

 

  • dbcTemplate은 SQLException을 단지 런타임 예외인 DataAccessException으로 포장하는 것이 아니라 DB의 에러 코드를 DataAccessException 계층구조의 클래스 중 하나로 매핑해준다.JdbcTemplate에서 던지는 예외는 모두 DataAccessException의 서브클래스 타입이다.
  • 드라이버나 DB 메타정보를 참고해서 DB 종류를 확인하고 DB별로 미리 준비된 매핑정보를 참고해서 적절한 예외 클래스를 선택하기 때문에 DB가 달라져도 같은 종류의 에러라면 동일한 예외를 받을 수 있는 것이다.

 

DataAccessException 특징

 

* 일관된 예외처리를 하기 위함.

 

* SQLException이나 HibernateException등과 같은 특정 기술에 의존적인 예외를 던지지 않음.

 

* 모든 DAO Exception은 org.springframework.dao.DataAccessException의 서브 클래스.

 

* 데이터 접근 인터페이스가 구현에 의존적인 예외가 아닌 스프링의 일반적인 예외를 던짐으로서, 

   persistence 구현에 결합되는 일을 방지.

 

* RuntimeException이기 때문에 비검사 예외(unchecked Exception)에 속함.

   -> DAO 에서 던진 예외를 코드에서 반드시 처리하지 않아도 된다는 의미.

   -> 검사 예외 (checked Exception)은 과도한 catch나 throws절을 불러 코드를 난잡하게 할 수 있다는 

         스프링의 일반적인 철학을 따르는 것.

 

* NestedRuntimeException의 서브클래스.

   -> 항상 NestedRuntimeException의 getCause()메서드를 통해 루트 예외인 Exception을 사용할 수 있다.

 

* Spring은 DAO 지원에 관한 특정 기술에 대한 예외들을 인식하며, 각 데이터베이스 제품의 에러 코드까지 인식.

 

*  자신의 예외 분류 체계에 있는 좀 더 특정한 예외중의 하나를 사용하여 다시 던질 수 있다.

 

---------------------------------------------------------------------------------------------------------------------

 

** CleanupFailureDataAccessException

     => 성공적으로 작동한 후 데이터베이스 자원을 반환할 때 발생하는 경우 (Connection 반환 등)

 

** DataAccessResourceFailureException

     => 데이터베이스 연동 실패 등 접근 실패

 

** DataIntegrityViolationException

     => 유일키 제약 (Unique Constraint) 위반과 같은 정합성 위반이 삽입 (Insert) / 갱신 (Update)의 결과로 

           발생한 경우

 

** DeadlockLoserDataAccessException

     => 현재의 프로세스가 교착상태(deadlock)에 빠진 경우

 

** IncorrectUpdateSemanticsDataAccessException

     => 원하는 수보다 많은 레코드를 갱신하는 등 갱신 작업에 있어서 의도하지 않은 어떤 일이 발생하는 경우. 

             @ 트랜잭션이 롤백 되지 않음!

 

** InvalidDataAccessApiUsageException

     => 실행되기 전에 컴파일 되어야 할 질의문의 컴파일에 실패하는 등 데이터 접근 자바 API를 잘못 사용하는 경우

 

** InvalidDataAccessResourceUsageException 

 
 => 관계형 데이터베이스 접근을 위해 잘못된 SQL 문법을 사용하는 등 자원에 대한 접근을 잘못하는 경우
 
 ** OptimisticLockingFailureException
 

 => 낙관적 잠금(optimistic locking)에 실패한 경우. 이 예외는 ORM 툴이나 커스텀 DAO 구현체에 의해 발생된다.
 
      * 낙관적 잠금(optimistic locking)
 
       동일한 데이터에 정확히 동시에 접근하는 일이 발생할 확률이 매우 낮을 것이라고 낙관하여 배타적 잠금을 하지 않는, 즉 데이터에 대한 동시 접근을 허용하는 정책
 
 ** TypeMismatchDataAccessException
 
 => String을 데이터베이스의 숫자 컬럼에 삽입하려고 하는 등 자바 타입과 데이터 타입이 일치하지 않는 경우
 
 ** UncategorizedDataAccessException
 
 => 무엇인가 잘못됐지만 좀 더 구체적으로 판별할 수 없는 경우

 

-- 원본 :  http://blog.naver.com/archy712/37944946

728x90
저작자표시 (새창열림)

'SPRING > Spring' 카테고리의 다른 글

[스프링] Session과 Cookie , HttpSession  (2) 2021.09.14
[스프링]HTTP프로토콜과 URI를 통한 요청  (0) 2021.09.08
HttpserveltRequest와 HttpSession,세션과 로그인 로그아웃  (1) 2021.08.03
UriComponents과 URLEncoding  (0) 2021.07.31
AOP를 이용한 트랜잭션 구현 중 트랜잭션이 먹지 않는 현상과 메모리누수경고(Memory leak)=(톰캣구동안됨) 404에러 해결  (0) 2021.07.21
    'SPRING/Spring' 카테고리의 다른 글
    • [스프링] Session과 Cookie , HttpSession
    • [스프링]HTTP프로토콜과 URI를 통한 요청
    • HttpserveltRequest와 HttpSession,세션과 로그인 로그아웃
    • UriComponents과 URLEncoding
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바