Saga Pattern - low-hill/Knowledge GitHub Wiki

Saga νŒ¨ν„΄

Saga λ””μžμΈ νŒ¨ν„΄μ€ 마이크둜 μ„œλΉ„μŠ€ κ°„μ˜ νŠΈλž™μž­μ…˜μ„ μ‘°μ •ν•˜μ—¬ 데이터 일관성을 보μž₯ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. Saga νŒ¨ν„΄μ€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ νŠΈλžœμž­μ…˜μ— λŒ€ν•œ 이벀트λ₯Ό κ²Œμ‹œν•˜μ—¬ λ‹€μŒ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ— λŒ€ν•œ νŠΈλžœμž­μ…˜μ„ νŠΈλ¦¬κ±°ν•œλ‹€. λ§Œμ•½ 단계 쀑 μ‹€νŒ¨κ°€ λ°œμƒ μ‹œ 이전 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ— λ‘€λ°± 이번트λ₯Ό κ²Œμ‹œν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ λ‘€λ°±ν•˜λ„λ‘ νŠΈλ¦¬κ±°ν•œλ‹€.

Saga νŒ¨ν„΄μ€ λΆ„μ‚° νŠΈλžœμž­μ…˜μ—μ„œ 전체 νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜κ±°λ‚˜ κ°œλ³„ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ— 였λ₯˜κ°€ λ°œμƒν•  경우 초기 μƒνƒœλ‘œ λ‘€λ°±λ˜λ„λ‘ 보μž₯ν•  수 μžˆλ‹€.
λͺ¨λ“  λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 자체 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ°€μ§€κ³  μžˆμ–΄ 일관성을 μœ μ§€ν•˜λ©΄μ„œ νŠΈλžœμž­μ…˜μ„ 관리할 수 μžˆλ‹€. Saga νŒ¨ν„΄ μ΄λŸ¬ν•œ 둜컬 νŠΈλžœμž­μ…˜μ„ ν•˜λ‚˜μ”© 순차적으둜 ν˜ΈμΆœν•˜μ—¬ μ²˜λ¦¬ν•œλ‹€. 각 둜컬 νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  λ‹€μŒ 둜컬 νŠΈλžœμž­μ…˜μ„ νŠΈλ¦¬κ±°ν•˜κΈ° μœ„ν•΄ 이벀트λ₯Ό κ²Œμ‹œν•΄μ„œ 정합성을 λ§žμΆ˜λ‹€. 이 단계 쀑 ν•˜λ‚˜μ— μ‹€νŒ¨ν•˜λ©΄ 이전 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λ³€κ²½ 사항을 λ‘€λ°±ν•˜κ³  데이터 일관성을 λ³΅μ›ν•˜λŠ” 보상 νŠΈλžœμž­μ…˜μΈ λ‘€λ°± νŠΈλžœμž­μ…˜μ΄ νŠΈλ¦¬κ±°λœλ‹€. 즉 일관성 μœ μ§€κ°€ ν•„μš”ν•œ νŠΈλžœμž­μ…˜μ„ λ¬Άμ–΄μ„œ μ²˜λ¦¬ν•˜λŠ” λŒ€μ‹  둜컬 νŠΈλžœμž­μ…˜μ„ ν•˜λ‚˜μ”© 순차적으둜 μ²˜λ¦¬ν•˜κ³  이번트 κ²Œμ‹œν•˜μ—¬ λ‹€μŒ 둜컬 νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•œλ‹€.

Saga νŒ¨ν„΄μ˜ μœ ν˜•

Saga νŒ¨ν„΄μ„ κ΅¬ν˜„ν•˜λŠ” λ°©λ²•μ—λŠ” 'choreography'와 'orchestration'μ΄λΌλŠ” 두 κ°€μ§€ μœ ν˜•μ΄ μžˆλ‹€.

Choreography Saga Pattern

Choreography Saga Pattern은 publish-subscribe 원칙을 μ μš©ν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ μ‘°μœ¨ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 자체 둜컬 νŠΈλžœμž­μ…˜μ„ μ‹€ν–‰ν•˜κ³  λ©”μ‹œμ§€ 브둜컀 μ‹œμŠ€ν…œμ— 이벀트λ₯Ό κ²Œμ‹œν•˜μ—¬ λ‹€λ₯Έ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ—μ„œ 둜컬 νŠΈλžœμž­μ…˜μ„ νŠΈλ¦¬κ±°ν•œλ‹€.
μ•„λž˜ κ·Έλ¦Όκ³Ό 같이 Choreography SagaλŠ” 각자의 μ±…μž„μ„ κ°€μ§€κΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€ κ°„μ˜ κ²°ν•©λ„λŠ” λŠμŠ¨ν•˜μ§€λ§Œ, λ³΅μž‘λ„κ°€ λ†’λ‹€. 이 방법은 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ νŠΈλžœμž­μ…˜ 단계가 λ„ˆλ¬΄ λ§Žμ§€ μ•Šμ€ μ‹¬ν”Œν•œ μ›Œν¬ν”Œλ‘œμ— μ ν•©ν•˜λ‹€.
image

Orchestration Saga Pattern

Orchestration SagaλŠ” νŠΈλžœμž­μ…˜μ„ 쀑앙 μ§‘μ€‘μ‹μœΌλ‘œ κ΄€λ¦¬ν•œλ‹€. 쀑앙 집쀑식 컨트둀러 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ 둜컬 νŠΈλžœμž­μ…˜μ„ 순차적으둜 μ‹€ν–‰ν•˜λ„λ‘ ν˜ΈμΆœν•˜κ³ , λ‹¨κ²Œ 쀑 ν•˜λ‚˜μ— μ‹€νŒ¨ν•˜λ©΄ 보상 νŠΈλžœμž­μ…˜μœΌλ‘œ λ‘€λ°± 단계λ₯Ό μ‹€ν–‰ν•œλ‹€. Orchestration SagaλŠ” 쀑앙 μ»΄ν¬λ„ŒνŠΈκ°€ νŠΈλžœμž­μ…˜μ„ μ œμ–΄ν•˜λ―€λ‘œ μ„œλΉ„μŠ€ κ°„μ˜ λ³΅μž‘μ„±μ€ μ€„μ–΄λ“€μ§€λ§Œ, μ„œλΉ„μŠ€ κ°„μ˜ 결합도가 λ†’μ•„μ§„λ‹€. 이 방법은 λ§Žμ€ 단계λ₯Ό ν¬ν•¨ν•˜λŠ” λ³΅μž‘ν•œ μ›Œν¬ν”Œλ‘œμ— 적합할 수 μžˆμ§€λ§Œ 쀑앙 μ»΄ν¬λ„ŒνŠΈκ°€ μž₯μ•  λ°œμƒμ‹œλ₯Ό κ³ λ €ν•΄μ•Ό ν•œλ‹€.
image

보상 νŠΈλžœμž­μ…˜(Compensating Transaction)

SAGA νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ €λ©΄ 보상 νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 였λ₯˜ λ°œμƒ μ‹œ 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ—μ„œ λ³€κ²½ν•œ λ‚΄μš©μ„ μ·¨μ†Œν•  수 μžˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 전체 νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜κ±°λ‚˜ 초기 μƒνƒœλ‘œ λ‘€λ°±λ˜λ„λ‘ 보μž₯ν•  수 μžˆλ‹€.

Reference