Design E-Wallet

์š”๊ตฌ์‚ฌํ•ญ

  • ์ด์ฒด ๊ธฐ๋Šฅ ์ง€์›(๋‹ค๋ฅธ ๊ธฐ๋Šฅ์€ ์—†๋‹ค๊ณ  ๊ฐ€์ •)

  • ์ดˆ๋‹น ํŠธ๋žœ์žญ์…˜ ์ˆ˜(TPS): 1,000,000

  • ์žฌํ˜„์„ฑ์„ ๊ฐ–์ถ˜ ์‹œ์Šคํ…œ

  • ๊ฐ€์šฉ์„ฑ 99.99%

1,000,000 ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰: 1,000 TPS์œผ๋กœ ๊ฐ€์ •

  • 1,000,000 * 2(์ž…๊ธˆ + ์ถœ๊ธˆ) / 1,000 = 2,000 ๋…ธ๋“œ

API ๋‹จ์œ„ ๊ธฐ๋Šฅ ์ •์˜

POST /wallet/transfer

์ด์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” API, ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • from_account_id: ์ถœ๊ธˆ ๊ณ„์ขŒ ID

  • to_account_id: ์ž…๊ธˆ ๊ณ„์ขŒ ID

  • amount: ์ด์ฒด ๊ธˆ์•ก

  • currency: ํ†ตํ™” ๋‹จ์œ„

  • transaction_id: ํŠธ๋žœ์žญ์…˜ ID(์ค‘๋ณต ๋ฐฉ์ง€์šฉ)

์ธ๋ฉ”๋ชจ๋ฆฌ ์ƒค๋”ฉ๊ณผ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜

์ด์ฒด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ์ธ๋ฉ”๋ชจ๋ฆฌ ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ขŒ ์ •๋ณด๋ฅผ ๋ถ„์‚ฐ ์ €์žฅํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ , ๋น ๋ฅธ ์กฐํšŒ ๋ฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋ ˆ๋””์Šค์™€ ๊ฐ™์€ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ขŒ ์ •๋ณด๋ฅผ ์ €์žฅ(<์‚ฌ์šฉ์ž, ์ž”์•ก> ํ˜•ํƒœ)

  • 1,000,000 TPS๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด, ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ท ๋“ฑํ•˜๊ฒŒ ์ƒค๋”ฉ

์ด ๋•Œ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ขŒ ์ •๋ณด๊ฐ€ ๋‹ค๋ฅธ ์ƒค๋“œ์— ์ €์žฅ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด์ฒด ์‹œ ๋‘ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ์›์ž์  ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

2PC(2-Phase Commit)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด์— ์˜์กดํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๋‘ ๋‹จ๊ณ„๋กœ ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•œ๋‹ค.

  1. ๋ฝ ํš๋“ ๋‹จ๊ณ„: ๋ชจ๋“  ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ์— ํŠธ๋žœ์žญ์…˜์„ ์ค€๋น„ ์ƒํƒœ๋กœ ์„ค์ •ํ•˜๊ณ , ๋ฝ์„ ํš๋“

  2. ์ค€๋น„ ๋‹จ๊ณ„: ๋ฝ์„ ํš๋“ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ๋“ค์ด ์ปค๋ฐ‹์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ

  3. ์ปค๋ฐ‹ ๋‹จ๊ณ„: ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ค€๋น„ ์ƒํƒœ๋ผ๋ฉด ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋กค๋ฐฑ

์ด ๋ฐฉ๋ฒ•์€ ์•ˆ์ „ํ•˜๊ฒŒ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

  • ์„ฑ๋Šฅ ์ €ํ•˜: ๋ฝ์„ ํš๋“ํ•˜๊ณ  ์ปค๋ฐ‹์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ • ์ž์ฒด์—์„œ ๋ฝ ์ ์œ  ์‹œ๊ฐ„์ด ๊ธธ์–ด์ ธ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋จ

  • SPoF: ๋ฝ์„ ํš๋“ํ•˜๊ณ  ์ปค๋ฐ‹์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์กฐ์ •์ž์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ๋ฝ์ด ํš๋“ํ•œ ์ƒํƒœ๋กœ ๊ณ„์† ์œ ์ง€๋จ

