๊ด€๋ฆฌ ๋ฉ”๋‰ด

deVlog

[MSA] MSA ์˜ ํƒœ์ƒ์  ํ•œ๊ณ„ - ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ ํŒจํ„ด (CQRS, API Aggregation) ๋ณธ๋ฌธ

๐Ÿ› ๏ธ Software Architecture/MSA

[MSA] MSA ์˜ ํƒœ์ƒ์  ํ•œ๊ณ„ - ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ ํŒจํ„ด (CQRS, API Aggregation)

์€๋ฃจ๋ฐ 2024. 4. 20. 21:40

๋ชฉ์ฐจ

     

    ๐Ÿงจ MSA ์˜ ํƒœ์ƒ์  ํ•œ๊ณ„

    • ๋ชจ๋“  ์„œ๋น„์Šค๋Š” ๊ฐ ํ”„๋กœ๋•ํŠธ๋กœ์„œ, ๋„๋ฉ”์ธ์„ ์ฑ…์ž„์ง„๋‹ค. -> ์„œ๋น„์Šค/๋„๋ฉ”์ธ ๊ฐ„ ํ˜‘์—…๊ณผ ์˜์กด์„ฑ์ด ์ง€์–‘๋˜๋Š” ๊ตฌ์กฐ์ž„.
    • ๊ฐ ์„œ๋น„์Šค์˜ DB ๋Š” ๊ฐ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•ด์•ผ๋งŒ ํ•œ๋‹ค. (data Ownership)
      • ์—ฌ๊ธฐ์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ -> ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•ด์„œ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? (๋ชจ๋†€๋ฆฌ์Šค ์˜€์œผ๋ฉด join ์œผ๋กœ ํ•ด๊ฒฐ)

     

     

     

    ๐Ÿ“ฑ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ์˜ ์กฐํ•ฉ์ด ํ•„์š”ํ•œ ์˜ˆ - API Aggregation ํŒจํ„ด

    ์˜ˆ๋ฅผ ๋“ค์–ด "ํŠน์ • ๊ธฐ๊ฐ„" ๋™์•ˆ, "์ถฉ์ „" ์ด ๋™๋ฐ˜๋œ ์ผ์ • ๊ธˆ์•ก ์ด์ƒ์˜ "์†ก๊ธˆ" ๋‚ด์—ญ์˜ ํ•ฉ์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

    ์ด๋•Œ Money service ์˜ ๋จธ๋‹ˆ ์ถฉ์ „ ๋‚ด์—ญ DB์— ์†ก๊ธˆ ์‹œ๋„ ๊ฑด์— ๋Œ€ํ•œ ID๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

     

    API Aggregation ํŒจํ„ด์„ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

    API Aggregation ํŒจํ„ด์€ ๋ง ๊ทธ๋Œ€๋กœ ์—ฌ๋Ÿฌ API ์š”์ฒญ์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€๊ณตํ•˜๊ณ  ์กฐํ•ฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

    1. ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ์„ฑ๊ณตํ•œ ์†ก๊ธˆ ๋‚ด์—ญ Get
    2.ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ์„ฑ๊ณตํ•œ ๋จธ๋‹ˆ ์ถฉ์ „ ๋‚ด์—ญ Get
    3. ๋จธ๋‹ˆ ์ถฉ์ „ ๋‚ด์—ญ ๋‚ด, ์ •์ƒ ์†ก๊ธˆ ID ๊ฐ€ ํฌํ•จ๋œ ๋‚ด์—ญ์„ ๊ฒ€์ƒ‰
    4. ๊ฒ€์ƒ‰๋œ ๋‚ด์—ญ ์ค‘ ์ผ์ • ๊ธˆ์•ก ์ด์ƒ ์ถฉ์ „ ๋‚ด์—ญ๋“ค์˜ ์ถฉ์ „ ๊ธˆ์•ก ์ดํ•ฉ์„ Sum
    5. RETURN!

     

    ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋จธ๋‹ˆ ์„œ๋น„์Šค, ์†ก๊ธˆ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ๋“ค์„ ์กฐํ•ฉํ•˜๊ณ  ๊ฐ€๊ณตํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•  ๊ฒƒ์ด๋‹ค.

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

     

     

    โš ๏ธ API Aggregation ํŒจํ„ด ์‚ฌ์šฉ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

    1) ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋œ API ์˜ ํ˜ธ์ถœ ๋นˆ๋„๋ฅผ ํŒŒ์•…ํ•ด์•ผ ํ•œ๋‹ค.

    • ๋„ˆ๋ฌด ์ž์ฃผ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, Aggregation์„ ์œ„ํ•œ ๊ฐ ์„œ๋น„์Šค์˜ API ๊ฐ€ ๋ถ€ํ•˜๋ฅผ ๋ฐ›์•„์ฃผ๊ธฐ ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ๋‹ค.
    • ๋Œ€์šฉ๋Ÿ‰ DB์˜ ๊ฒฝ์šฐ, ์ถ”๊ฐ€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” API ๋กœ ์ธํ•ด DB์˜ ๋ถ€ํ•˜ ๋˜๋Š” ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค์— ์žฅ์• ๋ฅผ ์ „ํŒŒ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

     

    2) Aggregation API์˜ ์ค‘์š”๋„

    • ์—ฌ๋Ÿฌ ๋ฒˆ์˜ API ํ˜ธ์ถœ ์ค‘, ํ•œ ๋ฒˆ์ด๋ผ๋„ ์‹คํŒจ ์‹œ ๊ทธ ํ˜ธ์ถœ์€ ์‹คํŒจ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ์ธํ•ด, ๋‹ค๋ฅธ ์„œ๋น„์Šค API ๋ณด๋‹ค ํ›จ์”ฌ ๊ธด Latency ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
      • N๋ฒˆ ํ˜ธ์ถœ + ๋‚ด๋ถ€ ๋กœ์ง ์‹คํ–‰ ์‹œ๊ฐ„

     

     

    ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด API Aggregation ํŒจํ„ด์€ "์‰ฝ๊ณ , ์ง๊ด€์ ์ด๋‹ค" ๋ผ๋Š” ์•„์ฃผ ํฐ ์žฅ์ ์ด ์žˆ๋‹ค.

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

     

    ๋‹ค๋งŒ, ๊ทธ๋งŒํผ ์ฃผ์˜ํ•ด์•ผ ํ•˜๊ณ  ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์˜ํ–ฅ๋„๋ฅผ ๊ผญ ํŒŒ์•…ํ•ด์•ผ๋งŒ ํ•˜๋Š” ๊นŒ๋‹ค๋กœ์šด ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

     

    ๋˜, ์•„๋ž˜ ์ผ€์ด์Šค์™€ ๊ฐ™์ด ์•„์˜ˆ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์™€ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค.

    "์‹ค์‹œ๊ฐ„์œผ๋กœ '๊ฐ•๋‚จ๊ตฌ' ์— ๊ฑฐ์ฃผ ์ค‘์ธ ํšŒ์›๋“ค์˜ ๋จธ๋‹ˆ ์ด ์ž”์•ก์ด ์–ด๋–ป๊ฒŒ ๋ณ€๋™๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค."

     

     

    โ€ผ๏ธ ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด..?

    ์•„๋ž˜์—์„œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์—”์ง€๋‹ˆ์–ด๋ง์ ์œผ๋กœ ๋ถ„์„ํ•ด๋ณด์ž.

    • ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•ฑ์˜ ํ™ˆ ํ™”๋ฉด์— โžก๏ธ ํ™ˆ ํ™”๋ฉด -> ๋†’์€ ๋ถ€ํ•˜
    • ๊ณ ๊ฐ์ด ๊ฑฐ์ฃผํ•˜๋Š” ๊ณณ์˜ "๊ตฌ"์— (์˜ˆ. ๊ฐ•๋‚จ๊ตฌ) โžก๏ธ ํ™ˆํ™”๋ฉด์— ๋กœ๊ทธ์ธ ํ•œ "๊ณ ๊ฐ ์ •๋ณด"๋ฅผ ๊ธฐ์ค€์œผ๋กœ
    • ๊ฑฐ์ฃผ์ค‘์ธ ํšŒ์›๋“ค ์ „์ฒด์˜ โžก๏ธ ๋กœ๊ทธ์ธ ํ•œ ๊ณ ๊ฐ์˜ ์ฃผ์†Œ ์ •๋ณด์™€ ๋™์ผํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ "์ „์ฒด ๊ณ ๊ฐ ์ •๋ณด"๋ฅผ ํ™•์ธํ•˜์—ฌ
    • ๋จธ๋‹ˆ ์ด ์ž”์•ก์ด โžก๏ธ ํ•„์š”ํ•œ ์ •๋ณด์˜ ์ค‘์‹ฌ ์„œ๋น„์Šค ๋„๋ฉ”์ธ์€ "๋จธ๋‹ˆ" ์„œ๋น„์Šค
    • ์–ด๋–ป๊ฒŒ ๋ณ€๋™๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ณ  ์‹ถ์–ด์š”. (๋น„์ฆˆ๋‹ˆ์Šค์ ์œผ๋กœ ๊ฒฝ์Ÿ์‹ฌ ์œ ๋ฐœํ•˜๊ธฐ ์œ„ํ•จ) โžก๏ธ ๋น„๊ต์  ๋œ ์ค‘์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค์ผ ์ˆ˜๋„ ์žˆ์Œ

    ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋ผ๋Š” ๊ฐ€์ •ํ•˜์— ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ๋กœ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„์ด ๊ต‰์žฅํžˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  DB ์ธ๋ฑ์‹ฑ์„ ํ•œ๋‹ค๊ณ  ํ•ด๋„ ์ธ๋ฑ์Šค ํฌ๊ธฐ๊ฐ€ ์–ด๋งˆ์–ด๋งˆ ํ•ด์„œ ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋‹ค. -> RDB ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํ™ฉ์ด๋‹ค.

     

     

    โšก๏ธ ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ ๊ตฌํ˜„ - API Aggregation ํŒจํ„ด

    1. ๊ณ ๊ฐ์ด ์†Œ์†๋œ "๊ตฌ" ์ •๋ณด ํ™•์ธ
    2. "๊ฐ•๋‚จ๊ตฌ" ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ๊ณ ๊ฐ๋“ค ์ •๋ณด๋ฅผ ํ™•์ธ (30๋งŒ๋ช…์ด๋ผ ๊ฐ€์ •)
    3. ์ฃผ์†Œ ๋ณ€๊ฒฝ ๋“ฑ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ
    4. ํฌํ•จ๋œ ๋ชจ๋“  ๊ณ ๊ฐ๋“ค์˜ "๋จธ๋‹ˆ" ์ •๋ณด๋ฅผ ํ™•์ธ
    5. 100๊ฐœ์”ฉ ๋ฌถ์–ด์„œ ํ˜ธ์ถœํ•œ๋‹ค ํ•ด๋„ 3,000 ๋ฒˆ call ์„ ํ•ด์•ผ ํ•œ๋‹ค. 
    6. ๋ชจ๋“  ๋จธ๋‹ˆ ์ž”์•ก์„ ํ™•์ธ sum
    7. RETURN

    -> ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ํ™ˆํ™”๋ฉด์—์„œ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•  ํ•˜๋‚˜์˜ API ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— 3,000 ๋ฒˆ ์ฝœ์„ ํ•ด์•ผํ•˜๋Š” ๋ง๋„ ์•ˆ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

     

    ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

    • ์ตœ์•…์˜ ๊ฒฝ์šฐ, ๊ณ ๊ฐ ์ „์ฒด ์ˆ˜๋งŒํผ Money ์ •๋ณด๋ฅผ GET ํ•ด์ค˜์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
      • ๊ทธ๋งŒํผ Money ์„œ๋น„์Šค์— ์—„์ฒญ๋‚œ ๋ถ€ํ•˜๊ฐ€ ๊ฐ€ํ•ด์ง„๋‹ค. ์ด๋กœ ์ธํ•ด Money ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์—๊ฒŒ๋„ ์žฅ์• ๊ฐ€ ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๋‹ค.
    • Latency ๋„ ์ง€๋‚˜์น˜๊ฒŒ ๊ธธ์–ด์ง€๊ณ  ์‹ค์‹œ๊ฐ„ ๋ถ€ํ•˜๋ฅผ ๊ฐ๋‹นํ•˜์ง€ ๋ชปํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

     

     

    โ˜˜๏ธ ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ ๊ตฌํ˜„ - CQRS ํŒจํ„ด

    ๊ทธ๋ ‡๋‹ค๋ฉด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋‹ค์‹œ ์ง๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์ž.

    ๊ฐ•๋‚จ๊ตฌ ๊ณ ๊ฐ์˜ ๋จธ๋‹ˆ ์ž”์•ก ๋ณ€๋™์ด ์ƒ๊ธธ ๋•Œ์—๋งŒ
    ๊ฐ•๋‚จ๊ตฌ ์ „์ฒด ๋จธ๋‹ˆ ์ด ์ž”์•ก ๊ฐ’์„ ๋ณ€๋™ ์‹œ์ผœ์ฃผ๊ณ 
    ์š”์ฒญ ์‹œ, ์ด๋ ‡๊ฒŒ ๋ณ€๋™ ์ค‘์ธ ์ตœ์ข… ๊ฐ’์„ Get ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒŒ ์•„๋‹๊นŒ?

     

    ์œ„์™€ ๊ฐ™์ด ์„ค๊ณ„๋ฅผ ํ•ด๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทธ๋ฆผ์œผ๋กœ ํ˜๋Ÿฌ๊ฐˆ ๊ฒƒ์ด๋‹ค.

    • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ •ํ•œ ์ €์žฅ์†Œ์— ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค๋ฉด GET ์š”์ฒญ ์‹œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ํŠน์ • ์ €์žฅ์†Œ์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

     

    ์—ฌ๊ธฐ์„œ ์˜๋ฌธ์ธ ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

    '๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ ์˜ค๋„ˆ์‹ญ์„ ๊ฐ€์ง„ ์„œ๋น„์Šค์—์„œ๋งŒ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.' ๋ผ๋Š” ์›์น™์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    ์ค‘์š”ํ•œ ์ ์€ "???" ๋Š” Money ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ(Query) ์€ ํ•˜์ง€๋งŒ, ๋ณ€๋™ ์‹œํ‚ค์ง€๋Š” ์•Š๋Š”๋‹ค.
    -> ์‚ฌ์‹ค์ƒ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์ด๋ฉฐ, ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ๋‹น์—ฐํžˆ ๋ชจ๋“  Money ์˜ ์ •๋ณด๋ฅผ ๋ณ€๋™(Command) ์‹œํ‚ค๋Š” ์ฃผ์ฒด๋Š” Money ์„œ๋น„์Šค์—ฌ์•ผ๋งŒ ํ•œ๋‹ค.

     

     

    ์ด๋Ÿฌํ•œ ํŒจํ„ด์„ CQRS(Command and Query Responsibility Segregation) ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

    ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๋™์‹œํ‚ค๋Š” Command ์™€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” Query ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.
    • ์žฅ์• ์ „ํŒŒ์— ๋น„๊ต์  ์ž์œ ๋กœ์šด ํŽธ์ด๋‹ค.
    • Query ๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ์„œ๋น„์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  Query ์„œ๋น„์Šค์—์„œ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

     

    ์ด์ œ๋Š” ์•„๊นŒ ๋น„์–ด์žˆ๋˜ "???" ์— ๋ญ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•  ์ง€ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฐ”๋กœ "MoneyQueryService" ์ด๋‹ค.

    ๊ทธ๋ฆผ์„ ์™„์„ฑ์‹œ์ผœ๋ณด์ž!

     

    MoneyQueryService ๋Š” CQRS ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋กœ์ง๊ณผ Query ์„œ๋น™์„ ๋‹ด๋‹นํ•œ๋‹ค.

     

     

    ๐Ÿ“— ๊ฒฐ๋ก 

    ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋œ API ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด SQL Join ์„ ํ™œ์šฉํ–ˆ์œผ๋‚˜,

    MSA ํ™˜๊ฒฝ์ด ๋˜๋ฉด์„œ ๋‹ค๋ฅธ DB๋ฅผ ํ™œ์šฉํ•˜๊ฒŒ ๋˜์–ด join ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

    ์ด๋Ÿฌํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ API Aggregation, CQRS Pattern ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์•˜๋‹ค.

    • API Aggregation Pattern์€ ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์‹ ๊ฒฝ์จ์•ผ ํ•  ๋ถ€๋ถ„์ด ๋งŽ๋‹ค.
    • CQRS ํŒจํ„ด์€ Query ์™€ Command ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„์€ ์กฐ๊ธˆ ์–ด๋ ต์ง€๋งŒ, ๋งŽ์€ ๋ถ€๋ถ„์˜ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.