보상 트랜잭션 프레임워크는 분산 시스템에서 트랜잭션 처리 중 장애나 오류가 발생할 경우 데이터의 일관성을 보장하고 시스템 무결성을 유지하기 위해 사용되는 디자인 패턴입니다. 불완전하거나 실패한 트랜잭션의 영향을 롤백하거나 보상하는 메커니즘을 제공하여 데이터 일관성을 유지하고 부분적이거나 일관되지 않은 상태를 방지합니다.

분산 시스템에서 트랜잭션에는 여러 시스템 또는 구성 요소에서 실행해야 하는 여러 작업이 포함될 수 있습니다. 이러한 작업에는 데이터베이스 업데이트, 메시지 전송, 서비스 호출 또는 시스템 상태를 수정하는 기타 작업 수행이 포함될 수 있습니다.

보상 트랜잭션 프레임워크는 2단계 커밋(2PC) 프로토콜을 따라 분산 트랜잭션에 관련된 여러 구성 요소에 걸쳐 원자성과 일관성을 달성합니다. 2PC 프로토콜은 준비 단계와 커밋 단계의 두 단계로 구성됩니다.

준비 단계에서는 트랜잭션에 참여하는 각 구성 요소가 오류 없이 자신의 역할을 성공적으로 실행할 수 있는지 확인합니다. 모든 구성 요소가 준비되면 코디네이터 노드에 준비 상태를 나타내는 “준비” 메시지를 보냅니다. 구성 요소에 오류가 발생하거나 작업을 진행할 수 없는 경우, 대신 “중단” 메시지를 보냅니다.

모든 컴포넌트가 “준비” 또는 “중단”으로 응답하면 코디네이터는 모든 컴포넌트가 커밋할 준비가 되었는지 여부를 결정합니다. 모든 응답이 긍정적이면 모든 참가자에게 “커밋” 메시지를 보내고, 그렇지 않으면 “중단” 메시지를 보냅니다.

참여자가 커밋 단계에서 실패하거나 네트워크 문제로 인해 코디네이터의 결정을 받지 못한 경우, 보상 트랜잭션을 사용하여 이전 작업을 취소하고 트랜잭션이 시작되기 전의 원래 상태로 되돌릴 수 있습니다.

보상 트랜잭션은 장애 발생 시 참여자가 수행한 각 작업에 대해 특별히 설계되었습니다. 보상 트랜잭션은 주 트랜잭션이 실행되는 동안 수행된 작업과 반대되는 작업을 수행합니다. 예를 들어 주 트랜잭션 중에 업데이트가 수행된 경우 보상 트랜잭션은 실행 취소 작업을 수행합니다.

보상 트랜잭션은 비동력적이어야 하며, 이는 부작용 없이 안전하게 여러 번 실행될 수 있음을 의미합니다. 이 속성은 실패 또는 재시도로 인해 보상 트랜잭션이 두 번 이상 실행되더라도 시스템에 불일치나 원치 않는 변경이 발생하지 않도록 보장합니다.

보상 트랜잭션 프레임워크를 활용하면 분산 시스템은 장애나 오류가 발생하더라도 데이터 일관성과 무결성을 유지할 수 있습니다. 불완전하거나 실패한 트랜잭션에서 정상적으로 복구할 수 있으므로 분산 트랜잭션에 관련된 모든 구성 요소가 변경 사항을 롤백하고 시스템을 일관된 상태로 복원할 수 있습니다.