[MSA] 6. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 2 - Two-Phase commit๊ณผ Saga

๋ฐ˜์‘ํ˜•

์ด์ „ ๊ธ€์— ์ด์–ด์„œ MSA ๋‚ด์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์›ํ™œํžˆ ํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. 

 

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋”๋ถˆ์–ด ๋ชจ๋†€๋ฆฌํ‹ฑ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•œ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ DB ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” Commit๊ณผ Rollback์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ MSA์—์„œ๋Š” ๊ฐ ์„œ๋น„์Šค๋ณ„๋กœ DB ์ธ์Šคํ„ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ถ„๋ฆฌ๋จ์— ๋”ฐ๋ผ ๊ด€๊ณ„ํ˜•์œผ๋กœ ๋งบ์–ด์ง„ Entity๋“ค์€ ์„œ๋กœ๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ์šด์˜๋˜๊ณ , ๊ทธ๋“ค ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๋ฌด๋„ˆ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜์—ฌ ์ด๋“ค ์ผ๊ด€์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

1. Two-Phase Commit

Two-Phase Commit์ด๋ž€, 2๋‹จ๊ณ„์— ๊ฑฐ์ณ์„œ ์˜์†ํ•˜๋Š” ์ž‘์—…์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งํ•˜๋ฉด ์•„๋งˆ JPA์— ์žˆ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ํ˜ผ๋™์ด ๋˜์‹ค ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ์š”. Two-Phase Commit์€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

๋ถ„์‚ฐ DB ํ™˜๊ฒฝ์—์„œ๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ฃผ DB์™€ ๋ณด์กฐ DB๋กœ ๋‚˜๋ˆ„๋Š”๋ฐ์š”. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ๋ชจ๋†€๋ฆฌํ‹ฑ์—์„œ ์—ฐ๊ฒฐ๋œ ๋ฉ”์ธ DB๋Š” Primary DB์ธ๋ฐ, ์ด๋“ค์ด ์ด์ค‘ํ™” ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋ ค๋ฉด ๊ทธ๋“ค์ด ๋™๊ธฐํ™” ํ˜•ํƒœ๋กœ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Two-Phase Commit์€ ์ด๋Ÿฌํ•œ ์ฃผ DB์™€ ๋ณด์กฐ DB ์‚ฌ์ด์— ํŠธ๋žœ์žญ์…˜์„ ์กฐ์œจํ•˜๋Š” ์กฐ์ •์ž (Coordinator)๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ์ด์˜ ์—ญํ• ์€ ํŠธ๋žœ์žญ์…˜ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ์•„๋ž˜์˜ ๋‘ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ํŠธ๋žœ์žญ์…˜ ๋‹ด๋‹น์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

  • Prepare
  • Commit

์—ฌ๊ธฐ์„œ Prepare๋ผ๋Š” ์ž‘์—…์ด ๋ชจ๋†€๋ฆฌํ‹ฑ๊ณผ์˜ ์ฐจ์ด์ ์ธ๋ฐ, ์ด ๋ถ€๋ถ„์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋†€๋ฆฌํ‹ฑ์„ ๊ฐ€์ง„ ํ˜•ํƒœ๋Š” ๊ทธ๋“ค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋–„๋ฌธ์— ํŠธ๋žœ์žญ์…˜์„ ์ ์šฉํ•˜๋ ค๋Š” DB๊ฐ€ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ์ง€๋ฅผ ์•Œ์•„์•ผ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ถ„๋ฆฌ๋œ MSA์—์„œ๋Š” ๋Œ€์ƒ DB๊ฐ€ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ์ง€ ๋ฏธ๋ฆฌ ํ™•์ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์€ ์‡ผํ•‘๋ชฐ์—์„œ ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ–ˆ์„ ๋•Œ, ๋ฐœ์ƒํ•˜๋Š” MSA ๋‚ด์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๋ฅผ ๋„์‹ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋จผ์ € ์ฃผ๋ฌธ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ฅธ ๊ฒฐ์ œ๊ฐ€ ์ด๋ค„์ง€๋ฉด ๋ฐฐ์†ก ๊ธฐ๋ก์ด ๋‚จ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ๋ฌธ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ƒํ’ˆ๊ณผ, ๋ฐฐ์†ก ์ •๋ณด, ์‚ฌ์šฉ์ž ์ •๋ณด ๋“ฑ์—์„œ DB์˜ ํŠธ๋žœ์žญ์…˜์ด ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ์ž์™€ ๋ฐฐ์†ก ์ •๋ณด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค.

 

