[Chapter 08] 8.7.1 @Transactional 애너테이션
파트 설정과 예외에 대한 질문
#109
Answered
by
corock
Irisation23
asked this question in
Chapter 08. Data Persistence
-
Q.
|
Beta Was this translation helpful? Give feedback.
Answered by
corock
Nov 4, 2023
Replies: 1 comment
-
이건 비즈니스를 어떻게 푸느냐에 따라 다를 것 같은데... 예시를 하나 들어보겠습니다. 만약 회원가입을 진행하는
그런데 신용카드를 등록하려면 별도 외부 서비스의 인터페이스 호출을 통해 신용카드를 등록할 수 있다고 가정해 봅시다. NetworkException.java public class NetworkException extends IOException {
public NetworkException(String message) {
super(message);
}
} MemberService.java @Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
private final PointAdaptor pointAdaptor;
@Transactional(rollbackFor = NetworkException.class)
public MemberResult signUp(MemberRequest request) {
Member savedMember = memberRepository.save(Member.of(request));
// NetworkException(CheckedException) 예외가 발생할 수 있는 영역
registrationCardAdaptor.addCreditCard(savedMember.getCardNumber());
return MemberResult.create();
}
} RegistrationCardAdaptor.java @Component
@AllArgsConstructor
public class RegistrationCardAdaptor {
private CardApi cardApi;
public void addCreditCard(String cardNumber) throws NetworkException {
cardApi.register(cardNumber);
// (...)
throw new NetworkException("카드 등록 인터페이스 호출 도중 오류 발생");
}
} |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
Irisation23
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
이건 비즈니스를 어떻게 푸느냐에 따라 다를 것 같은데... 예시를 하나 들어보겠습니다.
만약 회원가입을 진행하는
signUp
메서드가 있다고 가정해 보면, 다음과 같은 요구사항을 생각해 볼 수 있습니다.그런데 신용카드를 등록하려면 별도 외부 서비스의 인터페이스 호출을 통해 신용카드를 등록할 수 있다고 가정해 봅시다.
대표적인 CheckedException 으로
IOException
이 있는데, 이 예외를NetworkException
이라는 커스텀 클래스를 만들고extends
합니다.그때, 코드를 다음과 같이 작성한다면? (설명을 위한 예시로 든 것이기 때문에, 문제 상황만 주목하면 좋을 듯합니다.)
NetworkException.java
MemberService.java