[MSA] 5. MSA의 νŠΈλžœμž­μ…˜ 이야기 1 - νŠΈλžœμž­μ…˜μ˜ 이해와 MSAμ—μ„œ λ°”λΌλ³΄λŠ” νŠΈλžœμž­μ…˜

λ°˜μ‘ν˜•

이 글을 μž‘μ„±ν•˜κΈ° 전에 μ–΄λ–€ 제λͺ©μ„ λΆ™μ—¬μ•Ό 할지 λ§Žμ€ 고민을 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. MSAμ—μ„œ νŠΈλžœμž­μ…˜μ˜ λ¬Έμ œλŠ” ν˜„μž¬ λŒ€λ‘λ˜κ³  μžˆλŠ” κ°€μž₯ 큰 문제라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

이번 ν¬μŠ€νŠΈμ—μ„œλŠ” νŠΈλžœμž­μ…˜μ˜ κΈ°λ³Έ 이야기와 λͺ¨λ†€λ¦¬μ‹μ˜ νŠΈλžœμž­μ…˜, MSAμ—μ„œ νŠΈλžœμž­μ…˜μ— λŒ€ν•΄ 정말 깊게 λ‹€λ€„λ³΄λŠ” μ‹œκ°„μ„ 가져보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. 3 파트둜 λ‚˜λˆ„μ–΄ 진행될 μ˜ˆμ •μ΄λ©° 1번째 νŒŒνŠΈμ—μ„œλŠ” νŠΈλžœμž­μ…˜μ— λŒ€ν•œ 기본을 이야기 ν•˜κ³ , λͺ¨λ†€λ¦¬μ‹μ˜ νŠΈλžœμž­μ…˜μ„ λ‹€λ€„λ³΄κ³ μž ν•©λ‹ˆλ‹€.

 

 

 

What is Transaction ?

νŠΈλžœμž­μ…˜μ΄λž€, λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λŒ€ν‘œμ μœΌλ‘œ κ°€λŠ₯ν•œ μž‘μ—…μ—λŠ” 검색(SELECT), μˆ˜μ •(UPDATE), μ‚½μž…(INSERT), μ‚­μ œ(DELETE)κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 μ€‘μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ³€ν™”λ₯Ό κ°€λ¦¬ν‚€λŠ” μž‘μ—…μ—λŠ” μˆ˜μ •, μ‚½μž…, μ‚­μ œκ°€ 있고, 이듀 μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•ŒλŠ” λ°˜λ“œμ‹œ νŠΈλžœμž­μ…˜μ΄ λ”°λΌμ˜΅λ‹ˆλ‹€.

 

νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰λœ λ’€μ—λŠ” 컀밋 ν˜Ήμ€ 둀백이 μ§„ν–‰λ©λ‹ˆλ‹€.

그런데, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό μ‚½μž…, μˆ˜μ •, μ‚­μ œν•  λ•Œ μ™œ μ΄λŸ¬ν•œ λ³΅μž‘ν•œ 과정을 μ§„ν–‰ν•˜λŠ” κ²ƒμΌκΉŒμš”?

 

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° μ΄μ „μ—μ„œ μš°λ¦¬κ°€ 데이터λ₯Ό μ €μž₯ν•  λ•ŒλŠ” νŒŒμΌμ΄λΌλŠ” 것을 μ‚¬μš©ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 단일 파일 ν•˜λ‚˜μ— λ§Žμ€ 것을 λ³΄κ΄€ν•˜κ±°λ‚˜ 관계가 μžˆλŠ” 데이터듀을 λ§€ν•‘ν•˜λŠ” 데 μžˆμ–΄ μ—¬λŸ¬ 개의 νŒŒμΌμ„ μ‚¬μš©ν•΄μ•Ό ν–ˆκ³ , μ΄λ“€μ˜ νŒŒμΌμ„ 각각 λΆˆλŸ¬μ˜€λŠ” 것은 λ§Žμ€ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•¨κ³Ό λ™μ‹œμ— ν”„λ‘œκ·Έλž˜λ°μ— μžˆμ–΄ λ§Žμ€ λΆˆνŽΈν•¨μ„ μ΄ˆλž˜ν–ˆμŠ΅λ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄ μ€ν–‰μ˜ κ³„μ’Œ 이체λ₯Ό 보면, λ§Žμ€ μ‚¬λžŒλ“€μ΄ ν˜„κΈˆ 인좜기 ν˜Ήμ€ ATM을 μ‚¬μš©ν•˜μ—¬ κ³„μ’Œ 이체λ₯Ό ν•˜κ²Œ λ©λ‹ˆλ‹€. 이듀은 μ€ν–‰μ›μ—κ²Œ μ „λ‹¬ν•˜λŠ” 방식이 μ•„λ‹Œ, 기계가 ν•΄μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€. 그런데, κ³„μ’Œ 이체 쀑에 기계가 κ³ μž₯이 λ‚˜κ±°λ‚˜, μ–΄λŠ μ‹œμŠ€ν…œμ— 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μΉ΄λ“œκ°€ λ‚˜μ˜€μ§€ μ•Šκ±°λ‚˜ 기계가 멈좜 경우 λ‚΄ λˆμ€ μ–΄λ–»κ²Œ λ˜λŠ” κ²ƒμΌκΉŒμš”? 

 

