Skip to content

Latest commit

ย 

History

History
125 lines (63 loc) ยท 4.57 KB

Event_Sourcing_CQRS_Saga_Pattern.md

File metadata and controls

125 lines (63 loc) ยท 4.57 KB

Event Sourcing + CQRS + Saga Pattern - ์ฐ๋จน


Event Driven Architecture

  • ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ์•„ํ‚คํ…์ฒ˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ์ด๋ฒคํŠธ์˜ ์ƒ์„ฑ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ํŒจํ„ด.

  • ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ฐ˜์‘ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘.

  • ์„œ๋น„์Šค ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด ํ™•์žฅ์„ฑ, ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•œ ๋†’์€ ์„ฑ๋Šฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.


๋ชจ๋†€๋ฆฌํ‹ฑ

  • ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ,
    • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ACID(์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๊ณ ๋ฆฝ์„ฑ, ์ง€์†์„ฑ) ์›์น™์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”.



๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค

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



Commit Transaction & Rollback Transaction


  • Commit Transaction์€ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•Œ๋ฆฌ๋Š” ๊ฒƒ.
    • ์ด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ •ํ•˜๊ณ  ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ.

  • Rollback Transaction์€ ํŠธ๋žœ์žญ์…˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ๋ชจ๋“  ์ž‘์—…์„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ.
    • ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์‹คํŒจํ•œ ์ž‘์—…์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž˜๋ชป๋œ ์ƒํƒœ๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€.






Event Sourcing

  • ์ด๋ฒคํŠธ ์†Œ์‹ฑ์€ ๋ฐ์ดํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ์— ๋ฐœ์ƒํ•œ ๋ชจ๋“  ๋ณ€ํ™”๋ฅผ ์ˆœ์ฐจ์ ์ธ ์ด๋ฒคํŠธ๋กœ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•.

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ด์ง€๊ณ , ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ์–ด๋–ค ์‹œ์ ์œผ๋กœ๋„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋˜ํ•œ, ์ด๋ฒคํŠธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์— ์ถ”๊ฐ€๋˜๋ฏ€๋กœ, ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋ฐœ์ƒํ•ด๋„ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๊ทธ๋Ÿฌ๋‚˜ ์ „์ฒด ์ด๋ฒคํŠธ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ํฐ ๊ทœ๋ชจ์˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”.




CQRS(Command and Query Responsibility Segregation)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด.

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” Command์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” Query์˜ ๋‘ ๊ฐ€์ง€ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ.

  • Command๋Š” ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํฌํ•จ.

  • Query๋Š” ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ.








Saga Pattern

  • ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๊ฐ€ ๊ฐ๊ฐ์˜ ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

  • ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์Šคํƒ€์ผ, Choreography์™€ Orchestration์œผ๋กœ ๊ตฌ๋ถ„.

  • Choreography ์Šคํƒ€์ผ์—์„œ๋Š” ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ฐ˜์‘ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘.

  • โœจ Orchestration ์Šคํƒ€์ผ์—์„œ๋Š” ํŠน์ • ์„œ๋น„์Šค(orchestrator)๊ฐ€ ํŠธ๋žœ์žญ์…˜์˜ ์ „์ฒด ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค์„ ์กฐ์ •.

  • Saga ํŒจํ„ด์˜ ์ค‘์š”ํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ์—ฐ์†์ ์ธ ํŠธ๋žœ์žญ์…˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ, ์ด๋ฏธ ์™„๋ฃŒ๋œ ํŠธ๋žœ์žญ์…˜์„ ์ทจ์†Œ(rollback) ํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ.

    • ๋ฐ์ดํ„ฐ์˜ ์›์ž์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€.





Choreography-based saga

  1. ์ฃผ๋ฌธ ์„œ๋น„์Šค์—์„œ ์ฃผ๋ฌธ ์š”์ฒญ(Post)์„ ์ˆ˜์‹ ํ•˜๊ณ  PENDING ์ƒํƒœ์˜ ์ฃผ๋ฌธ ์ƒ์„ฑ
  2. ์ฃผ๋ฌธ ์ƒ์„ฑ ์ด๋ฒคํŠธ ์ „๋‹ฌ
  3. ๊ณ ๊ฐ ์„œ๋น„์Šค์˜ Event handler๊ฐ€ Credit ์˜ˆ์•ฝ ์‹œ๋„
  4. ๊ฒฐ๊ณผ ์ด๋ฒคํŠธ ์ „๋‹ฌ
  5. ์ฃผ๋ฌธ ์„œ๋น„์Šค์˜ Event handler๋ฅผ ํ†ตํ•ด ์ฃผ๋ฌธ ์Šน์ธ or ๊ฑฐ๋ถ€