TCC(try-confirm-cancel)

TCC๋Š” ์‹œ๋„ -> ํ™•์ • / ์ทจ์†Œ๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋‹ค.

  1. ์กฐ์ •์ž๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํŠธ๋žœ์žญ์…˜์— ํ•„์š”ํ•œ ์ž์› ์˜ˆ์•ฝ ์š”์ฒญ(=Try)

  2. ์กฐ์ •์ž๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ํšŒ์‹ ์„ ๋ฐ›์Œ

    • ๋ชจ๋‘ ์„ฑ๊ณต ํšŒ์‹ : ํ™•์ • ์š”์ฒญ(=Confirm)

    • ํ•˜๋‚˜ ์ด์ƒ์˜ ์‹คํŒจ ํšŒ์‹ : ์ทจ์†Œ ์š”์ฒญ(=Cancel)

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

  • ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์ด๋‚˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„ ์‹คํŒจ ์‹œ ๋ณต๊ตฌ ๋กœ์ง์ด ๋ณต์žกํ•ด์ง

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๊ฐ ๋‹จ๊ณ„(Try, Confirm, Cancel)์— ๋Œ€ํ•œ ๋ณ„๋„ ๊ตฌํ˜„์ด ํ•„์š”ํ•ด ๊ฐœ๋ฐœ ๋ถ€๋‹ด์ด ์ฆ๊ฐ€

Saga ํŒจํ„ด

Saga ํŒจํ„ด์€ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์œผ๋กœ, MSA ํ™˜๊ฒฝ์—์„œ๋Š” ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ์žก๊ณ  ์žˆ๋‹ค.

  1. ๋ชจ๋“  ์—ฐ์‚ฐ์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด, ๊ฐ ์—ฐ์‚ฐ์€ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋…๋ฆฝ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์‹คํ–‰

  2. ์—ฐ์‚ฐ์€ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๊ณ , ๊ฐ ์—ฐ์‚ฐ์ด ์„ฑ๊ณตํ•˜๋ฉด ๋‹ค์Œ ์—ฐ์‚ฐ์ด ์‹คํ–‰

  3. ๋งŒ์•ฝ ์—ฐ์‚ฐ์ด ์‹คํŒจํ•˜๋ฉด, ์ด์ „ ์—ฐ์‚ฐ๋“ค์„ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด ์—ญ์ˆœ์œผ๋กœ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•ด ๋กค๋ฐฑ

์—ฌ๊ธฐ์„œ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ์กฐ์œจ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

Choreography
Orchestration

์„ค๋ช…

๊ฐ ์„œ๋น„์Šค๊ฐ€ ์ž์‹ ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ด๋ฒคํŠธ๋กœ ๋ฐœํ–‰ํ•˜๊ณ , ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜์—ฌ ์ฒ˜๋ฆฌ

์ค‘์•™ ์กฐ์ •์ž๊ฐ€ ๋ชจ๋“  ์—ฐ์‚ฐ์„ ์กฐ์œจํ•˜๊ณ , ๊ฐ ์„œ๋น„์Šค์— ๋ช…๋ น์„ ์ „๋‹ฌ

์žฅ์ 

์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„ ์œ ์—ฐ์„ฑ ์ฆ๊ฐ€, ์„œ๋น„์Šค ํ™•์žฅ ์šฉ์ด

์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ๋กœ ๋ณต์žกํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ ์šฉ์ด

๋‹จ์ 

์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์–ด ๋ณต์žก์„ฑ ์ฆ๊ฐ€

์ค‘์•™ ์กฐ์ •์ž๊ฐ€ SPoF๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ

์ด๋ฒคํŠธ ์†Œ์‹ฑ