λ§Œμ•½, νŒŒμΌμ—μ„œ μ΄λŸ¬ν•œ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€λ©΄, κ·Έ 경둜λ₯Ό μΆ”μ ν•˜κΈ°κ°€ ꡉμž₯히 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ A 파일이 λ‚˜μ˜ κ³„μ’Œμ΄κ³  B 파일이 μƒλŒ€λ°©μ˜ κ³„μ’ŒλΌλ©΄ A νŒŒμΌμ—μ„œλŠ” 이미 κ·Έ 돈이 λΉ μ Έλ‚˜κ°”λ‹€κ³  기둝 λ˜μ–΄ μžˆμ§€λ§Œ, 쀑간에 였λ₯˜κ°€ λ°œμƒν–ˆκΈ° λ•Œλ¬Έμ— B νŒŒμΌμ—μ„œλŠ” κ·ΈλŸ¬ν•œ 기둝을 μ°Ύμ•„λ³Ό 수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ¬Έμ œλŠ” λ°μ΄ν„°μ˜ μ›μžμ„±μ—μ„œ 이미 κ·Έ κΈ°λŠ₯을 μƒμ‹€ν•œ 것이 λ©λ‹ˆλ‹€.

 

그림으둜 μ‰½κ²Œ μ„€λͺ…ν•΄λ³΄μžλ©΄, A κ³„μ’Œμ—μ„œλŠ” 5,000원이 이체 λ˜μ—ˆλ‹€λŠ” 기둝이 μžˆμ§€λ§Œ 쀑간에 κΈ°κ³„μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄μ„œ B κ³„μ’Œμ—λŠ” κ·Έ 기둝이 남지 μ•ŠμœΌλ―€λ‘œ A κ³„μ’Œμ— 있던 5,000μ›μ˜ 정보λ₯Ό μ „μ‚° μ‹œμŠ€ν…œμ—μ„œ 찾을 수 μ—†κΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ λ©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ 문제 λ•Œλ¬Έμ— μƒκ²¨λ‚œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ νŠΈλžœμž­μ…˜μ€ μ•„λž˜μ™€ 같은 νŠΉμ§•μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.

 

  • Atomicity (μ›μžμ„±)

    νŠΈλžœμž­μ…˜ 연산은 λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ 반영이 λ˜λ˜μ§€, μ•„λ‹ˆλ©΄ μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό 함.

  • Consistency (일관성)

    νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œκ°€ λ˜μ—ˆλ‹€λ©΄, μ–Έμ œλ‚˜ 일관성 μžˆλŠ” μƒνƒœλ‘œ λ³€ν™˜λ¨.

  • Isolation (독립성, 격리성)

    λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰ λ˜λŠ” 경우, μ–΄λŠ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ‹€ν–‰ 쀑에 λ‹€λ₯Έ νŠΈλžœμž­μ…˜ 연산이 싀행될 수 μ—†μŒ.

  • Durablity (μ˜μ†μ„±, 지속성)

    μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ νŠΈλžœμž­μ…˜μ˜ κ²°κ³ΌλŠ” μ‹œμŠ€ν…œμ— 였λ₯˜κ°€ λ°œμƒν•΄λ„ 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό 함.

 

