Chapter 11: CQRS

๐Ÿ’ก ์ฑ…์—์„œ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

๋‹จ์ผ ๋ชจ๋ธ์˜ ๋‹จ์ 

  • ์—ฌ๋Ÿฌ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ™”๋ฉด์€ ์กฐํšŒ ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค

    • ์‹๋ณ„์ž๋ฅผ ์ด์šฉํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ฐธ์กฐ ๋ฐฉ์‹์€ ์ฆ‰์‹œ ๋กœ๋”ฉ ๋ฐฉ์‹๊ณผ ๊ฐ™์€ JPA์˜ ์ฟผ๋ฆฌ ๊ด€๋ จ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค

    • ์ง์ ‘ ์ฐธ์กฐ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐํ•ด๋„ ์กฐํšŒ ํ™”๋ฉด ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ฐ™์€ ์—ฐ๊ด€๋„ ์ฆ‰์‹œ ๋กœ๋”ฉ์ด๋‚˜ ์ง€์—ฐ ๋กœ๋”ฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์ด๋Ÿฐ ๊ณ ๋ฏผ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ ํ•  ๋•Œ์™€ ์กฐํšŒ ํ•  ๋•Œ ๋‹จ์ผ ๋„๋ฉ”์ธ ๋ชจ๋ธ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

    • ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ๋ชจ๋ธ๊ณผ ์กฐํšŒ๋ฅผ ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค

CQRS

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ด€์ ์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ ์€ ์ฃผ๋กœ ํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค

    • ๋ฐ˜๋ฉด์— ์กฐํšŒ ๊ธฐ๋Šฅ ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด ๋‘ ๊ฐœ ์ด์ƒ์˜ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค

  • ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฒ”์œ„์™€ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฒ”์œ„๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ๋ชจ๋ธ ๋กœ ๋‘ ์ข…๋ฅ˜์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ชจ๋ธ์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•ด์ง„๋‹ค

    • ๋‹จ์ผ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ณต์žก๋„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CQRS ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

  • CQRS๋Š” Command Query Responsibility Segregation์˜ ์•ฝ์ž๋กœ, ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น (Command) ๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ๊ณผ ์ƒํƒœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์กฐํšŒ (Query) ๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด๋‹ค

    • ๋ช…๋ น ๋ชจ๋ธ

      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณ€๊ฒฝ ์š”์ฒญ์„ ๋ช…๋ น ๋ชจ๋ธ๋กœ ์ฒ˜๋ฆฌ

      • ๋ช…๋ น ๋ชจ๋ธ์ด ๋„๋ฉ”์ธ ๋กœ์ง ์‹คํ–‰

    • ์กฐํšŒ ๋ชจ๋ธ

      • ์กฐํšŒ ๋ชจ๋ธ์„ ์ด์šฉํ•ด์„œ ํ‘œํ˜„ ๊ณ„์ธต์— ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ

  • CQRS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๋ชจ๋ธ์— ๋งž๋Š” ๊ตฌํ˜„ ๊ธฐ์ˆ  ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค

    • ์กฐํšŒ ๋ชจ๋ธ์—์„œ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์‘์šฉ ๋กœ์ง์ด ๋ณต์žกํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ”๋กœ DAO๋ฅผ ์‹คํ–‰ ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค

  • ๋ช…๋ น ๋ชจ๋ธ๊ณผ ์กฐํšŒ ๋ชจ๋ธ์˜ ์„ค๊ณ„ ์˜ˆ

    • ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ๋ช…๋ น ๋ชจ๋ธ์€ ๊ฐ์ฒด ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค

      • ์ƒํƒœ๋ฅผ ๋ณ€๊ฒจ์•Ÿ๋Š” ๋„๋ฉ”์ธ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๋‹ค

    • ์กฐํšŒ ๋ชจ๋ธ ์€ ์ฃผ๋ฌธ ์š”์•ฝ ๋ชฉ๋ก์„ ์ œ๊ณตํ•  ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ด์šฉํ•œ๋‹ค

      • ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถฐ ์„ค๊ณ„ํ–ˆ๋‹ค

  • ๋ช…๋ น ๋ชจ๋ธ๊ณผ ์กฐํšŒ ๋ชจ๋ธ์ด ์„œ๋กœ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค

    • ex)

      • ๋ช…๋ น ๋ชจ๋ธ - ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” RDBMS

      • ์กฐํšŒ ๋ชจ๋ธ - ์กฐํšŒ ์„ฑ๋Šฅ์ด ์ข‹์€ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ NoSQL

    • ๋‘ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋Š” ์ด๋ฒคํŠธ ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค

      • ๋ช…๋ น ๋ชจ๋ธ์—์„œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด, ์ด์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ ,

      • ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์กฐํšŒ ๋ชจ๋ธ์— ์ „๋‹ฌํ•ด์„œ ๋ณ€๊ฒฝ ๋‚ด์—ญ ์„ ๋ฐ˜์˜ ํ•˜๋ฉด ๋œ๋‹ค

    • ๋ช…๋ น ๋ชจ๋ธ๊ณผ ์กฐํšŒ ๋ชจ๋ธ์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์‹œ์  ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ๋ฐฉ์‹ ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค

      • ๋ช…๋ น ๋ชจ๋ธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ์ž๋งˆ์ž ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ๋ฐ”๋กœ ์กฐํšŒ ๋ชจ๋ธ์— ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค๋ฉด,

        • ๋™๊ธฐ ์ด๋ฒคํŠธ ์™€ ๊ธ€๋กœ๋ฒŒ ํŠธ๋žœ์žญ์…˜ ์„ ์‚ฌ์šฉํ•ด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค

        • but, ๋™๊ธฐ ์ด๋ฒคํŠธ ์™€ ๊ธ€๋กœ๋ฒŒ ํŠธ๋žœ์žญ์…˜ ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ (์‘๋‹ต ์†๋„์™€ ์ฒ˜๋ฆฌ๋Ÿ‰) ์ด ๋–จ์–ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค

      • ์„œ๋กœ ๋‹ค๋ฅธ ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ์‹œ๊ฐ„ ์•ˆ์—๋งŒ ๋™๊ธฐํ™”ํ•ด๋„ ๋œ๋‹ค๋ฉด, ๋น„๋™๊ธฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก ํ•˜๋ฉด ๋œ๋‹ค

