강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

BeakGwa님의 프로필 이미지
BeakGwa

작성한 질문수

카카오 면접관(개발자)이 알려주는 MSA 관점에서의 분산 트랜잭션 패턴

SAGA 패턴의 장단점과 적합한 상황 시나리오

주식거래와 같은 실시간 보장이 필요한 상황에서 SAGA 패턴 도입에 대한 문의

해결된 질문

작성

·

28

0

안녕하세요!
과거에, MSA 학습용으로 모의 주식 투자 서비스(?)를 만들어본 사람입니다.

 

당시에, 주식 매수의 기능을, 2개의 service 로 운영했었고, 이때 각 요청의 순서는 이벤트 기반으로 처리하였습니다.

client -> stock service -> kafka-> payment service(이벤트 구독)

이때, 특정 문제에 대한 트랜잭션 보장을, 보장 로직을 통해 구현하였었습니다.

이때, kafka pub/sub 이벤트를 동기적으로 처리되었는지 확인하도록 구성해놓았었습니다.

 

주식 거래와 같은 일관성이 매우 중요한 서비스에서 어떤 방향성이 더 올바른(?) 방향이라고 생각하고, 어떤 생각을 가지고 계신지 궁금합니다.

 

현재 생각으로는, 2pc 를 채택하는게 더 올바른 선택이었다고 생각이 듭니다.

답변 2

1

Hong님의 프로필 이미지
Hong
지식공유자

안녕하세요 BeakGwa님 질문 감사합니다.

 

우선적으로 이벤트를 진행하는 과정에 있어서 데이터 상태관리가 어떻게 구성되었는지는 모르겠지만..

 

딱히 이런 부분이 존재하지 않았다면 당연하게도 2pc가 훨씬 좋을꺼 같습니다. 특히나 거래와 같이 동시성 문제가 너무 발생하기 쉬운 유형이라면 상태관리 측면이 쉽지는 않을꺼 같아서요.

 

저의 의견은 2pc로 정리해볼게요. 추가적인 질문이 있다면 남겨주세요. 감사합니다.

0

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

주식 거래와 같은 시스템에서 높은 일관성을 보장하는 것은 매우 중요합니다. 주식 거래는 특히 실시간 처리를 요구하며 트랜잭션이 확실히 일관되게 유지되어야 합니다.

SAGA 패턴과 2PC(2 Phase Commit)에 대해 비교해보면, 각각의 사용 사례는 다릅니다:

  1. SAGA 패턴: 주로 마이크로서비스 아키텍처에서 사용되는 방법으로, 롱런 트랜잭션을 분할하여 중간 상태를 로컬 서비스 내에서 관리하는 방식입니다. 이는 유연하고 독립성을 높이지만, 완전한 일관성 보호 측면에서는 적합하지 않을 수 있습니다. 주식 거래처럼 데이터 일관성이 중요한 경우에는 주의해야 합니다.

  2. 2PC(2 Phase Commit): 전통적으로 트랜잭션 일관성을 보장하기 위해 사용되며, 모든 참여자가 트랜잭션을 성공적으로 완료해야 최종적으로 커밋할 수 있도록 합니다. 일관성을 보장하기 때문에 주식 거래 같은 시나리오에서 적합할 수 있지만, 오버헤드가 크고 복잡한 아키텍처에서는 성능 문제가 발생할 수 있습니다.

주식 거래와 같은 높은 일관성이 필요한 환경에서는 2PC가 더 적합할 수 있습니다. 이는 전체 트랜잭션이 하나의 논리적 단위로 처리되며, 실패한다면 전체 롤백이 가능하여 데이터의 일관성을 보장합니다. 다만, 시스템 복잡성과 성능 이슈가 있을 수 있으니 이를 고려해야 합니다.

유사한 상황을 다룬 기존 답변도 참고해보세요:

이 링크에서는 SAGA 패턴의 다양한 구성 방식과 메시지 설계에 대한 논의가 포함되어 있습니다.

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

BeakGwa님의 프로필 이미지
BeakGwa

작성한 질문수

질문하기