inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

데이터 접근 예외 직접 만들기

체크 예외 -> 런타임 예외 변환 시 생성자

148

Jay

작성한 질문수 4

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
서비스 계층의 순수성을 위해 체크 예외를 런타임 예외로 변환해서 던지고, 런타임 예외로 변환 시 반드시 기존 체크 예외를 포함하여 던져야 한다.

왜냐하면 예외 발생 시 어떤 예외 때문에 해당 예외가 발생했는지 스택 트레이스를 참고하기 위해서이다.

 

그러면 차라리 런타임 예외 클래스의 생성자에서 예외를 포함하도록 강제하면 예외를 포함하여 던져야 한다. 는 부분이 해결 될 것 같은데요

강의에서는 다음과 같이 파라미터가 없는 기본 생성자를 만드는 특별한 이유가 있는 것인지 아니면 중요한 주제가 아니라 남기셨는지 궁금합니다.

 

public class MyDbException extends RuntimeException {
  public class MyDbException() {
     // 이 부분을 없애고 다음의 생성자만 남김 
  }
  
  public class MyDbException(Throwable cause) {
    // 이 생성자만 강제하면 반드시 예외를 포함하여 던져야 하므로 문제가 해결됨
  }
}

spring mvc spring-jdbc

답변 2

0

김영한

안녕하세요. Jay님

이 부분은 상황에 따라서 다를 것 같아요.

만약 MyDbException이라는 예외가 스스로 발생하지 못하고 항상 예외를 변환하는 목적으로만 사용해야 한다면 생각하신 것이 맞고, 그렇지 않고, MyDbException이 예외 변환 뿐만 아니라 스스로 생성하는 목적으로도 사용되는 경우가 있다면 기본 생성자를 허용해야 합니다.

감사합니다.

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. Jay님.

말씀하신 것처럼 체크 예외를 런타임 예외로 변환할 때 기존 예외(cause)를 포함하여 던지는 것은 매우 중요합니다. 이를 통해 예외 발생의 근본 원인을 정확히 추적할 수 있기 때문입니다.

강의에서는 기본 생성자를 제공하고 있지만, 사실 모든 상황에서 강제적으로 기본 생성자가 필요한 것은 아닙니다. Throwable 객체를 인자로 받는 생성자만 사용하도록 유도하여, 항상 원인이 되는 예외를 포함하도록 강제하는 것도 좋은 설계 방법입니다.

기본 생성자를 포함하는 것은 Java의 기본 규칙 준수와 혹시 모를 예외 상황대를 대비하기 위한 일반적인 관습이지만, 실무에서는 필요하지 않다면 과감히 제거하고 명확한 생성자 사용을 강제하는 것이 좋습니다.

관련한 참고 자료로는 체크 예외 -> 언체크 예외 전환 시 질문 게시물이 도움이 될 수 있습니다. 해당 게시물에서는 예외 전환 시의 의도와 처리 방식에 대한 설명이 제공되고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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

0

32

2

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

0

51

1

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

0

82

1

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

0

68

2

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

0

88

1

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

0

82

2

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

0

58

2

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

0

68

2

after 메서드 사용 유무

0

57

2

데이터베이스 접근 및 DB 락

0

55

1

@SpingBootTest, @TestConfiguration

0

56

1

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

0

48

1

AopCheck Test 부분의 EnhancerBySpring 확인 법??

0

66

2

커리큘럼 관련 질문

0

76

1

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

0

88

1

validation(toMember)의 위치

0

83

2

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

0

165

2

member 상수 질문

0

121

2

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

0

153

2

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

0

109

1

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

0

116

1

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

0

100

1

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

0

98

1

강의 14분쯤 Exception 질문

0

115

2