JiwonDev

MSA, Cloud Native App์€ ๋ฌด์—‡์ธ๊ฐ€

by JiwonDev

๐Ÿ’ญ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ์—ญ์‚ฌ

๊ฐœ์ธ์ด ๊ตฌ๋งค๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ์™€ ์šด์˜์ฒด์ œ๋ผ๋Š” ๊ฐœ๋…์€ 1970๋…„๋Œ€์ฏค ์ฒ˜์Œ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

  • 1960~1980 : ํ•˜๋“œ์›จ์–ด์˜ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜๋˜ ์‹œ๋Œ€์ž…๋‹ˆ๋‹ค. ํšŒ์‚ฌ๋งˆ๋‹ค 1๋Œ€์˜ ์ปดํ“จํ„ฐ๋กœ ๋ชจ๋“  ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 
  • 1990~2000 : ํšŒ์‚ฌ ์„œ๋ฒ„์‹ค์— ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ๋ฅผ ๋‘๊ณ  ๋ถ„์‚ฐ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • 2010~ : ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ €๋ ดํ•ด์ง€๋ฉฐ ์•ˆ์ •์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋งŽ์ด ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. 
    ์„œ๋ฒ„๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณ€ํ™”์— ๋Œ€์‘ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. (DevOps ์ง์ข…์˜ ๋“ฑ์žฅ)

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค๋Š” ๋‹น์—ฐํ•˜๊ณ , ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๊ฐ€ ์—†์–ด๋„ ํด๋ผ์šฐ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ณผ๊ฑฐ์—๋Š” ์ปดํ“จํ„ฐ์˜ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•ด์„œ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ธฐ ์–ด๋ ค์› ์ง€๋งŒ, ํ˜„๋Œ€์—๋Š” ๋น„๊ต์  ์›ํ•˜๋Š”๋ฐ๋กœ ๊ตฌ์„ฑ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ“Œ ์•ˆ์ •์ ์ด๊ณ  ์œ ์—ฐํ•˜๋‹ค๋Š”๊ฒŒ ๋ฌด์Šจ๋ง์ด์ฃ ?

Antifragile. ์ฆ‰ ๊ฐ‘์ž๊ธฐ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋”๋ผ๋„, ์žฅ์• ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑ์„ ๋ฐ”๊ฟ” ๋Œ€์ฒ˜๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

์•ˆ์ •์ ์ด๊ณ  ์œ ์—ฐํ•œ ๋Œ€๊ทœ๋ชจ ์„œ๋ฒ„๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 

1. Auto Scaling - ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ผ ์†์‰ฝ๊ฒŒ ์„œ๋ฒ„ ์ž์›์„ ๋Š˜๋ ธ๋‹ค ์ค„์˜€๋‹ค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Microservice - ํ•œ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹(๋ชจ๋†€๋ฆฌ์Šค)๊ฐ€ ์•„๋‹ˆ๋ผ, ๊ฐ๊ฐ์˜ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„๊ฐ€ ํ˜‘๋ ฅํ•ด์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋‚œ์ด๋„๋Š” ์˜ฌ๋ผ๊ฐ€์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค(Netflix, Amazon, ๋„ค์ด๋ฒ„ ๋ฐฐ๋ฏผ)์—์„œ ์žฅ์• ๊ฒฉ๋ฆฌ, ์œ ์—ฐ์„ฑ์„ ๊ฐ€์ง€๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.

3. Chaos engineering - ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์žฅ์• ๋‚˜ ๊ธ‰๊ฒฉํ•œ ๋ณ€ํ™”์—๋„ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

4. CI / CD (Continuous Integration, Deployments) - ์ˆ˜๋งŽ์€ ์„œ๋ฒ„, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ๊ธฐ๋Šฅ์„ ์•ˆ์ •์ ์ด๊ฒŒ ํ†ตํ•ฉํ•˜๊ณ , ์ง€์†์ ์ธ ๋ฐฐํฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์œ„์˜ ํŠน์ง•๋“ค์„ ๊ฐ€์ง„ ์•ฑ์„, Cloud Native Application์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

 

๐Ÿ“Œ ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™”?

์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋Š”๋ฐ๋Š” ๋งŽ์€ ์„ค์ •๊ณผ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

