๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“• Spring Framework/Spring Project

๋™์‹œ์„ฑ ์กฐํšŒ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ์„ฑ๋Šฅ์— ๊ด€ํ•œ ๊ณ ๋ฏผ [Lock, Queue, Redis]

by GroovyArea 2022. 9. 14.

์ฃผ๋ฌธ ๊ฑด์— ๋Œ€ํ•œ ์ƒํ’ˆ ์žฌ๊ณ  ํŒŒ์•… ๋™์‹œ์„ฑ ๊ด€๋ จ ์ด์Šˆ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•œ ํ•˜๋ฃจ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฆฌํŒฉํ† ๋ง์„ ์‹œ์ž‘ํ•˜๋ฉฐ ์ง€๋‚œ ๋„๋ฉ”์ธ๋“ค์€ ๊ธฐ๋ณธ crud API๋งŒ์„ ๋‹ค๋ฃจ์—ˆ๋‹ค.

5์ผ๋™์•ˆ JPA ๊ฐ•์˜๋“ค์„ ์ˆ˜๊ฐ•ํ•˜๋ฉฐ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ œ API ๋ฆฌํŒฉํ† ๋ง์— ๋‹ค์‹œ ์ฐฉ์ˆ˜ํ–ˆ๋‹ค.

 

์•„๋ฌด๋ž˜๋„ ํ”„๋กœ์ ํŠธ์˜ ํ† ํ”ฝ์ด ์‡ผํ•‘๋ชฐ์ด๋‹ˆ ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ œ ํŒŒํŠธ์—์„œ ๋‹จ์ˆœ CRUD๊ฐ€ ์•„๋‹Œ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ์–ด, ์™ธ๋ถ€ ๊ฒฐ์ œ API ๋ฐ ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•œ ๊น”๋”ํ•œ ์ฝ”๋“œ๋“ค์„ ๊ณ ๋ คํ•˜๋ฉฐ ์ž‘์„ฑํ•˜๋Š” ์ค‘์ด๋‹ค.

 

๋Œ€๋žต์ ์ธ ํ‹€์„ ๋งŒ๋“  ๋’ค, ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ฃผ๋ฌธ์„ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘, ๋™์‹œ์„ฑ ์ด์Šˆ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๋‹ค.

 

๊ธฐ์กด ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

MSA๋ฅผ ๊ณ ๋ คํ–ˆ๊ธฐ์—, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Outbox pattern์„ ์ด์šฉ์ค‘์ด์—ˆ๋‹ค. 

์ด ๋ฐฉ์‹์„ ํ†ตํ•ด ์ƒํ’ˆ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฏธํกํ–ˆ์—ˆ๋‹ค.

 

๋™์‹œ์„ฑ ์ด์Šˆ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ ๋ฐฉ์•ˆ

  • ํ•ด๋‹น DB ๋ ˆ์ฝ”๋“œ์— Lock์„ ๊ฑฐ๋Š” ๋ฐฉ๋ฒ•
  • ๋ฉ”์‹œ์ง€ ํ์˜ ํ˜•์‹์„ ๊ฐ€์ง„ Queue๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐ
  • Outbox pattern๊ณผ ๋™์ผํ•˜๊ฒŒ DB์— ์ฃผ๋ฌธ ๊ด€๋ จ ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜์—ฌ ์กฐํšŒํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•ด๊ฒฐ

์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• : 

- ์›ฌ๋งŒํ•ด์„œ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. DB ์ž์ฒด์— ๋ฝ์„ ์ ์œ ํ•˜๋Š” ๊ฒƒ์€ ์‹ค ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋ฏ€๋กœ, ๊ฐ€๋ฟํžˆ ๋„˜๊ฒผ๋‹ค.

 

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• :

- ํ๋ฅผ ์ด์šฉํ•ด ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์„ ๊ฑฐ๋ž€ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ์ฃผ๋ฌธ ์š”์ฒญ๊ฑด์— ํ•˜๋‚˜์˜ ํ๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์ฃผ๋ฌธ๊ฑด์ด ๋งŽ์„ ์ˆ˜๋ก ์‹ฌ๊ฐํ•˜๊ฒŒ ๋А๋ ค์ง„๋‹ค. (์œ ์‚ฌ ์ˆ˜๊ฐ•์‹ ์ฒญ..)

 

์„ธ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• : 

- ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ DB ์กฐํšŒ๋ฅผ ๊ณ„์†์ ์œผ๋กœ ์ด๋ฃจ์–ด์•ผ ํ•˜๊ณ  ์ฃผ๋ฌธ ๊ฑด์ด ๋งŽ์„ ๋•Œ ํ•œ๋ฒˆ์— ๋‹ค ์กฐํšŒํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ƒ ์ข‹์ง€ ๋ชปํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค MSA๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ•  ์ด์œ ๋„ ์—†๋‹ค.

 

Redisson์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹

๋‚ด๊ฐ€ ๊ตฌ์ƒํ•œ ํ™˜๊ฒฝ ๋‚ด์—์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ์„ฑ๋Šฅ์„ ์ถฉ์กฑ ์‹œํ‚ค๋Š” ๋ฐฉ์‹์„ ๊ณ„์† ์ฐพ์•„๋ณด๋‹ค๋ณด๋‹ˆ Redis๋ฅผ ์ด์šฉํ•œ ๋ถ„์‚ฐ๋ฝ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋งŽ์ด ๋ณด์˜€๋‹ค. 

 

์ธ๋ฉ”๋ชจ๋ฆฌ DB์ด๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ ์‹œ ์„ฑ๋Šฅ์ƒ ์œ ๋ฆฌํ•œ ์ ์ด ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์—ˆ์ง€๋งŒ, Redisson์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด Redis๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ„์‚ฐ๋ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ๋‹ค.

 

์ƒํ’ˆ ๋‹จ๊ฑด ์ฃผ๋ฌธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ฃผ๋ฌธ์ด ์žˆ์—ˆ๊ธฐ์— ์ƒํ’ˆ์— ๋Œ€ํ•œ ์žฌ๊ณ  ์ˆ˜๋Ÿ‰ ํŒŒ์•…์ด ๋™์‹œ์„ฑ ๋ฌธ์ œ์˜ ๋ฐœ๋‹จ์ด์—ˆ์ง€๋งŒ, Redisson์„ ์ด์šฉํ•˜๋ฉด ์ƒํ’ˆ๊ณผ ๊ทธ ์žฌ๊ณ ๋Ÿ‰์„ redis์— ์ €์žฅํ•˜๊ณ  ํ‚ค๋ฅผ ํ†ตํ•ด ๋ถ„์‚ฐ Lock์„ ๊ฑธ๊ฒŒ ๋˜๋ฉด ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ์— ๋™์‹œ์„ฑ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋˜๊ณ  ์„ฑ๋Šฅ๋„ ์–ด๋А์ •๋„ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•