์ฃผ๋ฌธ์ด ๋ฐœ์ƒํ•˜๋ฉด Order API๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ๋ฐ›์€ DB๋Š” Commit ์ž‘์—…์„ ์œ„ํ•œ ์ค€๋น„๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ด์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” DB์˜ ์˜์† ์—ฌ๋ถ€๊ฐ€ ํ™•์ธ๋˜๋ฉด ์กฐ์ •์ž์—๊ฒŒ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๊ณ , ์œ„์™€ ๊ฐ™์ด Commit์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋ฐ˜๋Œ€๋กœ ๊ด€๋ จ๋œ DB ์ค‘ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ผ๋„ ํŠธ๋žœ์žญ์…˜์˜ ์ค€๋น„๊ฐ€ ์•ˆ๋œ ์ƒํƒœ๋ผ๋ฉด ๋ฐ”๋กœ Rollback์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์—ฐ๊ด€๋œ DB์™€ ๊ฐ™์ด ํŠธ๋žœ์žญ์…˜์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„๋Š” ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” DB์™€ ์—ฐ๊ด€๋œ DB๊ฐ€ ์ „์ฒด๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

์ด ์ˆœ์„œ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์กฐ์ •์ž๊ฐ€ ์—ฐ๊ด€๋œ DB๋กœ ์ „๋‹ฌํ•œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  2. ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋  ๊ฒฝ์šฐ commit์„ ์ง„ํ–‰ํ•œ๋‹ค.
  3. commit ๋‹จ๊ณ„์—์„œ ์กฐ์ •์ž๋Š” ์—ฐ๊ด€๋œ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ผ๋Š” ๋ช…๋ น ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.
  4. ๊ด€๋ จ DB๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜์†ํ™” ํ•œ๋‹ค.

 

 

Two-Phase Commit์˜ ๋‹จ์ 

Two-Phase Commit์˜ ์„ค๊ณ„๋ฅผ ๋ณด๋ฉด ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ํ˜•ํƒœ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ ์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ์—๋Š” NoSQL์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”๋ฐ, ๊ณต๊ต๋กญ๊ฒŒ๋„ NoSQL์—์„œ๋Š” ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ๊ผ ์‚ฌ์šฉํ•˜๋Š” DB๊ฐ€ ๋™์ผํ•œ ๋ฏธ๋“ค์›จ์–ด์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ DBMS polyglot ๊ตฌ์„ฑ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ DB ์ด์ค‘ํ™” ๊ตฌ์กฐ์™€ ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ API ์„œ๋ฒ„์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ DB๊ฐ€ ๋ถ„์‚ฐ๋˜์–ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ์–ด, MSA์™€ ๊ฐ™์ด API๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ณ , ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํŠน์ง•์„ ๊ฐ€์ง„ DB๋ฅผ ๋ถ„๋ฆฌํ•œ MSA์—์„œ๋Š” ๊ตฌํ˜„์ด ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ๋„ ์ด์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

2. Saga Pattern

์ฒ˜์Œ Saga ํŒจํ„ด์ด๋ผ๋Š” ๊ฑธ ๋“ค์—ˆ์„ ๋•Œ๋Š” Redux์˜ Saga๋ฅผ ๋– ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ Saga๋Š” ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, Saga๋Š”  ๋ถ„์‚ฐ ์ปดํ“จํŒ… ์•„ํ‚คํ…์ฒ˜์ธ Eventual Consistency๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‘” ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜์„ ์—ฐ์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜์˜ ๊ด€๋ฆฌ ์ฃผ์ฒด๊ฐ€ DB ์„œ๋ฒ„ ์ž์‹ ๋“ค์ด ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žˆ์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ถ„์‚ฐ๋˜์—ˆ์„ ๋•Œ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ•˜์œ„์— ์กด์žฌํ•˜๋Š” DB๋Š” ์ž์‹ ์˜ ํŠธ๋žœ์žญ์…˜๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

Two-Phase Commit๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณธ์ธ๋“ค์˜ ํŠธ๋žœ์žญ์…˜๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠธ๋žœ์žญ์…˜ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

 

Saga ํŒจํ„ด์—๋Š” ์•„๋ž˜์˜ 2๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Choreography-Based Saga
  2. Orchestration-Based Saga

Saga ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š๋ƒ ๊ทธ๋ ‡์ง€ ์•Š๋Š๋ƒ์˜ ์ฐจ์ด์ธ๋ฐ, ๋จผ์ € Choreography-Based Saga๋ถ€ํ„ฐ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1) Choreograpgy-Based Saga

 

Choreography-Based Saga ํŒจํ„ด์€ ์ž์‹ ์ด ๋ณด์œ ํ•œ ์„œ๋น„์Šค ๋‚ด DB๋งŒ์˜ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์–ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ , ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ณ„์† ํŠธ๋žœ์žญ์…˜์„ ์ด์–ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์— ๋„๋‹ฌํ•˜๋ฉด ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ DB์— ์˜์†ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