๋งค๋ฒˆ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ณ , ๋งŽ์€ ์„ค์ •๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์„œ '์„œ๋ฒ„๋ฅผ ๊ฒฉ๋ฆฌ์‹œํ‚ค๋Š”' ๊ฐ€์ƒํ™”๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ƒํ™”์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€, ํ•œ ์ปดํ“จํ„ฐ์— ๋…๋ฆฝ์ ์ธ ์šด์˜์ฒด์ œ๋ฅผ ์‹ค์ œ๋กœ ์„ค์น˜ํ•˜๊ณ  ๋„์šด๋‹ค๋Š” ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ๊ฐ€ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ถ€ํ•˜๊ฐ€ ์ƒ๋‹นํžˆ ์‹ฌํ•ด์ง€๊ณ , ๊ฐ€์ƒํ™”๋ฅผ ์‚ฌ์šฉํ–ˆ์Œ์—๋„ ์‹œ์Šคํ…œ ํ™•์žฅ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์—์„œ ํ•œ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ„๊ฒƒ์ด Docker ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™”์ž…๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ, ์‹ค์ œ๋กœ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋„์šฐ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ€์ƒ์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋˜‘๊ฐ™์€ ์„ค์ •๊ฐ’, ์ž์›์ด๋ผ๋ฉด [์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€] ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ค‘๋ณต ์„ค์น˜์—†์ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ํ•„์š”ํ•œ ํŒŒ์ผ์ด ์„ค์น˜๋˜์–ด์žˆ๋‹ค๋ฉด, ์ƒˆ๋กœ์šด O.S๋ฅผ ๋„์šฐ๋Š”๋ฐ 1๋ถ„๋„ ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 


๐Ÿ’ญ Cloud Native App์€ ๋งŒ๋Šฅ์ธ๊ฐ€

์•„๋‹™๋‹ˆ๋‹ค. Cloud Native App์„ ๊ฐœ๋ฐœํ•  ๋•Œ์—๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ณด๋‹ค ๋งŽ์€ ๊ฒƒ์„ ์ถ”๊ฐ€๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (12 Factors)

์ด๋ฅผ ๊ณต์‹๋งˆ๋ƒฅ ์™ธ์šธ ํ•„์š”๋Š” ์—†๊ณ , ๊ฐ๊ฐ์„ ์„ค๋ช…ํ•˜๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ํ•œ๋ฒˆ ๋ด๋‘๋ฉด ์ฑ… ์ฝ๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

  • Base Code ๊ด€๋ฆฌ - ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค์˜ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•˜๊ณ , ์ง€์†์ ์ธ ํ†ตํ•ฉ, ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Dependency Isolation - ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜์กด์„ฑ์ด ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. (์„œ๋น„์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ†ต์‹ )
  • Configurations - ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ ์™ธ๋ถ€์—์„œ ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Linkable Backing Service - ํ•ต์‹ฌ ๋กœ์ง๊ณผ ์„ธ๋ถ€ ๊ตฌํ˜„๊ธฐ์ˆ , ์ฆ‰ Backing Service๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐˆ์•„ ๋ผ์šธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Stage Of Creation - ๋นŒ๋“œ, ๋ฆด๋ฆฌ์ฆˆ, ์šด์˜๋ฒ„์ „์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ์ด์ „์œผ๋กœ ๋กค๋ฐฑ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Stateless Processes - ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” Statelessํ•˜๊ฒŒ ๋™์ž‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ƒํƒœ๋‚˜ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
  • Port Binding - ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” ์Šค์Šค๋กœ ์‹คํ–‰๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (์ฆ‰, ๊ฐ๊ฐ์˜ ์„œ๋ฒ„ Port๋ฅผ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.)
  • Concurrency - ๋™์‹œ์„ฑ ๋ฌธ์ œ์™€ ์„ฑ๋Šฅ์— ๋Œ€ํ•ด ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 
  • Disposabilty - ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ญ์ œ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (์ปจํ…Œ์ด๋„ˆ) ์œ ์—ฐํ•˜๊ฒŒ ๊ฐˆ์•„ ๋ผ์šธ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • Development & Production Parity - ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ์šด์˜ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•ด์„œ ์šด์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์„œ๋กœ ์˜ํ–ฅ์ด ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • Log - ์„œ๋น„์Šค์™€ ๋…๋ฆฝ์ ์ธ ๋กœ๊ทธ, ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์ด ์กด์žฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ๋ฉˆ์ถ”๋”๋ผ๋„ ๋กœ๊ทธ๋Š” ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • Admin Processes for Eventual Processes - ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋“ค์˜ ๋™์ž‘ ๊ณผ์ •์„ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์Šคํ”„๋ง์„ ๊ฐœ๋ฐœํ•˜๋Š” Pivotal์—์„  12 Factors ์— 3๊ฐ€์ง€๋ฅผ ์ถ”๊ฐ€ํ•œ 15 Factors๋ฅผ ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ฆฌ๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • API first - ๋‚ด๋ถ€ ์„œ๋น„์Šค๋ผ๊ณ  ํ•˜๋”๋ผ๋„, ์™ธ๋ถ€ ๊ณต๊ฐœ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ API์™€ ๋ฌธ์„œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜, ์„ค๊ณ„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • Telemetry - ๋ชจ๋“  ์žฅ์• ์™€ ์ˆ˜์น˜๋Š” ์‹œ๊ฐํ™” ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • Authentication and authorization - ๊ธฐ์—…์šฉ, ๋ชจ๋ฐ”์ผ, ๋‚ด๋ถ€์•ฑ์ด๋ผ๊ณ  ํ•œ๋“ค ๋ณด์•ˆ์„ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋ฃจ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

 

