보상트랜잭션 실패시 데이터베이스 저장하는데 그것조차 실패하면 어떻게 하나요??
2
작성한 질문수 9
안녕하세요!!! 강사님!!! 3년차 백엔드 개발자입니다.
재고차감부터 쿠폰 그리고 분산 트랜잭션까지 쭉 너무 잘 듣고 있습니다!(이건 회사 계정이고 제 개인 계정으로 구매했습니다 ㅎㅎ)
Orchestaration - 현재구조의 문제점과 해결방법 강의를 수강중인데,
보상트랜잭션 실패시 데이터 베이스에 저장하는것과 같이 장애가 났을 경우를 대비하는것 같은습니다. 여기서 궁금한게 실무에서는 어느정도 장애상황까지 대비를 하는지 궁금합니다.
예를들어 지금과 같이 데이터베이스에 실패한 기록을 남기는것조차 실패할 수도 있을것 같은데요... 만약 카프카를 쓴다고 해도 카프카 장애로 기록이 안된다면???
이렇게 장애 상황을 계속 꼬리질문 하다보면 정말 끝도 없이 갈것 같은데... 실무에서는 어느정도 타협(?) 트레이드 오프(?)를 하는지 궁금합니다!!
추가로 혹시 강사님께서는 어떤 책으로 시스템 설계를 공부 하시는지도 궁금합니다..ㅎㅎㅎ
감사합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. HJ님. 질문 주셔서 감사합니다.
질문의 핵심은 보상 트랜잭션 실패 시 이러한 상태마저 기록할 때 실패할 가능성에 대한 대비에 관한 것입니다. 이러한 상황은 복잡한 시스템 환경에서 종종 발생할 수 있는 문제이고, 여러 가지 전략을 통해 해결할 수 있습니다.
장애 대비 및 트레이드 오프
최대한의 신뢰성 확보:
- 이중화: Kafka와 같은 시스템을 사용할 경우, Zookeeper 기반의 클러스터 구성으로 가용성을 높일 수 있습니다.
- 로그 저장소 복수화: 데이터를 기록할 로그 시스템(예: ELK 스택이나 Splunk)을 두 개 이상 운영하여 한쪽이 실패해도 다른 쪽에서 정보를 보존할 수 있게 합니다.
- 이중화: Kafka와 같은 시스템을 사용할 경우, Zookeeper 기반의 클러스터 구성으로 가용성을 높일 수 있습니다.
최소 필수 상태 보관:
- 에러와 상태 전환에 대해 클라이언트에게 피드백을 주고 중요 이벤트의 상태 변화만을 장기 보관하여 데이터 용량을 줄이고 복구 속도를 향상합니다.
- 에러와 상태 전환에 대해 클라이언트에게 피드백을 주고 중요 이벤트의 상태 변화만을 장기 보관하여 데이터 용량을 줄이고 복구 속도를 향상합니다.
타협점 및 트레이드 오프:
- 시스템은 완벽할 수 없으므로, 비즈니스 필요에 따라 가장 중요한 부분(예: 결제 실패 처리)에 집중하여 복구 시간을 줄이고 기타 덜 중요한 부분은 시스템이 복구되기를 기다리는 방식을 사용합니다.
- 시스템은 완벽할 수 없으므로, 비즈니스 필요에 따라 가장 중요한 부분(예: 결제 실패 처리)에 집중하여 복구 시간을 줄이고 기타 덜 중요한 부분은 시스템이 복구되기를 기다리는 방식을 사용합니다.
실무에서의 혼합 구현 사례
다양한 기술을 복합적으로 적용하여 장애 시나리오를 최소화하려는 실무 예시입니다:
- 큐 기반 메시지 시스템 사용: 롤백 보전이 가능하게 Message Queue 시스템의 덜 중요한 메시지를 일시적으로 유실할 수 있으나, 크리티컬한 메시지는 임시 저장소에 백업을 유지하여 나중에 일괄 처리하도록 합니다.
- 디스크 기반 로그: 일시적인 네트워크 이상으로 데이터베이스에 기록하지 못할 경우 디스크 로그에 기록해두고, 이후 복구 시 재처리를 시도합니다.
강사님께서 구체적으로 시스템 설계를 공부한 책에 대한 질문은 직접적인 대답을 드리기 어렵지만, 시스템 디자인 관련해서는 *“Designing Data-Intensive Applications”*와 같은 책들이 널리 읽히고 있습니다.
이 유사 질문에서 주문 처리 API와 관련된 오류 복구 및 보상 트랜잭션에 관한 다양한 접근을 확인할 수 있습니다. 비즈니스 논리에 맞는 최적의 방안을 도출하는데 참고가 되시길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
코드 자료는 없는걸까요?
0
34
3
DLQ의 수동 커밋에 대해서 질문있습니다.
0
34
2
혹시 다음 강의는 언제쯤 나올까요?
0
29
1
kubectl exec 에러가 발생해서 문의드립니다.
0
76
3
rabbitmq에 configservice 연결에 대해 질문있습니다.
0
45
1
pg사가 있다고 가정하면
0
34
1
38강 클러스터에 컨트롤러 연결 질문
0
70
2
Windows localhost:30000 연결 거부 현상
0
81
2
혹시 수업자료는 다운받을 수 있는 곳이 없나요?
1
87
2
user-service jwt
0
70
2
애그리거트 질문있습니다!
0
85
2
DDD 는 마이바티스와 잘 맞지 않는건가요?
0
82
1
스프링부트 버전 문의드립니다.
0
65
1
주문이벤트 발행에서 이벤트 발행을 동기적으로 처리하는 이유
0
74
1
spring-retry가 spring-core 패키지로 편입되었습니다.
2
149
1
TCC 주문 도중 문제 발생 시 상태 해소 전략 관련 질문입니다.
0
101
1
TCC PointService tryReserve 구현 관련 질문입니다.
0
87
2
[TCC 구현하기(2) - 동시성문제 해결하기] 질문
0
114
2
안녕하세요 강사님 질문있습니다.!!
0
112
2
테스트 코드
0
105
2
Optimistic Lock 사용이유
0
98
2
노트에 노션페이지 공유가 없습니다.
0
93
2
예시 코드 질문 드립니다
0
138
3
안녕하세요. Orchestration SAGA패턴 질문있습니다.
0
137
2