μœ„μ˜ 상황을 타기할 수 μžˆλŠ” νŠΉμ§•μ—λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ›μžμ„±μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ³„μ’Œ 이체λ₯Ό μˆ˜ν–‰ν•˜λ˜ 쀑에 기계에 λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬ μ œλŒ€λ‘œ μˆ˜ν–‰λ˜μ§€ μ•Šμ•˜μ„ 경우, λͺ¨λ“  λ°μ΄ν„°λ² μ΄μŠ€μ— κ·Έ 기둝 사항은 λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ νŠΈλžœμž­μ…˜μ˜ μ–΄λ–€ κΈ°λŠ₯으둜 μ΄λŸ¬ν•œ νŠΉμ§•μ„ λ°œνœ˜ν•  수 μžˆλŠ” κ²ƒμΌκΉŒμš”?νŠΈλžœμž­μ…˜μ€ μ—°μ‚°κ³Ό μƒνƒœλ‘œ λ‚˜λˆ„μ–΄, ν•΄λ‹Ή 연산에 따라 λ°˜ν™˜λ˜λŠ” μƒνƒœκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ νŠΈλžœμž­μ…˜ μ—°μ‚° μˆ˜ν–‰ 쀑, λ¬Έμ œκ°€ λ°œμƒν•œλ‹€λ©΄ μ™„λ£Œ, 그렇지 μ•ŠμœΌλ©΄ μ‹€νŒ¨λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ²°κ³Όλ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ˜ νŠΈλžœμž­μ…˜ κ΄€λ¦¬μžκ°€ 쀑앙에 μ‘΄μž¬ν•˜μ—¬ κ΄€λ¦¬ν•˜κ²Œ λ©λ‚˜λ‹€.

 

νŠΈλžœμž­μ…˜μ€ μ—°μ‚°κ³Ό μœ„ μƒνƒœλ‘œ 4κ°€μ§€μ˜ νŠΉμ§•μ„ λͺ¨λ‘ λ°œνœ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅ν–ˆλ‹€λ©΄, κ·Έ λ‚΄μš©μ„ λ°˜μ˜ν•˜κ³  성곡이 μ•„λ‹Œ λ‹€λ₯Έ μ•‘μ…˜μ΄ 취해진닀면 λ°˜μ˜ν•˜μ§€ μ•ŠλŠ” λ°©ν–₯으둜 μ‰½κ²Œ μ›μžμ„±μ„ 지킬 수 있죠.

 

각 μƒνƒœμ— λŒ€ν•΄ κ°„λ‹¨νžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

  • Active (ν™œλ™): νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰ 쀑인 μƒνƒœ
  • Failed (μ‹€νŒ¨): νŠΈλžœμž­μ…˜ 싀행에 였λ₯˜κ°€ λ°œμƒν•œ μƒνƒœ (이 λ•Œ, μ‹€ν–‰λœ νŠΈλžœμž­μ…˜μ€ 쀑단됨)
  • Aborted (철회): νŠΈλžœμž­μ…˜μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ Rollback 연산을 μˆ˜ν–‰ν•œ μƒνƒœ
  • Partially Commited (뢀뢄적 μ™„λ£Œ): νŠΈλžœμž­μ…˜μ΄ λ§ˆμ§€λ§‰ μ—°μ‚°κΉŒμ§€ μ •μƒμ μœΌλ‘œ λ™μž‘λ¨. (컀밋 μ—°μ‚° μ „)
  • Commited (μ™„λ£Œ): νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ’…λ£Œλ¨. (컀밋 μ—°μ‚° 끝.)

 

μ—¬κΈ°μ„œ μ£Όμ˜ν•΄μ•Ό ν•  점은 뢀뢄적 μ™„λ£Œμ™€ μ™„λ£ŒμΈλ°, 뢀뢄적 μ™„λ£ŒλŠ” νŠΈλžœμž­μ…˜ 연산이 μ •μƒμ μœΌλ‘œ λͺ¨λ‘ μˆ˜ν–‰λ˜μ—ˆμ§€λ§Œ 컀밋 μ—°μ‚° 전이라고 ν‘œμ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 말은 연산은 λλ‚¬μ§€λ§Œ 아직 영ꡬ적으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜μ–΄ μžˆλŠ” μƒνƒœλŠ” μ•„λ‹ˆλΌλŠ” μ μž…λ‹ˆλ‹€. 이 지점뢀터 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 무결성 등을 κ²€μ¦ν•˜λŠ” 단계λ₯Ό κ±°μΉ˜λŠ” λ“± λ‹€λ₯Έ λ³„λ„μ˜ λ‘œμ§μ„ μˆ˜ν–‰ν•  수 있고, κ·Έ 후에 컀밋 λͺ…령이 떨어지면 κ·Έ λ•ŒλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— 영ꡬ적으둜 μ €μž₯이 λ©λ‹ˆλ‹€.

 

 

 

 