MSA ๋ฐฉ์‹์˜ Cloud Native App์€ ๋งŽ์€ ์žฅ์ ์„ ๊ฐ€์ง€์ง€๋งŒ, ๊ทธ๋งŒํผ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋” ๋งŽ์€ ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ •๋‹ต์€ ์—†์Šต๋‹ˆ๋‹ค. ํ•œ ํ”„๋กœ์ ํŠธ์— ๋ชจ๋“  ๊ฑธ ๋งŒ๋“œ๋Š” ๋ชจ๋†€๋ฆฌ์Šค(Monolith Architecture)๊ฐ€ ๋” ์ข‹์„ ๋•Œ๋„ ๋งŽ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ณณ์— 100% ์™„๋ฒฝํ•œ ์„ค๊ณ„๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ •ํ•˜๊ธฐ ๋‚˜๋ฆ„์ž…๋‹ˆ๋‹ค.

 

์ดํ•ด๋ฅผ ๋•๊ธฐ์œ„ํ•ด ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋น„๊ตํ•ด๋ณด์ž๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ณผ๊ฑฐ์—๋Š” ์™ผ์ชฝ ๋ชจ๋†€๋ฆฌ์Šค๊ฐ€ ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๋‹น์—ฐํ•œ ์•„ํ‚คํ…์ฒ˜์˜€์Šต๋‹ˆ๋‹ค. (* ์ฐธ๊ณ  WS == Web Service)

 

 

 

๐Ÿ“Œ ์‹ค์ œ ๋Œ€๊ธฐ์—…๋“ค์€ ์–ด๋–ค ์‹์œผ๋กœ ๋งŒ๋“œ๋‚˜์š”?

2018๋…„ ์กฐ์‚ฌ๊ธฐ๊ด€์—์„œ Netflix, Twitter, Amazon ์•„ํ‚คํ…์ฒ˜์˜ ๊ณตํ†ต์ ์ธ ํ๋ฆ„์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค API๋ฅผ ์ง์ ‘ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ , API Gateway(์„œ๋น„์Šค ๋ผ์šฐํ„ฐ)๋ฅผ ์‚ฌ์šฉํ•ด ๋‹จ์ผ ์ง„์ž…์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด ์š”์ฒญ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œํ‚ต๋‹ˆ๋‹ค. 
  3. ๊ฐ๊ฐ์˜ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฐ€์ƒํ™”๋˜์–ด์žˆ๊ณ , ์„œ๋ฒ„๊ฐ„ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์€ ๊ทธ ์„œ๋ฒ„์˜ API๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

  • ๋ณ„๋„์˜ CI/CD (์ง€์†์ ์ธ ํ†ตํ•ฉ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ)๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ด ํ๋ฆ„์„ ์ž๋™ํ™” ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋‹ˆํ„ฐ๋ง, ์ง„๋‹จ(์ˆ˜์น˜ํ™”) ์‹œ์Šคํ…œ์ด ๋ณ„๋„๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„ ๊ธฐ์ˆ , Backing Service๋Š” ํ•ต์‹ฌ ๋กœ์ง๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐˆ์•„๋ผ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ๊ฐ์˜ ์„œ๋ฒ„๋Š” ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์˜์กด์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰ ํ•„์š”ํ•œ ์„œ๋ฒ„๋งŒ ๊ณจ๋ผ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. (*2017๋…„ ๊ธฐ์ค€)

 

 


๐Ÿ’ญ MSA์— ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด๋“ค

