11์žฅ : CQRS

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

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

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ„ ์—ฐ๊ด€์„ ์ง์ ‘ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐํ•ด๋„, ์กฐํšŒ ํ™”๋ฉด ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ฐ™์€ ์—ฐ๊ด€๋„ ์ฆ‰์‹œ ๋กœ๋”ฉ์ด๋‚˜ ์ง€์—ฐ ๋กœ๋”ฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ๊ฐ€ ์ƒ๊ธด๋‹ค. ์กฐํšŒ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ DBMS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ „์šฉ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋ฉด JPA์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ORM ๊ธฐ๋ฒ•์€ ๋„๋ฉ”์ธ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ ์ฃผ๋ฌธ ์ƒ์„ธ ์กฐํšŒ ํ™”๋ฉด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ๊ตฌํ˜„์„ ๋˜๋ ค ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

์ƒํƒœ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ๋ชจ๋ธ๊ณผ ์กฐํšŒ๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•˜ ๊ฒƒ์€ ๊ตฌํ˜„ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถฐ์ค€๋‹ค.

CQRS

์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํฌ๊ฒŒ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์ƒํƒœ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

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

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

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

CQRS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๋ชจ๋ธ์— ๋งž๋Š” ๊ตฌํ˜„ ๊ธฐ์ˆ ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ช…๋ น ๋ชจ๋ธ์€ ๊ฐ์ฒด ์ง€ํ–ฅ์— ๊ธฐ๋ฐ˜ํ•ด์„œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์— ์ ๋‹นํ•œ JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๊ณ , ์กฐํšŒ ๋ชจ๋ธ์€ DB ํ…Œ์ด๋ธ”์—์„œ SQL๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ข‹์€ ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

์›น๊ณผ CQRS

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

CQRS ์žฅ๋‹จ์ 

  • ์žฅ์ 

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

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

  • ๋‹จ์ 

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

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

Image https://dribbble.com/shots/3657142-Roller-skating-cat

Last updated