์ „์ž ์ง€๊ฐ‘ ์„œ๋น„์Šค์™€ ๊ฐ™์ด ๊ธˆ์œต ๊ฑฐ๋ž˜๋ฅผ ๋‹ค๋ฃจ๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ์žฌํ˜„์„ฑ(reproducibility)๊ณผ ๊ฐ์‚ฌ(audit) ๊ฐ€๋Šฅ์„ฑ์ด ํ•„์ˆ˜์ ์ด๋‹ค.

  • ํŠน์ • ์‹œ์ ์˜ ๊ณ„์ • ์ž”์•ก

  • ๊ณผ๊ฑฐ ๋ฐ ํ˜„์žฌ ๊ณ„์ • ์ž”์•ก์ด ์ •ํ™•์„ฑ

์ด๋Ÿฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋ ค๋ฉด, ๋‹จ์ˆœํžˆ ํ˜„์žฌ ์ƒํƒœ๋งŒ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋ฉฐ, ๋ชจ๋“  ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ํ•„์š” ์‹œ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ ์†Œ์‹ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒคํŠธ ์†Œ์‹ฑ ๊ฐœ๋…

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

  • Command(๋ช…๋ น)

    • ์™ธ๋ถ€์—์„œ ์ „๋‹ฌ๋œ ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•œ ์š”์ฒญ

    • ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋ฏ€๋กœ FIFO์— ์ €์žฅ

  • Event(์ด๋ฒคํŠธ)

    • ๋ช…๋ น์— ์˜ํ•ด ๋ฐœ์ƒํ•œ ์ƒํƒœ ๋ณ€ํ™”์˜ ๊ธฐ๋ก

    • ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

    • ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋ฏ€๋กœ FIFO์— ์ €์žฅ

  • State(์ƒํƒœ)

    • ์ด๋ฒคํŠธ๋ฅผ ์žฌ์ƒํ•˜์—ฌ ๋„์ถœํ•œ ํ˜„์žฌ ์ƒํƒœ

    • ํŠน์ • ์‹œ์ ์œผ๋กœ์˜ ๋ณต์›์ด ๊ฐ€๋Šฅ

  • State Machine(์ƒํƒœ ๊ธฐ๊ณ„)

    • ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋™

    • ๋ช…๋ น์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ด๋ฒคํŠธ ์ƒ์„ฑํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ

๋ช…๋ น -----> ์ƒํƒœ ๊ธฐ๊ณ„ ------> ์ด๋ฒคํŠธ -----> ์ƒํƒœ ๊ธฐ๊ณ„
              |                          |
              |                          |
             ์ฝ๊ธฐ --------> ์ƒํƒœ < ------ ์ ์šฉ 

์ง€๊ฐ‘ ์„œ๋น„์Šค ์˜ˆ์‹œ

์ง€๊ฐ‘ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋ช…๋ น์€ ์ด์ฒด ์š”์ฒญ์ด ๋  ๊ฒƒ์ด๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์ด์ฒด ์š”์ฒญ

  2. ์ด์ฒด ์š”์ฒญ(๋ช…๋ น)์€ FIFO ํ์— ๊ธฐ๋ก๋˜๊ณ , ์ˆœ์„œ๋Œ€๋กœ ์ง€๊ฐ‘ ์„œ๋น„์Šค(์ƒํƒœ ๊ธฐ๊ณ„)์— ์ „๋‹ฌ

  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์ž”์•ก(์ƒํƒœ)๋ฅผ ์กฐํšŒ

  4. ์ง€๊ฐ‘ ์„œ๋น„์Šค(์ƒํƒœ ๊ธฐ๊ณ„)๋Š” ์ž”์•ก์ด ์ถฉ๋ถ„ํ•œ์ง€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

  5. ์ž”์•ก์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด, ์ด์ฒด(์ด๋ฒคํŠธ) ์ƒ์„ฑํ•˜์—ฌ FIFO ํ์— ๊ธฐ๋ก

  6. ์ด๋ฒคํŠธ๋Š” ์ƒํƒœ ๊ธฐ๊ณ„์— ์ „๋‹ฌ๋˜์–ด, ์ž”์•ก์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ์ƒ์„ฑ