๊ธฐ์กด์˜ ๋‹จ์ผ ํ”„๋กœ์ ํŠธ(Monolithic)์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•˜๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด DB์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

MSA (MicroService)๋Š” ๊ฐ ์„œ๋น„์Šค๊ฐ„์˜ ์˜์กด์„ฑ์ด ์—†์–ด์„œ ํŠธ๋žœ์žญ์…˜์„ ์‰ฝ๊ฒŒ ๊ฑธ ์ˆ˜ ์—†๋‹ค. ์–ต์ง€๋กœ ๊ฑธ์–ด๋„ rollback์ด ๊นŒ๋‹ค๋กญ๋‹ค.

์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์ธ DB๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ•„์š”ํ•˜๋‹ค๋ฉด ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์™€์•ผํ•œ๋‹ค.

์ฃผ๋ฌธ์„œ๋น„์Šค๊ฐ€, ์นดํ…Œ๊ณ ๋ฆฌ ์„œ๋น„์Šค DB๋ฅผ ๋„์ง‘์–ด ๋‚ผ ์ˆ˜ ์—†๋‹ค. / ๋งŒ์•ฝ ์ฃผ๋ฌธ์ด ์ทจ์†Œ๋˜์—ˆ์„ ๋•Œ ๋กค๋ฐฑ์€ ์–ด๋–ป๊ฒŒ..?

 

๐Ÿ“Œ ๋ฐฉ๋ฒ•1) Event Driven์„ ํ†ตํ•œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ

๊ฐ ์„œ๋น„์Šค๋Š” ์ด๋ฒคํŠธ ํ๋ฅผ ํ†ตํ•ด, ์ผ์ •์‹œ๊ฐ„๋งˆ๋‹ค ์ด๋ฒคํŠธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ณธ์ธ์ด ์ฒ˜๋ฆฌ๊ฐ€๋Šฅํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

๊ฐ ์„œ๋น„์Šค์—์„œ ํ•  ์ผ์„ ๋งˆ์น˜๊ณ , ์ด๋ฒคํŠธ ํ์— ๋ฉ”์‹œ์ง€(=์ด๋ฒคํŠธ)๋ฅผ ์ „์†กํ•œ๋‹ค.

  • ์ฃผ๋ฌธ์„ ํ–ˆ์„ ๋•Œ, ์ฃผ๋ฌธ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋„ฃ์€ [์ฃผ๋ฌธ ์ƒ์„ฑ๋จ ์ด๋ฒคํŠธ]๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค.
  • [์ฃผ๋ฌธ ์ƒ์„ฑ๋จ ์ด๋ฒคํŠธ]๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค๋“ค์€, ๋ฉ”์‹œ์ง€ ํ์—์„œ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ๊ฐ ์„œ๋น„์Šค์—์„œ ํ•  ์ผ์„ ๋งˆ์น˜๊ณ , ๋‹ค์Œ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋ฉด [๋‹ค๋ฅธ ์ด๋ฒคํŠธ]๋ฅผ ๋ฐœํ–‰์‹œ์ผœ์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ Commit Transcation์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ [์™„๋ฃŒ๋จ ์„œ๋น„์Šค]๋ฅผ ๋ฐœํ–‰ํ•˜๋ฉด, ์ด๋ฅผ ํ™•์ธํ•œ ์ฃผ๋ฌธ์„œ๋น„์Šค๊ฐ€ [์ฃผ๋ฌธ ์™„๋ฃŒ]๋กœ ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ” ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๋งŒ์•ฝ ํ•œ ์„œ๋น„์Šค์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ์‹คํŒจํ–ˆ๋‹ค๋ฉด, ๋˜‘๊ฐ™์ด [์‹คํŒจ ์ด๋ฒคํŠธ]๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.
์ •ํ™•ํžˆ ๋งํ•ด ๋กค๋ฐฑ์ด๋ผ๊ธฐ๋ณด๋‹จ, ์ผ๋‹จ ์‹คํ–‰ํ•œ ๋’ค ์‹คํŒจํ•˜๋ฉด ์ „์ฒด ์„œ๋น„์Šค์— ๋ณด์ƒํŠธ๋žœ์žญ์…˜์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•.

[์ฃผ๋ฌธ ๋Œ€๊ธฐ]์ค‘์ธ Order ์„œ๋น„์Šค๋Š”, [์ทจ์†Œ ์ด๋ฒคํŠธ]๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ์„œ๋น„์Šค ์‘๋‹ต์—†์Œ ๊ฐ™์ด ํŠน์ • ์ƒํƒœ ๊ฐ’์— ๋”ฐ๋ผ ์ฃผ๋ฌธ์„ ์ทจ์†Œํ•œ๋‹ค.

 

 

 

