강의

멘토링

커뮤니티

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

파이리이2님의 프로필 이미지
파이리이2

작성한 질문수

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

모든 요청의 출입구이자 탈출구 역할을 수행하는 첫번쨰 애플리케이션

Orchestration 패턴시 트랜잭션 분리

해결된 질문

작성

·

27

0

안녕하세요 강의 열심히 보고 분산트랜잭션에 대해 배워가고 있습니다. 우선 좋은 강의 만들어주셔서 감사합니다.

 

강의를 보다가 OrchestrationService 소스 코드 설명해주시는 부분에서 궁금증이 생겨 질문드렸습니다.

 

현재 하나의 트랜잭션 내에서 출금처리에 대한 로컬 트랜잭션 처리 + 입금 서비스 REST 호출 + 입금 서비스 응답이후 SAGA 상태 업데이트 까지 처리하고 있는 것으로 보입니다.

 

이 경우에 입금 서비스에서 응답이 지연된다면 출금계좌에 대한 락은 지연시간만큼 대기를 하게 되고 트래픽이 몰리는 상황에서는 처리 성능이 떨어질것 같다고 판단했습니다.

 

그래서 제 생각에는 입금 서비스 호출 이전, 입급 서비스 호출 후 응답값에 대한 saga 업데이트, 출금 서비스 보상 처리 이렇게 3개의 로직을 각각 별개의 트랜잭션으로 선언해야 하지 않나 싶은데, 강사님의 의견이 궁금합니다!

답변 2

0

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

안녕하세요 파이리이2님 질문 주셔서 감사합니다. 말씀해주신 부분이 현실적으로 틀린부분은 아니에요 정말 좋은 고민을 해주신거 같습니다.

 

어디까지나 저는 간단하게 어떤 형태라는것을 알려드리기위해 작성한바가 있습니다. 그러니깐 너무 이 코드가 맞다고 생각하지마시고 고민해주신 부분으로도 나쁘지않겠다는 생각이 들어요.

 

또한 오케스트레이션이라고 이벤트를 사용을 안하지는 않아요 현실적으로 비동기로 돌릴 수 있는 부분이 있다면 이벤트로 처리하시는것을 추천드려요.

 

어디까지나 표준이지 그 표준을 조합해서 하이브리드 형태를 가져가는것이 가장 좋은 패턴이라고 생각합니다.

 

추가적인 질문있다면 편하게 주세요 감사합니다!!

파이리이2님의 프로필 이미지
파이리이2
질문자

답변 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. 파이리이2님.

MSA 환경에서의 트랜잭션 관리에 대한 질문을 주셔서 감사합니다. 오케스트레이션 패턴을 사용할 때, 트랜잭션의 분리 여부는 성능과 일관성 측면에서 매우 중요한 결정입니다.

트랜잭션 분리 제안의 이점:

  1. 서비스 독립성 강화: 입금 서비스가 지연되더라도 출금 서비스의 로컬 트랜잭션이 완료된 상태로 유지할 수 있습니다. 이렇게 하면 롱런 트랜잭션으로 인한 락 문제를 완화할 수 있습니다.

  2. 성능 개선: 서비스 간 호출이 독립적으로 처리된다면, 병목 현상이 발생할 가능성이 줄어들고 트랜잭션이 완료되기까지의 대기 시간이 짧아질 수 있습니다.

  3. 보상 트랜잭션 처리: 만약 입금 서비스 호출 후 에러가 발생하거나 지연이 된다면, 이미 진행된 출금에 대한 보상 트랜잭션을 실행할 수 있는 유연성이 생깁니다.

그러나, 트랜잭션을 분리하게 되면, 데이터 일관성 유지가 또 다른 주요 고려사항이 됩니다. 따라서, 각 트랜잭션이 성공적/실패적으로 완료되도록 추가적인 로직이 필요할 수 있습니다.

관련된 유사한 질문을 참고해보세요:

위의 링크에서는 트랜잭션 분리에 대한 접근 방법과 이상적인 결과를 위한 전략에 대한 논의가 포함되어 있습니다.

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

파이리이2님의 프로필 이미지
파이리이2

작성한 질문수

질문하기