์žฌํ˜„์„ฑ

์ด๋ฒคํŠธ ์†Œ์‹ฑ์ด ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜์— ๋น„ํ•ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์žฅ์ ์€ ์žฌํ˜„์„ฑ์ด๋‹ค.

  • ์ผ๋ฐ˜์ ์ธ ์ƒํƒœ ๋ณ€๊ฒฝ์˜ ๊ฒฝ์šฐ ์ตœ์ข… ์ƒํƒœ๋งŒ ์ €์žฅ๋˜๋ฉฐ, ๊ณผ๊ฑฐ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๊ธฐ ์–ด๋ ค์›€

  • ์ด๋ฒคํŠธ ์†Œ์‹ฑ์€ ๋ชจ๋“  ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ธฐ๋กํ•˜๋ฏ€๋กœ, ํŠน์ • ์‹œ์ ์˜ ์ƒํƒœ๋ฅผ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

+------------------------------ Commands -------------------------------+
| [ A -$1 -> C ]           [ A -$1 -> B ]            [ A -$1 -> D ]     |
+-----------------------------------------------------------------------+
        |                        |                          |
+------------------------------- Event Stream --------------------------+
| [A:-$1] [C:+$1]         [A:-$1] [B:+$1]          [A:-$1] [D:+$1]      |
+-----------------------------------------------------------------------+
        |                        |                           |
+--------------------+    +--------------------+    +--------------------+
| Snapshot t0        |    | Snapshot t1        |    | Snapshot t2        |
| A:5  B:4  C:3  D:2 |    | A:4  B:4  C:4  D:2 |    | A:3  B:5  C:4  D:2 |
+--------------------+    +--------------------+    +--------------------+

CQRS(๋ช…๋ น-์ฟผ๋ฆฌ ์ฑ…์ž„ ๋ถ„๋ฆฌ)

๋ช…๋ น(Command)๊ณผ ์งˆ์˜(Query)๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ์™€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ, ์ด๋ฒคํŠธ ์†Œ์‹ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž์ฃผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์“ฐ๊ธฐ ๋ชจ๋ธ์€ ๋„๋ฉ”์ธ ๊ทœ์น™๊ณผ ํŠธ๋žœ์žญ์…˜ ์ผ๊ด€์„ฑ์— ๋งž๊ฒŒ ์ฒ˜๋ฆฌ

  • ์ฝ๊ธฐ ๋ชจ๋ธ์€ ์กฐํšŒ ์„ฑ๋Šฅ๊ณผ ์ฟผ๋ฆฌ ์ตœ์ ํ™”์— ๋งž์ถฐ ๋ณ„๋„ ๊ตฌ์„ฑ

  • ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ ๊ฒฐํ•ฉํ•˜๋ฉด ์“ฐ๊ธฐ ์ธก์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ๊ธฐ ๋ชจ๋ธ(ํ”„๋กœ์ ์…˜)์„ ๊ฐฑ์‹ 

์ด ๋ฐฉ์‹์€ ๋‹จ์ˆœ DB ์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„๊ตํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

DB Replica
CQRS

๋ชฉ์ 

์ฝ๊ธฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ

์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋ธ ๋ถ„๋ฆฌ

์Šคํ‚ค๋งˆ

์›๋ณธ DB ์Šคํ‚ค๋งˆ ๋ณต์ œ

์ฝ๊ธฐ ๋ชจ๋ธ ์ตœ์ ํ™” ๊ฐ€๋Šฅ

๋ฐ์ดํ„ฐ ๋ฐ˜์˜ ์‹œ๊ฐ„

์‹ค์‹œ๊ฐ„ ๋˜๋Š” ์ง€์—ฐ

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ˜์˜

์ƒ์„ธ ์„ค๊ณ„

๊ณ ์‹ ๋ขฐ์„ฑ ์†”๋ฃจ์…˜