๐Ÿ“Œ ๋ฐฉ๋ฒ•2) Event Sourcing

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

 

๋ฌผ๋ก  ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ์— ๋น„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๋‹ค.

  • ๐Ÿงจ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์ด๋ฒคํŠธ ๊ธฐ๋ก์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠธ๋žœ์žญ์…˜์„ ๋ณต์›ํ•  ๋•Œ, ๊ฐ ์ด๋ฒคํŠธ๋ฅผ ์ „๋ถ€ ๋กค๋ฐฑํ•ด์•ผํ•œ๋‹ค.
    -> ์ด๋Š” ์Šค๋ƒ…์ƒท์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ผ์ •๋ถ€๋ถ„๊นŒ์ง€๋งŒ ๊ธฐ๋กํ•˜๋ฉด ์–ด๋Š์ •๋„ ํ•ด๊ฒฐ๋œ๋‹ค.
  • ๐Ÿงจ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”๊ฑด ๊ดœ์ฐฎ์ง€๋งŒ, ์ˆ˜์‹ญ๋งŒ ๊ฑด์ด ๋ฐœ์ƒํ•˜๋Š” ์กฐํšŒ์„ฑ ๋ฐ์ดํ„ฐ์—๋Š” ๋‹ต์ด ์—†์Œ. ์ด๋ฒคํŠธ ๊ธฐ๋ก์ด ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง
    -> CQRS๋กœ ํ•ด๊ฒฐ๊ฐ€๋Šฅ. ์กฐํšŒ์™€ ์“ฐ๊ธฐ๋ฅผ ๋‚˜๋ˆ ์„œ ์‚ฌ์šฉํ•˜์ž

๋ฌผ๋ก  ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋ฉด ์ž ๊น๋™์•ˆ ์ •ํ•ฉ์„ฑ์ด ๊นจ์ง€์ง€๋งŒ, ์ด๋ฒคํŠธ ์†Œ์‹ฑ์ด๋ผ ์ตœ์ข…์ (Eventually)์œผ๋กœ๋Š” ์ •ํ•ฉ์„ฑ์ด ๋งž์•„์ง‘๋‹ˆ๋‹ค. 
์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

 

  • ๐Ÿงจ์ด๋ฒคํŠธ๋Š” ์˜๊ตฌ์ €์žฅ๋˜๋ฏ€๋กœ, ๊ธฐ์กด์˜ ์ž…๋ ฅ ํ˜•์‹์„ ๋ฐ”๊พธ๊ธฐ๊ฐ€ ์–ด๋ ค์›€.
    -> ๊ฐ ์ด๋ฒคํŠธ์— ๋ฒ„์ „ ๊ฐ’์„ ๋‘๊ณ , ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ๊ด€๋ฆฌํ•˜๋ฉด ์–ด๋Š์ •๋„ ํ•ด๊ฒฐ๊ฐ€๋Šฅ.
  • ๐Ÿงจ ๊ธฐ์กด ํŠธ๋žœ์žญ์…˜ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ฐ„๋‹จํ•œ๋ฐ, MSA + ์ด๋ฒคํŠธ์†Œ์‹ฑ ๋ฐฐ์›Œ์„œ ํ•˜๋ ค๊ณ ํ•˜๋‹ˆ ๋„ˆ๋ฌด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณต์žกํ•ด์ง-> ์ด๊ฑด.. ๋‹จ์ ์ด ๋งž๋‹ค. ํ•™์Šต์— ๋Œ€ํ•œ ๋Ÿฌ๋‹์ปค๋ธŒ๋„ ๋†’์€ ํŽธ.

 

์œ„ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ 1๊ฐœ ์ผ ๋•Œ CQRS + Kafka๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€์ถฉ ์•„๋ž˜์™€ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

์ž ๊น๋™์•ˆ ์ •ํ•ฉ์„ฑ์ด ๊นจ์ง€๊ธด ํ•œ๋‹ค. (Command์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด -> ์ด๋ฒคํŠธ ์ €์žฅ๋จ -> Query์—์„œ ์ฝ์–ด์˜ด)

 

 

๐Ÿ“Œ Saga Pattern