CQRS ์žฅ๋‹จ์ 

  • CQRS ํŒจํ„ด์„ ์ ์šฉํ•  ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์žฅ์ 

    • ๋ช…๋ น ๋ชจ๋ธ ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋„๋ฉ”์ธ ์ž์ฒด์— ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ๋‹ค

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

        • ๋˜ํ•œ ๋ช…๋ น ๋ชจ๋ธ์—์„œ ์กฐํšŒ ๊ด€๋ จ ๋กœ์ง์ด ์‚ฌ๋ผ์ ธ ๋ณต์žก๋„ ๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค

    • ์กฐํšŒ ์„ฑ๋Šฅ ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์œ ๋ฆฌํ•˜๋‹ค

      • ์กฐํšŒ ๋‹จ์œ„๋กœ ์บ์‹œ ๊ธฐ์ˆ  ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์กฐํšŒ์— ํŠนํ™”๋œ ์ฟผ๋ฆฌ๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค

      • ์กฐํšŒ ์ „์šฉ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐํšŒ ์ฒ˜๋ฆฌ๋Ÿ‰ ์„ ๋Œ€ํญ ๋Š˜๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค

      • ์กฐํšŒ ์ „์šฉ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ๋ช…๋ น ๋ชจ๋ธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค

  • ๋‹จ์ 

    • ๊ตฌํ˜„ํ•ด์•ผ ํ•  ์ฝ”๋“œ๊ฐ€ ๋” ๋งŽ๋‹ค

    • ๋” ๋งŽ์€ ๊ตฌํ˜„ ๊ธฐ์ˆ ์ด ํ•„์š”ํ•˜๋‹ค

  • ์ •๋ฆฌ

    • ๋„๋ฉ”์ธ์ด ๋ณต์žกํ•˜์ง€ ์•Š์€๋ฐ CQRS๋ฅผ ๋„์ž…ํ•˜๋ฉด ๋‘ ๋ชจ๋ธ์„ ์œ ์ง€ํ•˜๋Š” ๋น„์šฉ๋งŒ ๋†’์•„์ง€๊ณ  ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์€ ์—†๋‹ค

    • ๋ฐ˜๋ฉด ํŠธ๋ž˜ํ”ฝ์ด ๋†’์€ ์„œ๋น„์Šค์ธ๋ฐ ๋‹จ์ผ ๋ชจ๋ธ์„ ๊ณ ์ง‘ํ•˜๋ฉด ์œ ์ง€ ๋ณด์ˆ˜ ๋น„์šฉ ์ด ๋” ๋†’์•„์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ CQRS ๋„์ž…์„ ๊ณ ๋ คํ•˜์ž

Last updated