티스토리 뷰

Spring

[ 스프링DB ] 예외 처리

GiHoo 2023. 8. 24. 17:09

자바 예외

예외 계층

Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다.

 

Throwable : 최상위 예외이다. 하위에 Exception 과 Error 가 있다.

 

Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. ( 언체크 예외 )

  • 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다.
  • 상위 예외를 catch 로 잡으면 그 하위 예외까지 함께 잡는다.
  • 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문이다.
  • 애플리케이션 로직은 이런 이유로 Exception 부터 필요한 예외로 생각하고 잡으면 된다.

Exception : 체크 예외, 처리 or throws 예외 선언

  • 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.
  • Exception 과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다.

RuntimeException : 언체크 예외  (런타임 예외) , throws 예외 선언 안해도 됨

  • 컴파일러가 체크 하지 않는 언체크 예외이다.
  • RuntimeException 과 그 자식 예외는 모두 언체크 예외이다.

 

예외의 기본 규칙

  • 예외가 발생한다면 호출당한 쪽에서는 예외를 던지고, 호출한 쪽에서는 예외를 처리해야 한다.
  • 예외를 던지거나 처리할 때, 그 예외의 자식 예외들도 함께 처리된다.

언제 체크 예외와 언체크 예외를 사용할까?

기본적으로 언체크(런타임) 예외를 사용하자.

체크 예외는 비즈니스 로직에서 의도적으로 던지는 예외에만 사용하자. -> 계좌이체 실패, 로그인 ID, PW 불일치

 

예외 포함과 스택 트레이스

예외를 전환할 때 ( 체크 -> 언체크 ) 예외를 포함하지 않는다면 예외 메세지와 스택 트레이스를 확인할 수 없다.

예외를 전환하기 위해서는 예외를 포함하여 변경하는 것을 반드시 인지해야 한다.

 

SQLException의 errorCode

데이터베이스의 어떤 오류가 발생했는지 확인할 수 있는 코드

예외 변환으로 새로운 예외(직접 만든 예외)를 사용할 수 있다.

-> errorCode는 각 데이터베스마다 다르다. 데이터베이스를 변경할 경우 오류 코드도 수정해야 한다.

 

스프링 예외 추상화

스프링 데이터 접근 예외 계층

  • 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해준다.
  • 특정 기술에 종속적이지 않을 수 있다.

 

+) JDBC 반복 문제 해결 - JDBC Template

항상 유사하게 반복되는 코드

커넥션 조회, 동기화 -> 파라미터 반딩 -> 쿼리 실행 -> 결과 바인딩> 예외 발생 처리 -> 리소스 종료

위와 같은 일련의 반복적인 코드를 JDBC Template을 통해 해결할 수 있다.

JDBC Template를 사용한 코드

JDBC Template의 아래와 같은 코드 ( 다른 쿼리들도 존재 )로 위와 같이 간단한 코드를 사용할 수 있는 것이다.

 

 

 

본 포스팅은 인프런 강의 김영한님의

[ 스프링 DB 1편 - 데이터 접근 핵심 원리 ] 를 수강하며 작성한 내용입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30