์œ„ ์ด๋ฒคํŠธ ์†Œ์‹ฑ์—์„œ ํŠน์ • ์„œ๋ฒ„๊ฐ€ ์ฃฝ์—ˆ๋‹ค๊ฑฐ๋‚˜, ์ฒ˜๋ฆฌ์— ์‹คํŒจํ•œ ๊ฒฝ์šฐ ๋กค๋ฐฑ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ์œ„ํ•ด Saga Pattern์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

'Saga'๋ผ๋Š” ๋‹จ์–ด๋Š” ์˜์–ด๋กœ ์–ด๋–ค ์˜์›…์˜ ๊ธด ๋ชจํ—˜๋‹ด์„ ์˜๋ฏธํ•œ๋‹ค.
Saga Pattern์€ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•์„ ์ด์šฉํ•ด ์ „์ฒด ํŠธ๋žœ์žญ์…˜์—†์ด, ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฌผ๋ก  ๋‘ ์„œ๋น„์Šค๋ฅผ ํ•œ ํŠธ๋žœ์žญ์…˜์ฒ˜๋Ÿผ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•(2PC, 2 Phase Commit)๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์„ฑ๋Šฅ์ด ๋งค์šฐ ๊ตฌ๋ ค์ง„๋‹ค.

๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” '๋ณธ์ธ์˜ ํŠธ๋žœ์žญ์…˜'๋งŒ ๊ด€๋ฆฌํ•œ๋‹ค. ์ดํ›„ ์„ฑ๊ณต/์‹คํŒจ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋งŒ ์ด๋ฒคํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
์ด๋Ÿฐ์‹์œผ๋กœ ์„ฑ๊ณต/์‹คํŒจ ํ๋ฆ„์„ ๋งŒ๋“ค์–ด, ์‹คํŒจํ•œ๋‹ค๋ฉด [๋ณด์ƒ ํŠธ๋žœ์žญ์…˜] ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋งž์ถ˜๋‹ค.

 

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Saga ํŒจํ„ด์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

Choreography-based Saga (์•ˆ๋ฌด ์ค‘์‹ฌ์˜ ์‚ฌ๊ฐ€ํŒจํ„ด)

*Choreography๋Š” ์•ˆ๋ฌด, ๋ฌด๋„, ๋ชธ๋™์ž‘ ์ด๋Ÿฐ ์˜๋ฏธ

์ „์ฒด๋ฅผ ์ง€ํœ˜ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์—†๊ณ , ์„œ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ์†Œํ†ตํ•ฉ๋‹ˆ๋‹ค. (= ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ค‘์‹ฌ์ด ๋จ)

์ฝ”๋ ˆ์˜ค๊ทธ๋ž˜ํ”ผ ์‚ฌ๊ฐ€ ํŒจํ„ด ์‹œ๋‚˜๋ฆฌ์˜ค
์„œ๋น„์Šค ๋ชฉ๋ก : (์ฃผ๋ฌธ) (๊ณ ๊ฐ) (์˜ํ™”๊ด€) (ํšŒ๊ณ„)
1. ์ฃผ๋ฌธ ์„œ๋น„์Šค๊ฐ€ [Pending] ์ƒํƒœ๊ฐ€ ๋˜๊ณ , [๐Ÿ’จ์ฃผ๋ฌธ ์ƒ์„ฑ ์ด๋ฒคํŠธ]๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ณ ๊ฐ ์„œ๋น„์Šค๊ฐ€ [๐Ÿ’จ์ฃผ๋ฌธ ์ƒ์„ฑ ์ด๋ฒคํŠธ]๋ฅผ ์ˆ˜์‹ , ์†Œ๋น„์ž ๊ฒ€์ฆ ํ›„  [โœ” ์†Œ๋น„์ž ํ™•์ธ ์ด๋ฒคํŠธ]๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.
2. ํšŒ๊ณ„ ์„œ๋น„์Šค๊ฐ€ [๐Ÿ’จ์ฃผ๋ฌธ ์ƒ์„ฑ ์ด๋ฒคํŠธ]๋ฅผ ์ˆ˜์‹ , ์‹ ์šฉ์นด๋“œ ์Šน์ธ์„ [Pending]์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
2. ์˜ํ™”๊ด€ ์„œ๋น„์Šค๊ฐ€ [๐Ÿ’จ์ฃผ๋ฌธ ์ƒ์„ฑ ์ด๋ฒคํŠธ]๋ฅผ ์ˆ˜์‹ , ์ฃผ๋ฌธ ๋‚ด์—ญ์„ ํ™•์ธํ•˜๊ณ  ํ‹ฐ์ผ“์„ [Create_Peding]์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
   ๊ทธ๋ฆฌ๊ณ  [โœ” ํ‹ฐ์ผ“ ์ƒ์„ฑ๋จ] ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3. ํšŒ๊ณ„ ์„œ๋น„์Šค๊ฐ€ [โœ” ํ‹ฐ์ผ“ ์ƒ์„ฑ๋จ] ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ , ์‹ ์šฉ์นด๋“œ๋ฅผ ๊ณผ๊ธˆํ•˜๊ณ  [๐Ÿ“ง์‹ ์šฉ์นด๋“œ ์Šน์ธ๋จ] ์„ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.
