inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 1편 - 데이터 접근 핵심 원리

런타임 예외 적용

예외 복구 처리 시 런타임 예외로 전환 필요성

378

이무

작성한 질문수 58

0

체크 예외를 런타임 예외로 전환하는 것에 대해 의문점이 있습니다.

리포지토리에서 체크 예외인 SQLException을 런타임 예외인 MyDBException으로 변환하는 것은 서비스의 SQLException에 대한 의존을 제거하기 위함인데

특정 케이스의 예외(중복 키 발생)인 경우 복구를 위해 레퍼지토리에서 에러코드로 SQLException을 분리하고 코드에 따라 다른 런타임 예외를 만들어서 던집니다.

이 때 서비스에서는 해당 에러 복구를 위해 try-catch로 결국 해당 런타임 예외를 잡는 코드를 추가해야 합니다. 

-> 런타임 예외에 대한 종속이 생김

 

그렇다면 이렇게 예외 처리에 대한 목적이 분명한 경우 SQLException 예외 코드에 따라 (Exception)을 상속받은 체크 예외를 만들어서 던지게 되면 예외를 누락할 위험성도 없고 더 좋은것 아닌가요?

-> 어차피 직접 생성한 예외에 대한 종속이 서비스에서 발생하였으므로

 

왜 굳이 런타임 예외를 상속받은 예외를 생성해서 던지는 지 궁금합니다.

spring mvc spring-jdbc

답변 1

4

김영한

안녕하세요. 이무쿤님

예를 들어서 서비스A에서는 해당 예외를 잡아서 처리하는 것이 맞지만, 나머지 다른 모든 곳에서는 그냥 해당 예외가 발생하면 공통 예외로 처리하고 싶다고 가정해보겠습니다.

이런 경우에는 체크 예외가 있다면 해당 기능을 사용하는 모든 곳에서 체크 예외를 처리해야 합니다. 반면에 런타임 예외로 두면 필요한 곳에서는 잡아서 처리하고 그렇지 않은 곳에서는 컨트롤러 앞까지 예외를 던지고 예외가 공통으로 처리되도록 하면 됩니다. (스프링의 예외 공통 처리, @ControllerAdvice 등등)

물론 이것이 너무 중요하고, 반드시 잡아야 하는 경우라면 체크 예외로 두셔도 무방합니다.

결과적으로 런타임 예외나 체크 예외를 적용하는 것은 선택입니다 :)

도움이 되셨길 바래요.

spring initialiser 어떤걸 선택해야될지 모르겠어요

0

31

2

트랜잭션 템플릿이 체크예외는 커밋하는 이유가 궁금합니다.

0

50

1

jdbc 학습하다 궁금해서 질문드려요

0

82

1

정상이체와 이체중 예외발생 차이

0

68

2

이번 강의부터가 JDBC 직접 사용 맞나요?

0

87

1

순수한 서비스 계층에 대한 의문???

0

82

2

3_4test, 4test 자동 리소스 안됨

0

58

2

데이터베이스 선택 관련 질문.

0

68

2

after 메서드 사용 유무

0

56

2

데이터베이스 접근 및 DB 락

0

54

1

@SpingBootTest, @TestConfiguration

0

56

1

Read Committed 격리 수준 사용 관련 질문

0

48

1

AopCheck Test 부분의 EnhancerBySpring 확인 법??

0

66

2

커리큘럼 관련 질문

0

76

1

서비서 계층 스프링 프레임워크 사용

0

87

1

validation(toMember)의 위치

0

83

2

데이터 계층에서 서비스 로직의 datasource를 인식하는 방법

0

165

2

member 상수 질문

0

120

2

ctrl + F6 이후로 con 인식이 안 됩니다

0

153

2

DrivenManager 와 Connection 반환에 대한 질문입니다!

0

109

1

섹션5 트랜잭션 템플릿관련 질문(이기종 DB)

0

116

1

세션1 테이블 조회결과 그림은 Redo 로그에 속하나요?

0

98

1

트랜잭션이 필요하지 않은 경우 DB 대신 파일 시스템을 사용하는 것이 더 효율적인가?

0

98

1

강의 14분쯤 Exception 질문

0

114

2