์ด๋ฒคํŠธ ์†Œ์‹ฑ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ž˜ํ”„ํŠธ ๋…ธ๋“œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SPOF ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

            +------------------------------------------------------------+
            | ํŒ”๋กœ์›Œ               ์ด๋ฒคํŠธ -> ์ƒํƒœ ๊ธฐ๊ณ„ -> ์ƒํƒœ ์ €์žฅ์†Œ            |
            +------------------------------------------------------------+
                                        |
                                      ๋ž˜ํ”„ํŠธ
                                        |
            +------------------------------------------------------------+
 ์š”์ฒญ ---->  | ๋ฆฌ๋”                 ์ด๋ฒคํŠธ -> ์ƒํƒœ ๊ธฐ๊ณ„ -> ์ƒํƒœ ์ €์žฅ์†Œ            |
            +------------------------------------------------------------+
                                        |
                                      ๋ž˜ํ”„ํŠธ
                                        |
            +------------------------------------------------------------+
            | ํŒ”๋กœ์›Œ               ์ด๋ฒคํŠธ -> ์ƒํƒœ ๊ธฐ๊ณ„ -> ์ƒํƒœ ์ €์žฅ์†Œ            |
            +------------------------------------------------------------+

๋ž˜ํ”„ํŠธ ๊ตฌ์กฐ๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ๊ฐ ๋…ธ๋“œ๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง

  • ๋ฆฌ๋” / ํŒ”๋กœ์›Œ ๊ตฌ์กฐ๋กœ, ๋ฆฌ๋”๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํŒ”๋กœ์›Œ๋Š” ๋ฆฌ๋”์˜ ๋กœ๊ทธ๋ฅผ ๋ณต์ œ

  • ๊ณผ๋ฐ˜์ˆ˜ ๋…ธ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ํ•œ ์‹œ์Šคํ…œ์€ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ ๊ฐ€๋Šฅ

๋ฐ์ดํ„ฐ ๋ฐ˜์˜ ์ง€์—ฐ ์ตœ์†Œํ™”

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

  • ๋ฐ˜์˜์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ธ์ œ ๋ฐ˜์˜๋ ์ง€ ์•Œ ์ˆ˜ ์—†์Œ

  • ์ฃผ๊ธฐ๋ฅผ ์งง๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

์ด ๋ฌธ์ œ๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

               +---------------------- ์ด๋ฒคํŠธ ์ˆ˜์‹  ํ›„ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ์—ญ๋ฐฉํ–ฅ ํ”„๋ฝ์‹œ์— ํ‘ธ์‹œ ------------------------------+
     ์‘๋‹ต       |                                                                                          |
    <----      |           +---------------------------------------------------+                          |
 ์š”์ฒญ ----> ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ---> |   ์ด๋ฒคํŠธ -> ์ƒํƒœ ๊ธฐ๊ณ„ -> ์ด๋ฒคํŠธ -> ์ƒํƒœ ๊ธฐ๊ณ„ -> ์ƒํƒœ ์ €์žฅ์†Œ  |       +--> ์ƒํƒœ ๊ธฐ๊ณ„ --> ์ƒํƒœ ์ €์žฅ์†Œ
                           +---------------------------------------------------+       |
                                                   |                                   |
                                                   +---------------------------- ------+
  1. ์š”์ฒญ์„ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ์ „๋‹ฌ

  2. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” ์“ฐ๊ธฐ ๋ชจ๋ธ์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌ

  3. ์“ฐ๊ธฐ ๋ชจ๋ธ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ฝ๊ธฐ ์ „์šฉ ์ƒํƒœ ๊ธฐ๊ณ„์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌ

  4. ์ฝ๊ธฐ ์ „์šฉ ์ƒํƒœ ๊ธฐ๊ณ„๋Š” ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ , ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์— ์ƒํƒœ๋ฅผ ํ‘ธ์‹œ

  5. ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ๋ฐ›์•„ ์‘๋‹ต

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?