3. ์˜ํ™”๊ด€ ์„œ๋น„์Šค๊ฐ€ [๐Ÿ“ง ์‹ ์šฉ์นด๋“œ ์Šน์ธ๋จ] ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ , ํ‹ฐ์ผ“ ์ƒํƒœ๋ฅผ [Awaiting_Accept]๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
3. ์ฃผ๋ฌธ ์„œ๋น„์Šค๊ฐ€ [๐Ÿ“ง ์‹ ์šฉ์นด๋“œ ์Šน์ธ๋จ] ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ , ์ฃผ๋ฌธ ์ƒํƒœ๋ฅผ [Approve]๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  [์ฃผ๋ฌธ ์Šน์ธ๋จ] ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

4. ์ดํ›„ [์ฃผ๋ฌธ ์Šน์ธ๋จ] ์„ ๊ตฌ๋…ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์ด๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ค‘๊ฐ„์— ์‹คํŒจํ•˜๋ฉด, [์ฃผ๋ฌธ ์‹คํŒจ ์ด๋ฒคํŠธ] ๊ฐ™์€ ๊ฑธ ๋ฐœํ–‰์‹œ์ผœ ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๊ฐ€ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Orchestration-based Saga (์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜, ์ง€ํœ˜ ์ค‘์‹ฌ์˜ ์‚ฌ๊ฐ€ํŒจํ„ด)

์ „์ฒด๋ฅผ ์ง€ํœ˜ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. (= ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ์ค‘์‹ฌ์ด๋จ)

์„œ๋น„์Šค ๋ชฉ๋ก : (์ฃผ๋ฌธ) (๊ณ ๊ฐ) (์˜ํ™”๊ด€) (ํšŒ๊ณ„)
์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋‹ด๋‹น : ์ฃผ๋ฌธ ์„œ๋น„์Šค

1. ์ฃผ๋ฌธ ์„œ๋น„์Šค๋Š” ๐Ÿ—Saga ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•ด ๊ฐ ์„œ๋น„์Šค์™€ ๋น„๋™๊ธฐ๋กœ ์‘๋‹ต์„ ํ•ฉ๋‹ˆ๋‹ค.
2. ๐Ÿ—Saga ๋Š” [์†Œ๋น„์ž ํ™•์ธ ์ปค๋งจ๋“œ]๋ฅผ ์†Œ๋น„์ž ์„œ๋น„์Šค์—๊ฒŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
3. ์†Œ๋น„์ž ์„œ๋น„์Šค๋Š” ์†Œ๋น„์ž๋ฅผ ํ™•์ธํ•˜๊ณ , [์†Œ๋น„์ž ํ™•์ธ ๋ฉ”์‹œ์ง€]๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

2. ๐Ÿ—Saga ๋Š” [ํ‹ฐ์ผ“ ์ƒ์„ฑ ์ปค๋งจ๋“œ]๋ฅผ ์˜ํ™”๊ด€ ์„œ๋น„์Šค์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
3. ์˜ํ™”๊ด€ ์„œ๋น„์Šค๋Š” ํ‹ฐ์ผ“์„ ์ƒ์„ฑํ•˜๊ณ , [ํ‹ฐ์ผ“ ์ƒ์„ฑ ๋ฉ”์‹œ์ง€]๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

2. ๐Ÿ—Saga ๋Š” [์‹ ์šฉ์นด๋“œ ์Šน์ธ ์ปค๋งจ๋“œ]๋ฅผ ํšŒ๊ณ„ ์„œ๋น„์Šค์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
3. ํšŒ๊ณ„ ์„œ๋น„์Šค๋Š” ์‹ ์šฉ์นด๋“œ ๊ฒฐ์ œ ํ›„, [์‹ ์šฉ์นด๋“œ ์Šน์ธ๋จ ๋ฉ”์‹œ์ง€]๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

