--- id: P-REINFORCE-WIKI-9F08E403 category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['saga-pattern-(orchestration)', 'microservices-architecture', 'event-driven-architecture', 'mediator-topology', 'compensating-transaction', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Saga Pattern (Orchestration)]] ## πŸ“Œ Brief Summary Saga νŒ¨ν„΄(Orchestration)은 μ—¬λŸ¬ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ— 걸친 λΆ„μ‚° λͺ…령을 일련의 둜컬 νŠΈλžœμž­μ…˜μœΌλ‘œ κ΅¬ν˜„ν•˜μ—¬ λ©”μ‹œμ§€ 흐름을 μ•ˆμ •μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” μ›Œν¬ν”Œλ‘œμš° νŒ¨ν„΄μ΄λ‹€ [1, 2]. 이 λ°©μ‹μ—μ„œλŠ” μ€‘μ•™μ˜ 이벀트 메디에이터(Event Mediator)κ°€ μ—¬λŸ¬ 단계λ₯Ό 쑰율(Orchestration)ν•˜λ©° λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€μ˜ 흐름을 쀑앙 μ§‘μ€‘μ‹μœΌλ‘œ μ œμ–΄ν•œλ‹€ [3-5]. λΆ„μ‚° ν™˜κ²½μ—μ„œ 데이터 일관성을 μœ μ§€ν•˜κ³  λ³΅μž‘ν•œ μ—λŸ¬ 처리 및 μƒνƒœ 관리λ₯Ό μˆ˜ν–‰ν•˜λŠ” 데 ν•„μˆ˜μ μœΌλ‘œ ν™œμš©λœλ‹€ [3, 6]. ## πŸ“– Core Content * **λΆ„μ‚° νŠΈλžœμž­μ…˜μ˜ κ΅­μ†Œν™”:** Saga νŒ¨ν„΄μ€ 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€κ°€ 자체 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ°€μ§€λŠ” λŠμŠ¨ν•œ κ²°ν•© ν™˜κ²½μ—μ„œ λΆ„μ‚°λœ λͺ…령을 λ‹€μˆ˜μ˜ 둜컬 νŠΈλžœμž­μ…˜μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΅¬ν˜„ν•œλ‹€ [2, 7]. 비동기 λ©”μ‹œμ§•μ„ ν™œμš©ν•˜μ—¬ 데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜λ©°, 각 μ„œλΉ„μŠ€λŠ” μžμ‹ μ˜ μž‘μ—…μ„ μ™„λ£Œν•œ ν›„ λ‹€μŒ 단계λ₯Ό μ²˜λ¦¬ν•œλ‹€ [2]. * **쀑앙 집쀑식 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(메디에이터 ν† ν΄λ‘œμ§€):** Saga Orchestration은 이벀트 메디에이터 ν† ν΄λ‘œμ§€λ₯Ό 기반으둜 μž‘λ™ν•œλ‹€ [1, 3, 4]. λ©”λ””μ—μ΄ν„°λŠ” 전체 μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ€‘μ•™μ—μ„œ κ΄€λ¦¬ν•˜λ©°, ν”„λ‘œμ„ΈμŠ€μ˜ 각 κ°œλ³„ 단계λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ 이벀트 μ±„λ„λ‘œ 비동기 이벀트(λ˜λŠ” λͺ…λ Ή)λ₯Ό μ „μ†‘ν•˜μ—¬ 싀행을 μ§€νœ˜ν•œλ‹€ [4-6]. * **μƒνƒœ μœ μ§€ 및 μ›Œν¬ν”Œλ‘œμš° μ œμ–΄:** μ€‘μ•™μ˜ λ©”λ””μ—μ΄ν„°λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό 좔적 및 μœ μ§€ν•˜κ³ , νŠΈλžœμž­μ…˜ μž¬μ‹œμž‘ κΈ°λŠ₯을 κ΄€λ¦¬ν•œλ‹€ [3, 6]. μ‹œμŠ€ν…œ 전체에 λ¬΄μž‘μœ„λ‘œ λΈŒλ‘œλ“œμΊμŠ€νŠΈν•˜λŠ” 방식과 달리, μ§€μ •λœ μ±„λ„λ‘œ ꡬ체적인 λͺ…령을 μ „λ‹¬ν•˜μ—¬ μ •κ΅ν•œ ν”„λ‘œμ„ΈμŠ€ μ œμ–΄λ₯Ό μˆ˜ν–‰ν•œλ‹€ [3]. * **μ—λŸ¬ 핸듀링과 보상 νŠΈλžœμž­μ…˜(Compensating Transaction):** λ‹€μˆ˜μ˜ μ„œλΉ„μŠ€μ— 걸친 λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€μ—μ„œ 후속 단계가 μ‹€νŒ¨ν•  경우, '보상 νŠΈλžœμž­μ…˜' νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ 이전에 μ™„λ£Œλœ 단계듀을 λ…Όλ¦¬μ μœΌλ‘œ 되돌렀(μ—­λ°©ν–₯ 처리) μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•˜κ³  μ‹œμŠ€ν…œμ˜ μƒνƒœλ₯Ό μΌκ΄€λ˜κ²Œ λ³΅κ΅¬ν•œλ‹€ [1]. ## βš–οΈ Trade-offs & Caveats * **μž₯점 (μ œμ–΄λ ₯ 및 데이터 일관성):** μ€‘μ•™μ—μ„œ 이벀트λ₯Ό ν†΅μ œν•˜λ―€λ‘œ λΆ„μ‚° μ—λŸ¬ μ²˜λ¦¬κ°€ λ›°μ–΄λ‚˜λ©°, λ°μ΄ν„°μ˜ μ΅œμ’… 일관성(Eventual Consistency)을 ν™•λ³΄ν•˜κΈ°μ— 더 μœ λ¦¬ν•˜λ‹€ [1, 3, 7]. λ˜ν•œ, μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  μ—λŸ¬ 볡ꡬ ν›„ ν”„λ‘œμ„ΈμŠ€λ₯Ό μž¬μ‹œμž‘ν•˜λŠ” λ“±μ˜ λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€ [6, 8]. * **단점 (결합도 증가 및 단일 μž₯애점):** 메디에이터가 전체 μ›Œν¬ν”Œλ‘œμš°λ₯Ό ν†΅μ œν•˜λ―€λ‘œ μ‹œμŠ€ν…œ μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ 결합도가 μ¦κ°€ν•œλ‹€ [3, 9]. μ€‘μ•™μ˜ 이벀트 메디에이터 μžμ²΄κ°€ μ„±λŠ₯ 병λͺ©(Bottleneck) ν˜„μƒμ„ μΌμœΌν‚€κ±°λ‚˜ μ‹ λ’°μ„± 문제(단일 μž₯애점 λ“±)λ₯Ό μœ λ°œν•  μœ„ν—˜μ΄ μžˆλ‹€ [3, 9]. * **μ œμ•½ 사항 (κ΅¬ν˜„ λ³΅μž‘μ„±):** 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€κ°€ 격리된 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΄μœ ν•˜λ―€λ‘œ 전톡적인 κ°•λ ₯ν•œ μΌκ΄€μ„±μ˜ ACID νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•  수 μ—†λ‹€ [7]. λŒ€μ‹  λ³΅μž‘ν•œ μ΅œμ’… 일관성 νŠΈλžœμž­μ…˜ 관리와 비동기 μ—λŸ¬ μ²˜λ¦¬μ— μ˜μ‘΄ν•΄μ•Ό ν•˜λ―€λ‘œ κ΅¬ν˜„ 및 디버깅, λͺ¨λ‹ˆν„°λ§ λ‚œμ΄λ„κ°€ μƒμŠΉν•œλ‹€ [1, 3, 7]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A: μ•„ν‚€ν…μ²˜/기반 기술] * [[Microservices Architecture]] * μ—°κ²° 이유: Saga νŒ¨ν„΄μ€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ—μ„œ 각 μ„œλΉ„μŠ€κ°€ 고유의 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΄μœ ν•¨μ— 따라 λ°œμƒν•˜λŠ” λΆ„μ‚° νŠΈλžœμž­μ…˜ 관리 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλœ νŒ¨ν„΄μ΄λ‹€ [2, 7]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΆ„μ‚°λœ ν™˜κ²½μ—μ„œ μ„œλΉ„μŠ€μ˜ 독립성을 보μž₯ν•˜λ©΄μ„œ μ–΄λ–»κ²Œ λΉ„μ¦ˆλ‹ˆμŠ€ νŠΈλžœμž­μ…˜μ„ 섀계해야 ν•˜λŠ”μ§€μ— λŒ€ν•œ ꡬ쑰적 ν•„μš”μ„±. * [[Event-Driven Architecture]] * μ—°κ²° 이유: Saga의 비동기 λ©”μ‹œμ§• 및 μ›Œν¬ν”Œλ‘œμš° μ œμ–΄λŠ” 이벀트 μƒμ‚°μž, μ†ŒλΉ„μž, 채널 등을 ν™œμš©ν•˜λŠ” 이벀트 기반 μ•„ν‚€ν…μ²˜μ— 근간을 두고 μžˆλ‹€ [1-3]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ„œλΉ„μŠ€ κ°„μ˜ 비동기 톡신과 이벀트의 전달 λ©”μ»€λ‹ˆμ¦˜. * [[Mediator Topology]] * μ—°κ²° 이유: μ€‘μ•™μ—μ„œ 이벀트 흐름을 μ œμ–΄ν•˜κ³  μ—λŸ¬ 및 μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” ν† ν΄λ‘œμ§€λ‘œ, Saga Orchestration의 핡심 λ™μž‘ 원리이닀 [3, 4, 6]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°κ°€ μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ–΄λ–»κ²Œ μ‘°μœ¨ν•˜κ³ , 브둜컀(Broker) 방식에 λΉ„ν•΄ μ–΄λ–€ ν†΅μ œλ ₯을 κ°–λŠ”μ§€μ— λŒ€ν•œ 이해. #### [관계 μœ ν˜• B: κ΅¬ν˜„/μ—°κ΄€ νŒ¨ν„΄] * [[Compensating Transaction]] * μ—°κ²° 이유: Saga μ›Œν¬ν”Œλ‘œμš° μ§„ν–‰ 쀑 νŠΉμ • 단계가 μ‹€νŒ¨ν–ˆμ„ λ•Œ, 데이터 일관성을 λ§žμΆ”κΈ° μœ„ν•΄ 이전 λ‹¨κ³„λ“€μ˜ μž‘μ—…μ„ μ·¨μ†Œ(논리적 μ—­λ³€ν™˜)ν•˜λŠ” 데 ν•„μˆ˜μ μΈ νŒ¨ν„΄μ΄λ‹€ [1]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ΅œμ’… 일관성 λͺ¨λΈμ—μ„œ μ—λŸ¬ λ°œμƒ μ‹œ λ‘€λ°±(Rollback)을 κ΅¬ν˜„ν•˜λŠ” ꡬ체적인 λ©”μ»€λ‹ˆμ¦˜. * [[Transaction Outbox Pattern]] * μ—°κ²° 이유: 영ꡬ적인 λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν‹°ν‹°(DB)λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” λ™μ‹œμ— 비동기 λ©”μ‹œμ§€λ₯Ό μ›μžμ (Atomically)으둜 μ „μ†‘ν•˜κΈ° μœ„ν•΄ Saga νŒ¨ν„΄κ³Ό ν•¨κ»˜ ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μ΄λ‹€ [2]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ 데이터 손싀 없이 μ•ˆμ „ν•˜κ²Œ λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 방법. ### Deeper Research Questions * Saga νŒ¨ν„΄μ˜ Orchestration 방식(Mediator 기반)κ³Ό Choreography 방식(Broker 기반) κ°„μ˜ μ„±λŠ₯ 및 λ³΅μž‘μ„± νŠΈλ ˆμ΄λ“œμ˜€ν”„λŠ” μ–΄λ–€ 기쀀에 μ˜ν•΄ μ„ νƒλ˜μ–΄μ•Ό ν•˜λŠ”κ°€? * 보상 νŠΈλžœμž­μ…˜(Compensating Transaction) μžμ²΄κ°€ μ‹€νŒ¨ν–ˆμ„ 경우, μ‹œμŠ€ν…œμ€ μ–΄λ–»κ²Œ μ—λŸ¬λ₯Ό ν•Έλ“€λ§ν•˜κ³  μ΅œμ’… 일관성을 λ‹¬μ„±ν•˜λŠ”κ°€? * 단일 μž₯애점이 될 수 μžˆλŠ” 이벀트 λ©”λ””μ—μ΄ν„°μ˜ μ„±λŠ₯ 병λͺ©μ„ μ˜ˆλ°©ν•˜κΈ° μœ„ν•œ μ•„ν‚€ν…μ²˜ μˆ˜μ€€μ˜ λΆ„μ‚°/μŠ€μΌ€μΌλ§ μ „λž΅μ€ 무엇인가? * 비동기 ν™˜κ²½μ—μ„œ Transaction Outbox νŒ¨ν„΄μ€ λ‹€μˆ˜μ˜ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ°„ λ©”μ‹œμ§€ μ „μ†‘μ˜ μ›μžμ„±μ„ μ–΄λ–»κ²Œ 기술적으둜 보μž₯ν•˜λŠ”κ°€? * κ°•λ ₯ν•œ 데이터 일관성(ACID)이 μš”κ΅¬λ˜λŠ” 금육 νŠΈλžœμž­μ…˜ λ“±μ—μ„œ, μ΅œμ’… 일관성에 κΈ°λ°˜ν•œ Saga νŒ¨ν„΄μ˜ ν•œκ³„λŠ” μ–΄λ–»κ²Œ 극볡될 수 μžˆλŠ”κ°€? ### Practical Application Contexts * **Implementation:** λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œ 비동기 λ©”μ‹œμ§€ 큐와 μ€‘μ•™μ˜ 이벀트 메디에이터λ₯Ό ν™œμš©ν•΄ λΆ„μ‚° νŠΈλžœμž­μ…˜μ„ 순차적인 둜컬 νŠΈλžœμž­μ…˜ μ§‘ν•©μœΌλ‘œ κ΅¬ν˜„. * **System Design:** 이컀머슀의 μ£Όλ¬Έ-μž¬κ³ ν™•μΈ-결제-배솑과 같이 μ—¬λŸ¬ 도메인(μ„œλΉ„μŠ€)이 μ—°κ³„λœ λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 섀계할 λ•Œ, 흐름을 ν†΅μ œν•˜κ³  μ—λŸ¬λ₯Ό λ‘€λ°±ν•˜λŠ” 쀑앙 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° 계측 ꡬ성. * **Operation / Maintenance:** 쀑앙 집쀑식 λ©”λ””μ—μ΄ν„°μ˜ λ‘œκ·Έμ™€ μƒνƒœ(State)λ₯Ό 톡해 νŠΈλžœμž­μ…˜μ˜ μ§„ν–‰ 및 μ‹€νŒ¨ 상황을 λͺ¨λ‹ˆν„°λ§ν•˜κ³ , μ—λŸ¬ ν•Έλ“€λŸ¬λ₯Ό ν†΅ν•œ 보상 νŠΈλžœμž­μ…˜ 처리λ₯Ό 운영 μš”μ†Œλ‘œ 관리. * **Learning Path:** λΆ„μ‚° 데이터 관리(Database per Service) -> 이벀트 기반 톡신(Mediator/Broker Topology) -> νŠΈλžœμž­μ…˜ μ œμ–΄(Saga Pattern & Compensating Transaction) -> νŒ¨ν„΄ 고도화(CQRS & Outbox Pattern). * **My Project Relevance:** 닀쀑 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ λΆ„ν• λœ ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ μ„œλΉ„μŠ€ 결함 λ°œμƒ μ‹œ 전체 νŠΈλžœμž­μ…˜μ„ λ‘€λ°±ν•˜κ³  데이터 일관성을 νšŒλ³΅ν•˜κΈ° μœ„ν•œ 핡심 섀계 μ „λž΅μœΌλ‘œ 적용 κ°€λŠ₯. ### Adjacent Topics * [[CQRS Pattern]] (Command Query Responsibility Segregation) * ν™•μž₯ λ°©ν–₯: Saga νŒ¨ν„΄μ΄ λΆ„μ‚° μ‹œμŠ€ν…œμ˜ λͺ…λ Ή(Command/Transaction) 흐름을 κ΄€λ¦¬ν•œλ‹€λ©΄, CQRSλŠ” 흩어진 데이터λ₯Ό 효율적으둜 μ‘°ν•©ν•˜κ³  쿼리(Query)ν•˜λŠ” ꡬ쑰λ₯Ό λ‹€λ£¨λ―€λ‘œ MSA 데이터 관리 μ „λž΅μœΌλ‘œ ν•¨κ»˜ μ—°κ΅¬λ˜μ–΄μ•Ό 함 [2, 10]. * [[Choreography Pattern]] (Broker Topology) * ν™•μž₯ λ°©ν–₯: 쀑앙 μ‘°μ •μž(Mediator) 없이 μ„œλΉ„μŠ€λ“€μ΄ 이벀트λ₯Ό 직접 μ£Όκ³ λ°›μœΌλ©° μ›Œν¬ν”Œλ‘œμš°λ₯Ό ν˜•μ„±ν•˜λŠ” ꡬ쑰둜, Orchestration의 λŒ€μ•ˆμ  νŒ¨ν„΄μœΌλ‘œμ„œμ˜ μž₯단점 비ꡐ 및 ν•™μŠ΅. --- *Last updated: 2026-05-02*