์ด๋ฒคํŠธ ๋ฐœํ–‰๊ณผ ๊ตฌ๋…์„ ์œ„ํ•ด RabbitMQ, Kafka์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ํ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋ฐฉ์‹ ํ˜น์€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Rollback์˜ ๊ฒฝ์šฐ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ค‘๊ฐ„์— ํŠธ๋žœ์žญ์…˜์ด ์‹คํŒจํ•˜๋ฉด ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ์ทจ์†Œ ์ฒ˜๋ฆฌ๋ฅผ ์‹คํŒจํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด์ƒ Event๋ฅผ ๋ฐœํ–‰ํ•˜์—ฌ Rollback ์ฒ˜๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์œ„ ๊ตฌ์„ฑ์ด ๋ชจ๋†€๋ฆฌํ‹ฑ์—์„œ ๋„˜์–ด์™”์„ ๋–„๋Š” ๊ฝค ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—… ๊ฐ™์ด ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ  MSA์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. RabbitMQ์˜ RPC๋‚˜ Publish-Subscribed ํŒจํ„ด๋งŒ ์ž˜ ์ด์šฉํ•ด๋ณธ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

2) Orchestration-Based Saga

Orchestration-Based Saga๋Š” ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณ„๋„๋กœ ์กด์žฌํ•˜๋ฉฐ ์ด๋ฅผ ์šฐ๋ฆฌ๋Š” Manager๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ค‘๊ณ„์ ์ธ ์—ญํ• ์„ ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์—์„œ์˜ ์š”์ฒญ์€ ํ•œ API์—์„œ ํ•œ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ธ์Šคํ„ด์Šค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋กœ๋„ ์›€์ง์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์ด ๋ฐ”๋กœ ๊ทธ๋Ÿฐ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Saga ์ธ์Šคํ„ด์Šค ๋งค๋‹ˆ์ €์— ์˜ํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ Manager์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ƒ ๋งˆ์ง€๋ง‰ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜๋ฉด Saga ์ธ์Šคํ„ด์Šค๋Š” ์ „์ฒด ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒํ•œ ๋’ค, ์ธ์Šคํ„ด์Šค๋Š” ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค. 

 

๋งŒ์•ฝ ์ค‘๊ฐ„์— ์‹คํŒจํ•˜๊ฒŒ ๋˜๋ฉด, Manager๊ฐ€ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ด€๋ฆฌ๋ฅผ ์ค‘์•™์˜ ๋งค๋‹ˆ์ €๊ฐ€ ๋ชจ๋‘ ์•Œ์•„์„œ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—  MSA์—์„œ๋„ ํŠธ๋žœ์žญ์…˜์„ ์ค‘์•™์—์„œ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์•ˆ์ •์ ์ด๊ณ  ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜๋ฉฐ ๋ชจ๋†€๋ฆฌํ‹ฑํ•œ ํ˜•ํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์ค‘๊ฐ„์— ๋งค๋‹ˆ์ €๋Š” ์ธ์Šคํ„ด์Šค ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธํ”„๋ผ ์—”์ง€๋‹ˆ์–ด๋ง ์ž…์žฅ์—์„œ๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ ์„œ๋น„์Šค ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“œ๋Š”๋ฐ, ์žˆ์–ด ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋ฏธ๋“ค์›จ์–ด ๋‚ด์ง€ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

Spring Framework์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ Orchestration-Based Saga๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ Axon Framework๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋ณ„๋„์˜ ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ MSA์˜ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. MSA์— ํ•œ ๋ฒˆ ์ฏค ๋„์ „ํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜์˜€์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ๋ฏธ๋“ค์›จ์–ด์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ๋“ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ตฌ์กฐ์ธ ๋งŒํผ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜์˜€์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

 

์ € ๋˜ํ•œ ์ตœ๊ทผ์— ์ง์žฅ์„ ๋‹ค๋‹ˆ๋ฉด์„œ Choreography-Based Saga ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด MSA ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Œ ๊ฐ™์•„์„œ๋Š” Saga ์ธ์Šคํ„ด์Šค ๋งค๋‹ˆ์ €๋ฅผ ๋ณ„๋„๋กœ ๋‘๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ์›ํ–ˆ์ง€๋งŒ ์•„์ง๊นŒ์ง€ Python ์ง„์˜์—์„œ ์ด๋ฅผ ํ•ด์†Œํ•  ๋งŒํ•œ ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ์ง€ ๋ชปํ–ˆ๊ฑฐ๋‚˜, ์†”๋ฃจ์…˜์ด ์—†๋”๋ผ๋„ ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ํ…๋ฐ, ๊ทธ๋Ÿด ๋Šฅ๋ ฅ๊นŒ์ง€ ๋ชป๋œ๋‹ค๋Š” ๊ฒƒ์ด ์•„์‰ฌ์šธ ๋ฟ์ด๋„ค์š”. ใ… ใ… 

 

์•„์ง๊นŒ์ง€๋Š” ๋ฉ”์‹œ์ง€ ํ์— ์˜์กดํ•˜์—ฌ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ„๋‹จํ•œ ํŠธ๋žœ์žญ์…˜ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ฐจ์ธฐ ๋„์ „ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๋ฉฐ ์ด ๊ธ€์„ ๋งˆ์น˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments