#Ranvier 적용 사례

버전: 0.43.0 | 업데이트: 2026-04-03 | 적용 대상: ranvier-core, ranvier-runtime, ranvier-std | 카테고리: 가이드


Ranvier는 복잡한 비즈니스 로직을 구조적으로 다루는 웹 백엔드 프레임워크입니다. 이 아키텍처는 실제 서비스의 다양한 워크플로우에도 안정적으로 적용할 수 있습니다.

각 사례는 실제 도메인에 적용된 핵심 Axon 파이프라인을 보여주며, 전체 예제와 쿡북 링크를 포함합니다.


#1. Saga 보상 — 결제 게이트웨이

다단계 주문 프로세스에서 N단계가 실패하면, 앞선 단계들을 역순으로 롤백해야 합니다. Ranvier의 Saga 정책은 각 진행 단계에 보상 함수를 연결해, 실패 시 자동으로 LIFO 롤백이 일어나도록 합니다.

let order = Axon::typed::<OrderRequest, String>("order-saga")
    .with_saga_policy(SagaPolicy::Enabled)
    .then_compensated(reserve_inventory, release_inventory)
    .then_compensated(charge_payment, refund_payment)
    .then(complete_order);

예제: saga-compensation 쿡북: Saga 보상 패턴 심화


#2. 캐스케이드 스크리닝 — AML/KYC

순차적 컴플라이언스 검사에서 각 스크린이 신청을 조기에 거부할 수 있습니다. 비용이 적고 빠른 검사를 먼저 배치하여 불필요한 연산을 최소화합니다. 각 스크린은 독립적으로 테스트하고 교체할 수 있습니다.

let screening = Axon::typed::<CustomerApplication, String>("kyc-screening")
    .then(sanctions_check)
    .then(pep_check)
    .then(risk_scoring)
    .then(document_verification);

예제: cascade-screening 쿡북: 캐스케이드 스크리닝


#3. 다단계 파이프라인 — AI 에이전트

LLM 에이전트 파이프라인은 사용자 의도를 분류하고, 적절한 도구를 고르고, 실행한 뒤, 응답을 포맷합니다. 각 단계는 독립적으로 테스트하고 교체할 수 있으며, 필요한 Guard도 개별적으로 적용할 수 있습니다.

let pipeline = Axon::typed::<Query, String>("agent-pipeline")
    .then(classify_intent)
    .then(select_tool)
    .then(execute_tool)
    .then(format_response);

예제: llm-agent-pipeline 쿡북: 다단계 파이프라인


#4. 센서 결정 루프 — 스마트팜 IoT

센서 데이터가 지속적으로 도착하면 정규화하고, 이상을 감지하고, 조치를 결정합니다. 파이프라인이 원시 센서값을 관개 시작이나 환기 조절 같은 결정으로 변환합니다.

let iot = Axon::typed::<SensorReading, String>("iot-decision")
    .then(normalize_reading)
    .then(detect_anomalies)
    .then(decide_action);

예제: sensor-decision-loop


#5. 분류 분기 — 환자 트리아지

환자 접수 데이터가 활력징후 확인, 중증도 분류, 부서 배정을 거칩니다. 최종 Transition이 Outcome::Branch를 반환하여 응급실, 긴급진료, 일반병동 경로로 분기합니다.

let triage = Axon::typed::<PatientIntake, String>("triage")
    .then(check_vitals)
    .then(classify_severity)
    .then(route_department);
// Outcome::Branch로 emergency/urgent_care/general_ward 분기

예제: triage-branching


#6. 규칙 체인 — 복지 수급 판정

독립적인 비즈니스 규칙 체인이 신청자의 수급 자격을 평가합니다. 각 규칙이 거부로 단락(short-circuit)하거나 다음으로 통과시킬 수 있습니다. 규칙은 개별 테스트 가능하고 코드 변경 없이 순서를 바꿀 수 있습니다.

let eligibility = Axon::typed::<Applicant, String>("benefits-check")
    .then(age_rule)
    .then(income_rule)
    .then(residency_rule)
    .then(benefit_cap_rule);

예제: eligibility-rule-chain


#Ranvier가 적합하지 않은 경우

Ranvier는 다단계 로직, 감사 가능성, 제어된 분기가 중요한 도메인을 위해 설계되었습니다. 더 단순한 워크로드에는 가벼운 프레임워크가 더 적합합니다.

워크로드 더 나은 대안 이유
단순 CRUD REST API Axum 또는 actix-web 다단계 오케스트레이션 불필요. 표준 핸들러 함수로 충분.
고처리량 프록시/게이트웨이 Axum + Tower 프록시는 최소한의 요청당 로직과 최대 처리량이 필요. Tower 미들웨어가 이를 위해 설계됨.
순수 정적 사이트 / 자산 전달 표준 서버 (nginx, Caddy, object storage/CDN, tower-http::ServeDir) 자산 전달 자체가 주된 워크로드이며, Ranvier를 정당화할 비즈니스 로직 오케스트레이션이 없음.

빌드된 SPA를 API 라우트와 함께 제공하는 것은 여전히 serve_dir() + spa_fallback()을 사용하는 유효한 Ranvier 사용 사례입니다. 위 표는 자산 전달 자체가 목적이 되는 순수 정적 호스팅을 가리킵니다.