Transaction in Monolithic Architecture

이번 포슀트의 메인은 νŠΈλžœμž­μ…˜μ΄ μ•„λ‹Œ 마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ˜ νŠΈλžœμž­μ…˜μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μš°λ¦¬λŠ” 이 뢀뢄을 짚기 전에, MSA의 νŠΈλžœμž­μ…˜μ΄ μ™œ λ³„κ°œμ˜ 타이틀이 λ˜μ—ˆκ³ , 기쑴의 λͺ¨λ†€λ¦¬μ‹κ³Ό μ–΄λ–»κ²Œ λ‹€λ₯΄λ©° 기쑴의 λͺ¨λ†€λ¦¬μ‹μ„ μ™œ 받아듀일 수 μ—†λŠ”μ§€, μ™œ 섀계λ₯Ό λ³„λ„λ‘œ ν•΄μ•Όν•˜λŠ”μ§€λ₯Ό μ’€ 더 μ–˜κΈ°ν•΄λ³΄κ³ μž 이번 타이틀을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

 

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜λ₯Ό 가진 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ νŠΈλžœμž­μ…˜μ€ μ–΄λ–»κ²Œ μ²˜λ¦¬ν• κΉŒμš”?

 

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜μ˜ 경우, λ°μ΄ν„°λ² μ΄μŠ€μ˜ νŠΈλžœμž­μ…˜μ— μ˜μ‘΄ν•˜κ²Œ λ©λ‹ˆλ‹€. DBμ—μ„œ μ œκ³΅ν•˜λŠ” νŠΈλžœμž­μ…˜μ€ μœ„μ—μ„œ λ§ν–ˆ 듯이 4κ°€μ§€μ˜ νŠΉμ§•μ„ 잘 μ œκ³΅ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

이런 것이 κ°€λŠ₯ν•œ μ΄μœ λŠ” λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜λ₯Ό 가진 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ μš΄μ˜ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— DBμ—μ„œ 각각 ν…Œμ΄λΈ”μ΄ RelationShip(관계)λ₯Ό 가지고 μžˆμ–΄λ„ κ·Έ μ—λŸ¬λ₯Ό μ•Œμ•„μ„œ μ²˜λ¦¬ν•΄μ£ΌκΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” 이에 μ œκ³΅ν•΄μ£ΌλŠ” ORM ν˜Ήμ€ 쿼리λ₯Ό μ‚¬μš©ν•˜λ©΄ μ΄λŸ¬ν•œ νŠΈλžœμž­μ…˜μ— λŒ€ν•΄μ„œ 신경쓰지 μ•Šμ•„λ„ λ©λ‹ˆλ‹€.

 

 

 

 

 

Transaction in Micro Service Architecture 

κ·Έλ ‡λ‹€λ©΄ 마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λŠ” μ–΄λ–¨κΉŒμš”?

 

마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λŠ” 각 μ„œλΉ„μŠ€λ³„λ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό λΆ„λ¦¬ν•˜λŠ” ν˜•νƒœμž…λ‹ˆλ‹€. 이 말은, 이와 μ—°κ²°λ˜μ–΄ μžˆλŠ” Database Server μΈμŠ€ν„΄μŠ€ λ˜ν•œ λΆ„λ¦¬μ‹œν‚¨λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 즉 μ›ν•˜λŠ” 데이터λ₯Ό DBμ—μ„œ 뽑아 μ“°λŠ” 것이 μ•„λ‹Œ 각자의 APIμ—μ„œ κ°€μ Έμ˜€λŠ” ν˜•νƒœμ΄λ©° 각 μ„œλΉ„μŠ€λŠ” μžμ‹ λ§Œμ˜ 데이터λ₯Ό 가지고 있고, κ·Έ λ°μ΄ν„°λ§Œμ„ 뽑을 수 μžˆλ„λ‘ 뢄산을 μ‹œν‚¨ κ²ƒμ΄μ§€μš”.

 

