컨트롤러에서 호출하는 서비스 질문드립니다.(+더티체킹)
123
작성한 질문수 3
안녕하세요 항상 양질의 강의 해주셔서 먼저 감사드립니다.
현재 코드 작성 중에 어떤게 더 나은 방법인지 궁금해서 문의드립니다.
카드 충전하는 서비스가 있다고 가정하면 컨트롤러를 통해 카드 충전 서비스를 호출할 예정입니다.
class Controller {
private final ChargeService chargeService;
void charge() {
chargeService.charge();
}
}위와 같이 충전 진행 시, 내부에서는 카드를 찾고 외부 API를 통해 충전을 진행 후 더티체킹을 통해 카드 상태를 업데이트 할 예정입니다.
class ChargeService {
private final CardFindService cardFindService;
private final ChargeHistoryService chargeHistoryService;
void charge() {
var card = cardFindService.findCard();
cardApiService.charge(); // 외부 API 호출
chargeHistoryService.save(); // 충전 내역 저장
card.updateStatus(); // 카드 상태 변경
}
}여기서 궁금한게 충전을 진행하는 ChargeService 내에서 더티체킹을 통해 카드의 상태를 업데이트 하는게 좋을지, 아니면 컨트롤러단에서 ChargeService와 CardUpdateService를 각각 호출해주는게 좋을까요?
class Controller {
private final ChargeService chargeService;
private final CardUpdateService cardUpdateService;
void charge() {
chargeService.charge();
cardUpdateService.updateCardStatus();
}
}OSIV를 꺼둔 상태에서 진행 시 chargeService 내 하나의 트랜잭션 내에서 충전 내역과 카드 상태까지 업데이트를 하는게 편리해 보이긴 하지만, chargeService 내에서 카드의 상태를 업데이트하는 역할까지 주어지는 것 같아 고민이 됩니다.
만약 서비스 2개를 각각 호출하게 되면 cardFind도 각 서비스 내에서 1회 씩 총 2번 호출되는 점도 마음에 걸립니다.
이와 같은 상황에서는 어떤 방식이 실무에 더 적합하고 좋을지 의견 부탁드리겠습니다.
감사합니다.
답변 1
1
안녕하세요. Byunguk Ahn님, 공식 서포터즈 y2gcoder입니다.
정답은 없으나 도움이 되길 바라면서 말씀을 드리고 싶습니다!
외부 API 호출 시간이 길지 않다면 같은 트랜잭션으로 묶어서 처리할 것 같고, 외부 API 호출 시간이 길다면 하나의 큰 서비스 내에서 카드 충전, 카드 상태 업데이트에 대한 로직을 따로 호출할 것 같습니다. 각 서비스 내에서 여러 번 호출되는 문제는 같은 트랜잭션으로 묶었을 때보다 더 문제가 안될 경우가 많습니다 🙂 (특히 pk나 인덱스로 호출한다면 더 그렇습니다)
먼저 생각하신 바대로 진행해보시고, 안되면 바꾸셔도 됩니다 🙂
감사합니다.
강의 관련 외 질문입니다.
0
81
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
101
1
BeanCreationException
0
96
3
Update 후 UpdateMemberResponse 매핑할 때
0
57
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
103
2
페이징 + 검색조건 관련해서 질문드립니다.
0
74
1
Query Dsl Q파일 질문입니다.
0
86
1
루트 쿼리라는것은
0
62
1
메서드를 분리하는 기준
0
71
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
116
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
92
2
fetch join과 영속화와 OSIV의 관계
0
90
2
Distinct 사용 전 결과에 대한 의문
0
118
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
63
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
79
2
dto 필드 속 엔티티 여부
0
63
1
뷰템플릿 사용 시
0
82
2
Result 클래스 관련 질문
0
57
1
@PostConstruct 프록시 관련 질문드립니다
0
88
1
DTO 대신 Form 사용은 안되나요?
0
140
1
OSIV ON 상태일 때
0
99
1
fetch join VS fetch join 페이징 궁금증
0
190
2
양방향 연관관계 알아보는 법?
0
110
1
16강 17강 간단 정리 이게 맞을까요 ?
0
168
2