4. ๐Ÿ—Saga ๋Š” [ํ‹ฐ์ผ“ ์Šน์ธ ์ปค๋งจ๋“œ]๋ฅผ ์˜ํ™”๊ด€ ์„œ๋น„์Šค์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
4. ๐Ÿ—Saga ๋Š” [์ฃผ๋ฌธ ์Šน์ธ ์ปค๋งจ๋“œ]๋ฅผ ์ฃผ๋ฌธ ์„œ๋น„์Šค์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์ฝ”๋ ˆ์˜ค๊ทธ๋ž˜ํ”ผ Saga vs ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ Saga


์ฝ”๋ ˆ์˜ค ๊ทธ๋ž˜ํ”ผ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…/๋ฐœํ–‰ํ•  ๋ฟ, ์„œ๋กœ๋ฅผ ์•Œ์ง€ ๋ชปํ•œ๋‹ค.

  • ๊ฐ ์„œ๋น„์Šค์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ , ์ „์ฒด ์„œ๋น„์Šค๊ฐ„์˜ ๊ฒฐํ•ฉ์ด ๋Š์Šจํ•ด์ง„๋‹ค.
  • ์„œ๋น„์Šค๊ฐ„ ์˜์กด๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์„œ ์ „์ฒด ํ๋ฆ„์„ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ์–ด๋ ต๋‹ค. ์ฆ‰ ์ดํ•ด๊ฐ€ ์–ด๋ ต๋‹ค.
    ์—ฌ๋Ÿฌ ์ž‘์—…์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜์žˆ๋‹ค. Pending -> Ready -> Approval Ready -> Approved๋“ฑ
  • ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ณ , ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋…ํ•ด์•ผํ•œ๋‹ค. (ex ํšŒ๊ณ„์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ์ „์ฒด์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š”๋‹ค. ๊ฒฐํ•ฉ๋„ ๋†’์Œ)

 

์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ ์ค‘์‹ฌ ์ง€ํœ˜๋ฅผ ๋งž๋Š” ์„œ๋น„์Šค๊ฐ€ ๋ณ„๋„๋กœ ์กด์žฌํ•œ๋‹ค.

  • ์ค‘์‹ฌ ์„œ๋น„์Šค๊ฐ€ ์žˆ์–ด์„œ, ๊ฐ ์„œ๋น„์Šค๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ๊น”๋”ํ•ด์ง„๋‹ค.
  • ์ค‘์‹ฌ ์„œ๋น„์Šค๊ฐ€ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ๊ฐ ์„œ๋น„์Šค๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๋‹ค.
  • ์ „์ฒด ์ด๋ฒคํŠธ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ƒฅ ์ค‘์‹ฌ์„œ๋น„์Šค๊ฐ€ ๋ณด๋‚ด๋Š” ๊ฑธ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.
  • ์ค‘์‹ฌ ์„œ๋น„์Šค๊ฐ€ ์žˆ์–ด์„œ ์ค‘๊ฐ„ ์ƒํƒœ(Pending -> Ready -> Approvel)๊ฐ€ ๋”ฑํžˆ ํ•„์š”์—†๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋‹จ์ˆœํ•ด์ง„๋‹ค.
    Pending์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ , ์ฒ˜๋ฆฌ์™„๋ฃŒ๋˜๋ฉด Approved ๋กœ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค. ์ค‘๊ฐ„์— Ready ๊ฐ™์€ ๊ฑธ ๋ผ์›Œ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค. 

๊ทธ๋ž˜์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€์ถฉ ๋งŒ๋“ค๊ฒฝ์šฐ, ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค์— ๋ชจ๋“  ๋กœ์ง์ด ๋“ค์–ด์žˆ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊นกํ†ต ์„œ๋น„์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ Saga๋ฅผ ์–ต์ง€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑฐ๋ณด๋‹ค, ์ฐจ๋ผ๋ฆฌ ๋ชจ๋†€๋ฆฌ์Šค ๋ฐฉ์‹์˜ ๋‹จ์ผ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค๋Š” ๊ฐ€๊ธ‰์  ์ „์ฒด ์ž‘์—…์˜ ์ˆœ์„œํ™”๋งŒ ๋‹ด๋‹นํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค.

 


 

๐Ÿ“” ๋ ˆํผ๋Ÿฐ์Šค

์ธํ”„๋Ÿฐ - Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA)

https://www.gartner.com/en/blog

https://tech.kakao.com/2021/09/14/msa/

https://developer.ibm.com/articles/15-factor-applications/

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