0Pricing
C# Academy · 강의

사가와 워크플로

장시간 실행되는 프로세스를 조정합니다.

사가와 워크플로은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

장기 워크플로 조정

일부 비즈니스 프로세스는 여러 메시지와 단계를 거쳐 오랜 시간 동안 진행됩니다. 예를 들어 주문 생성, 결제 청구, 재고 예약, 배송이 있습니다. 사가는 이러한 장기 실행 워크플로를 조정하고 메시지 전반에서 상태를 추적합니다.

사자란 무엇인가

사가는 상태를 가진 소비자입니다. 관련 메시지를 연결하고 워크플로의 현재 상태를 보관하며, 프로세스가 완료될 때까지 이벤트에 반응하여 상태 사이를 전환합니다.

상태 머신 사가

MassTransit는 MassTransitStateMachine을 사용하여 사가를 상태 머신으로 모델링합니다. 상태, 이벤트, 전환을 선언적으로 정의합니다.

dotnet add package MassTransit
// state machine sagas are built in

사가 상태

상태는 SagaStateMachineInstance를 구현하는 클래스입니다. CorrelationId와 단계 사이에서 기억해야 하는 모든 데이터를 담습니다.

public class OrderState : SagaStateMachineInstance
{
    public Guid CorrelationId { get; set; }
    public string CurrentState { get; set; }
    public decimal Amount { get; set; }
}

상태 및 이벤트 선언

상태 머신 내부에서 메시지 형식에 매핑되는 State 속성과 Event 속성을 선언합니다.

public class OrderSaga : MassTransitStateMachine<OrderState>
{
    public State AwaitingPayment { get; private set; }
    public State Completed { get; private set; }
    public Event<OrderPlaced> OrderPlaced { get; private set; }
    public Event<PaymentReceived> PaymentReceived { get; private set; }
}

상관관계

모든 이벤트는 일반적으로 OrderId와 같은 공유 식별자를 사용하여 올바른 사가 인스턴스와 연결되어야 합니다. 이렇게 하면 들어오는 메시지가 올바른 진행 중인 워크플로로 전달됩니다.

Event(() => PaymentReceived, e =>
    e.CorrelateById(m => m.Message.OrderId));

전환 정의

생성자에서 동작을 연결합니다. 초기 이벤트가 인스턴스를 생성하고 데이터를 저장한 다음 다음 상태로 전환합니다.

Initially(
    When(OrderPlaced)
        .Then(ctx => ctx.Saga.Amount = ctx.Message.Amount)
        .TransitionTo(AwaitingPayment));

상태에서 반응하기

During을 사용하여 특정 상태에서만 유효한 이벤트를 처리한 다음 후속 메시지를 게시하고 다음 상태로 전환합니다.

During(AwaitingPayment,
    When(PaymentReceived)
        .Publish(ctx => new OrderConfirmed(ctx.Saga.CorrelationId))
        .TransitionTo(Completed)
        .Finalize());

사가 상태 영속화

사가 상태는 재시작 후에도 유지되어야 하므로 저장소에 보관합니다. 저장소로는 엔터티 프레임워크, MongoDB, 레디스 등을 사용할 수 있습니다. MassTransit는 각 메시지를 처리하기 전후에 인스턴스를 불러오고 저장합니다.

x.AddSagaStateMachine<OrderSaga, OrderState>()
    .EntityFrameworkRepository(r =>
    {
        r.ExistingDbContext<OrderDbContext>();
    });

예약을 사용한 시간 제한

사가는 Schedule을 사용하여 시간 제한을 예약할 수 있습니다. 예를 들어 30분 이내에 결제가 수신되지 않으면 취소하도록 예약한 뒤, 시간 제한 이벤트를 처리하여 보상 작업을 수행할 수 있습니다.

보상

이후 단계가 실패하면 사가는 보상 작업을 실행하여 이전 작업을 되돌릴 수 있습니다(청구 금액 환불, 재고 해제 등). 이를 통해 분산 트랜잭션 없이도 전체 프로세스의 일관성을 유지합니다.

빠른 확인

사가와 워크플로를 테스트하십시오.

요약

사가는 상태를 가지고 상관관계가 설정된 소비자로서 장기 실행 워크플로를 조정합니다. MassTransit는 MassTransitStateMachine과 SagaStateMachineInstance 상태를 사용하며, State/Event 멤버, 식별자에 따른 상관관계, Initially/During을 통한 전환을 정의합니다. 상태는 저장소에 영속화하고, 시간 제한은 예약을 사용하며, 실패하면 보상 작업으로 이전 단계를 되돌립니다.

자주 묻는 질문

“사가와 워크플로” 강의는 무료인가요?

네 — “사가와 워크플로” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“사가와 워크플로”에서 뭘 배우나요?

장시간 실행되는 프로세스를 조정합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C# Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“사가와 워크플로” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 메시징 개념
  2. 메시지 생성 및 소비
  3. 사가와 워크플로
  4. 오류 처리와 재시도
← C# Academy(으)로 돌아가기