그런데, 이 μ„€κ³„λŠ” 문제점이 μžˆμŠ΅λ‹ˆλ‹€. 기쑴의 ν…Œμ΄λΈ”μ˜ 관계가 ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„ μΈμŠ€ν„΄μŠ€μ˜ νŠΈλžœμž­μ…˜μ—μ„œ κ΄€λ¦¬λ˜μ—ˆλ˜ 것듀이 μΈμŠ€ν„΄μŠ€ λ§ˆμ € λΆ„λ¦¬λ˜λ©΄μ„œ DB의 νŠΈλžœμž­μ…˜ κΈ°λŠ₯이 제 역할을 ν•˜μ§€ λͺ»ν•˜κ²Œ 되며 이λ₯Ό μ œλŒ€λ‘œ ν•˜μ§€ λͺ»ν•¨μœΌλ‘œμ¨ λ°μ΄ν„°μ˜ 일관성과 μ›μžμ„±μ„ 보μž₯ 받을 수 μ—†λ‹€λŠ” 단점이 μƒκΉλ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ μ΄λŸ¬ν•œ 마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ—μ„œ νŠΈλžœμž­μ…˜μ„ ν•  수 μžˆλŠ” λ°©λ²•μ—λŠ” μ–΄λ–€ 것듀이 μžˆμ„κΉŒμš”?

 

κ°€μž₯ 일반적으둜 두 개 μ΄μƒμ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν˜Ήμ€ λΆ„λ¦¬λ˜μ–΄ μžˆλŠ” μ„œλΉ„μŠ€κ°€ 각각의 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 가진 경우, μ΄λŠ” ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ 묢을 수 μžˆλŠ” Two-Phase Commit으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ—­μ‹œ 기쑴의 λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜μ²˜λŸΌ Transaction κ΄€λ¦¬μžκ°€ μ‘΄μž¬ν•˜μ—¬ 이 λ§€λ‹ˆμ €κ°€ νŠΈλžœμž­μ…˜μ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•¨μœΌλ‘œμ¨ DB νŠΈλžœμž­μ…˜μ„ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

κ·ΈλŸ¬λ‚˜ 마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ—μ„œ μœ„ 방법은 ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 각 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λͺ¨λ‘ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ“΄λ‹€λ©΄ μ–˜κΈ°κ°€ λ‹€λ₯΄κ² μ§€λ§Œ NoSQL을 μ‚¬μš©ν•˜λŠ” λ“±μ˜ 상황이 λ°œμƒν•  μˆ˜λ„ 있고, λ”μš±μ΄ Transaction κ΄€λ¦¬μžλŠ” 각 DB의 SQL 쿼리둜 λ°œμƒν•˜μ—¬μ•Ό μœ νš¨ν•˜μ§€λ§Œ 마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄ APIλ₯Ό ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— 이 방법을 μ μš©ν•˜κΈ°μ—λŠ” 무리가 μžˆμŠ΅λ‹ˆλ‹€.

 

λΆ„μ‚° νŠΈλžœμž­μ…˜ 쀑에 κ°€μž₯ 널리 μ•Œλ €μ§„ νŒ¨ν„΄ 쀑에 Saga νŒ¨ν„΄μ΄ μžˆμŠ΅λ‹ˆλ‹€. Saga νŒ¨ν„΄μ€ 단일 μ„œλΉ„μŠ€ λ‚΄ 데이터λ₯Ό κ°±μ‹ ν•˜λŠ” 일련의 둜컬 νŠΈλžœμž­μ…˜μž…λ‹ˆλ‹€. 첫 번째 νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλœ λ’€, 두 번째 νŠΈλžœμž­μ…˜μ˜ κ²½μš°λŠ” 이전 μž‘μ—… μ™„λ£Œμ— μ˜ν•΄ 트리거 λ˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμ–΄, λͺ¨λ“  μ„œλΉ„μŠ€λ“€μ΄ λ©”μ‹œμ§€ μ˜μ‘΄ν•˜λŠ” 방법 등을 κ³ μ•ˆν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

λ‹€μŒ ν¬μŠ€νŠΈμ—μ„œ Two-Phase Commitκ³Ό Saga νŒ¨ν„΄μ— λŒ€ν•΄ μžμ„Ένžˆ 닀뀄보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

 

 

λ°˜μ‘ν˜•
TAGS.

Tistory Comments