๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/Redis

[Redis] ch.18 ๋™์‹œ์„ฑ ๋ฌธ์ œ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ

by OR15A 2024. 1. 28.

https://github.com/HongHyeongJu/StudySpace/blob/main/database/Redis/Redis_%ED%95%99%EC%8A%B5%EB%85%B8%ED%8A%B8_05.md

์œ ๋ฐ๋ฏธ Redis : ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Redis ์™„๋ฒฝ ๊ฐ€์ด๋“œ

ch.18 - ๋™์‹œ์„ฑ ๋ฌธ์ œ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ



๋™์‹œ์„ฑ ๋ฌธ์ œ ๋‹ค์‹œ๋ณด๊ธฐ

  • ์ž…์ฐฐ ์ƒํ™ฉ์—์„œ $10๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‚˜๋ฉด key๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด์„œ $15 ์ž…์ฐฐ ์š”์ฒญ์˜ ํŠธ๋žœ์žญ์…˜์ด ์ทจ์†Œ๋จ
  • ์ด๋Ÿฐ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜
    • ์œ ํšจํ—Œ ํŠธ๋žœ์žญ์…˜์ด ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ์žฌ์‹œ๋„ ๋งค์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ธฐ
    • ๋ธ”๋ก ์ „์ฒด๊ฐ€ WATCH ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ•ด๋„ ๋‹ค์‹œ ์‹คํ–‰์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Œ
      • ๋ฌธ์ œ์ 
        • ์ด ์ ‘๊ทผ๋ฒ•์„ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์—†์Œ. WATCH ๋ช…๋ น์–ด๋ฅผ ์“ฐ๋ฉด Redis ์„œ๋ฒ„๊ฐ€ ๋Š๋ ค์ง
        • ์ด๊ฑธ ์žฌ์‹œ๋„ํ•˜๋ฉด ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ์š”์ฒญ์œผ๋กœ ์ธํ•ด Redis ์„œ๋ฒ„์— ์ถ”๊ฐ€์ ์ธ ๋ถ€ํ•˜๋ฅผ ๊ฐ€ํ•˜๊ฒŒ๋จ
  • WATCH๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์ด ์œ ์ž…๋˜๋ฉด ํŠธ๋žœ์žญ์…˜์ด ๋„ˆ๋ฌด ๋งŽ์ด ์‹คํŒจํ•˜๊ฒŒ๋จ

๋Š์Šจํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ์•ฝ๊ฐ„ ๋” ์šฐ์ˆ˜ํ•œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

  • Redis ์•ˆ์—์„œ ์–ด๋–ค ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋Š”, ํ˜น์€ ์ฝ๊ธฐ ์ž‘์—…์„ ํ•˜๊ณ  ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•˜๋ ค๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์„ ๋•Œ ์˜ค์ง ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์–ด๋–ค ์‹œ์ ์— ์–ด๋–ค ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ
  • lock์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜๋ฉด ๋จ
    • ํ”„๋กœ์„ธ์Šค 1์ด๋‚˜ ํ”„๋กœ์„ธ์Šค 2๊ฐ€ ์ด ํ•ด์‹œ์— ์—ฐ๊ณ„๋œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•˜๋ฉด
    • ๋จผ์ € Redis์—์„œ ์•„์ฃผ ํŠน์ˆ˜ํ•œ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ธฐ(๋ณ„๋„์˜ ํ‚ค, ํ‚ค ์ด๋ฆ„์€ ์ƒ๊ด€ ์—†์Œ)
    • ๊ฐ™์€ ํ‚ค ์ด๋ฆ„์œผ๋กœ ๋ฌด์ž‘์œ„ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•˜๋„๋ก ํ•จ + NX ์˜ต์…˜ ๋ถ™์—ฌ์„œ!
      • ๋จผ์ € ๋„์ฐฉํ•œ ์š”์ฒญ์ด SET ๋ช…๋ น์–ด ์ „์†ก - > HASH์— ์ž‘์—… ๊ฐ€๋Šฅํ•จ (์šฐ๋ฆฌ๊ฐ€ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ง‰์œผ๋ ค๊ณ  ํ•˜๋Š” ๊ฑด, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฝ๊ธฐ๋ฅผ ํ•˜๊ณ  ์ด์–ด์„œ ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ)
      • ๋‘๋ฒˆ์งธ๋กœ ๋„์ฐฉํ•œ ์š”์ฒญ์€ SET ๋ช…๋ น์— ์‹คํŒจํ•จ
      • ์–ด๋–ค ์‹œ์ ์—์„œ ํ”„๋กœ์„ธ์Šค 1์ด ๋ชจ๋“  ์ž‘์—…(์ฝ๊ธฐ/์“ฐ๊ธฐ)์„ ๋งˆ๋ฌด๋ฆฌ -> lock:item:a1์— ์ €์žฅ๋œ ํ‚ค๋ฅผ ์‚ญ์ œ
      • ํ”„๋กœ์„ธ์Šค 2๊ฐ€ SET ๋ช…๋ น์„ ์ „์†กํ•˜๊ณ  ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๊ณ , ํ”„๋กœ์„ธ์Šค 2๊ฐ€ item:a1์— ๋Œ€ํ•œ ๋ฐฐํƒ€์ ์ธ ์ ‘๊ทผ๊ถŒ์„ ๊ฐ–๊ฒŒ ๋จ!
  • lock์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ์ด์šฉํ•ด์„œ, ์˜ค์ง ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์–ด๋–ค ์‹œ์ ์— ์–ด๋–ค ์ฃผ์–ด์ง„ ํ‚ค์— ๊ด€๋ จ๋œ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์ž‘์—… ๋˜๋Š” ์ฑ…์ž„์„ ๊ฐ–๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ

Redlock์˜ ๋‹จ์ˆœํ™” ๋ฒ„์ „ ์˜ˆ์‹œ

  • Redlock์€ ์šด์˜ ๋“ฑ๊ธ‰์˜ ๋™์‹œ์„ฑ ์ž ๊ธˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•จ
    • ๊ตฌ์ถ•ํ•  ํ•„์š” ์—†๊ณ  ๋Œ€์‹  Redlock ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž๋™์œผ๋กœ ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ์œ ๋ช…ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ
    • https://redis.io/docs/manual/patterns/distributed-locks/

Redlock์˜ ๋‹จ์ˆœํ™” ๋ฒ„์ „ ํ•จ์ˆ˜ ๊ตฌํ˜„

  • ๋‹จ์ˆœํ™” ๋ฒ„์ „
    • ์ธ์ˆ˜1: ํ‚ค(์ž ๊ทธ๋ ค๋Š” ๋Œ€์ƒ)
    • ์ธ์ˆ˜2: ์ฝœ๋ฐฑํ•จ์ˆ˜(์ž ๊ธˆ์— ์„ฑ๊ณตํ•œ ๋’ค์— ์‹คํ–‰ํ•  ๋ชจ๋“  ๋…ผ๋ฆฌ ๊ตฌํ˜„ํ•˜๊ธฐ. ํ•ญ๋ชฉ fetching -> ๊ฒ€์ฆ ์ˆ˜ํ–‰ -> ๋ฐ์ดํ„ฐ ์ž‘์—…)
      • ์žฌ์‹œ๋„ ๊ฐ„๊ฒฉ
      • ์žฌ์‹œ๋„ ํšŸ์ˆ˜
      • ํ•ด์‹œ๋กœ ํ† ํฐ ๋งŒ๋“ค๊ธฐ
      • ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์‹œ๋„(ํ˜„์žฌ ๊ฐ’์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ’์„ ์„ค์ •)
      • SET ์ž‘์—…์„ ํ•  ๋•Œ๋งˆ๋‹ค ์šฐ๋ฆฌ๋Š” Redis๊ฐ€ ๋ฌด์–ผ ๋ฆฌํ„ดํ•˜๋Š”์ง€ ํ™•์ธ -> ๊ทธ๊ฑธ acquired๋ผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹น
      • acquired๊ฐ€ null์ธ์ง€ ํ™•์ธ : if(!acquired)๋ผ๊ณ  ํ•˜๋ฉด ์ผ์‹œ์ •์ง€ํ•˜๊ณ  ์žฌ์‹œ๋„( await pause()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  retryDelayMS ๋™์•ˆ ์ผ์‹œ์ •์ง€)

Redlock์˜ ๋‹จ์ˆœํ™” ๋ฒ„์ „์˜ ๋ฌธ์ œ์  ํ•ด๊ฒฐํ•˜๊ธฐ [1] -> ์ž๋™์œผ๋กœ lock ๋งŒ๋ฃŒ ์‹œํ‚ค๊ธฐ

  • ์˜ค๋ฅ˜๋กœ ์ธํ•ด lock์„ ํ’€์ง€ ์•Š๊ณ  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜๋ฒ„๋ฆฌ๋ฉด ๋‹ค์Œ ์š”์ฒญ๋“ค์€ ์‹œ๋„ํšŸ์ˆ˜๋ฅผ ๋ชจ๋‘ ์†Œ์ง„ํ•˜๊ณ  ๋๋‚˜๋ฒ„๋ฆผ
  • PX ์˜ต์…˜์„ ์“ฐ๋ฉด ์ผ์ •์‹œ๊ฐ„ ์ง€๋‚˜๊ณ  ๋งŒ๋ฃŒ๋จ
  • ํ•จ์ˆ˜ ์•ˆ์— ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๋„ฃ์–ด์„œ ์–ด๋–ค ์ด์œ ์—์„œ๋“ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ญ”๊ฐ€ ์ž˜๋ชป๋˜๋ฉด ์–ด๋–ค ์ผ์ด ์žˆ์–ด๋„ ๊ฒฐ๊ตญ delete๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ

lock์— ๊ด€ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ [2]

  • ๋ฐ์ดํ„ฐ ํ”„๋กœ์„ธ์‹ฑ ๋‹จ๊ณ„์— ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ -> ์ž๋™์œผ๋กœ ๋งŒ๋ฃŒ๋˜๋Š” ํ‚ค๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์ผ ์‹œ๊ฐ„์ด ์ง€์ฒด๋˜๋ฉด ํ‚ค(lock)์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๊ฒŒ๋จ
  • ํ•˜์ง€๋งŒ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘์—…์ด ์ง„ํ–‰๋˜์ง€ ์•Š๋Š” ์ผ์ข…์˜ ์ค‘๊ฐ„ ์ง€๋Œ€๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ
  • ์„œ๋ฒ„๋ฅผ ๋‹ค๋ฃจ๊ณ  Redis์™€ ํ†ต์‹ ํ•  ๋•Œ๋Š” ์„œ๋ฒ„์—์„œ Redis๋กœ ๋ช…๋ น์„ ์ „์†กํ•˜๊ณ  ๊ทธ๊ฒŒ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆด์ง€์— ๋Œ€ํ•œ ๋ณด์žฅ์ด ์ „ํ˜€ ์—†๋‹ค๋Š” ์ ์„ ์—ผ๋‘ํ•ด๋‘์–ด์•ผํ•จ
  • lock ๊ฐ’์„ ํ™•์ธ ์•ˆํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๋ฌธ์ œ
    • GET์œผ๋กœ lock์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ  ํ™•์ธํ•ด์„œ ์‚ญ์ œํ•˜๊ธฐ(๋‹น์—ฐํ•œ๊ฑฐ ์•„๋‹Œ๊ฐ€ ๋จธ์•ผ...)

์šฐ๋ฐœ์ ์ธ lock ํ•ด์ œ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ : lock ํ•ด์ œ ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • Lua ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉํ•˜๊ธฐ

    ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ

  • Redis์—์„œ ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ Redis๋Š” ๋‹ค๋ฅธ ์–ด๋– ํ•œ ๋ช…๋ น๋„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ฒŒ๋จ
  • ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค๋ฅธ ๊ฑด ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์‹คํ–‰๋จ
  • ์•ž์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
    • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋งˆ์ณค๊ณ  lock์„ ํ•ด์ œํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด, ๊ณง๋ฐ”๋กœ delete๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉ
    • ๋ฐฐํ›„์—์„œ Node redis๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰
      • EVALSHA๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  Node redis๊ฐ€ ์‹คํ–‰(EVALSHA, ์Šคํฌ๋ฆฝํŠธ ID ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•  1๊ฐœ์˜ ํ‚ค์ธ lock:item:a1, ๊ทธ๋ฆฌ๊ณ  ํ† ํฐ์„ ์ธ์ˆ˜๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ)
        • lock:item:a1์ด๋ผ๋Š” KEYS[1]์„ ์ „์†กํ•˜๊ณ , 'hi'๋ผ๋Š” ARGV[1]์„ ์ „์†ก
        • GET('lock:item:a1')์ด 'hi'๋ผ๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๊ณ 
        • ๋งŒ์ผ ๊ทธ๋ ‡๋‹ค๋ฉด DEL('lock:item:a1') ์‹คํ–‰
      • ์‹ค์ œ๋กœ ํ•˜๋Š” ์—ญํ•  : ์ด ํ† ํฐ๋งŒ์„ ์‚ญ์ œํ•˜๋„๋กํ•จ
      • ๋งŒ์ผ ์ž๋™ lock ๋งŒ๋ฃŒ๊ฐ€ ์ด๋ฏธ ๊ฐœ์ž…ํ–ˆ๊ณ  ์ด๋ฏธ ๊ทธ ๊ฐ’์„ ์‚ญ์ œํ–ˆ๋‹ค๋ฉด ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์‚ญ์ œํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž„
        • ํƒ€์ด๋ฐ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ด๊ฑธ ์šฐ๋ฐœ์ ์œผ๋กœ ํ•ด์ œํ•˜์ง€ ์•Š๊ฒŒ๋จ

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์€ ๋ฌธ์ œ

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ์‹œ์  ์ดํ›„์—๋Š” ์•„๋ฌด๋Ÿฐ ํ†ต์ œ๋ ฅ์ด ์—†์Œ
  • ์ฝœ๋ฐฑ์— ๋„ฃ์€ ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ ๊ทœ์น™์— ๋”ฐ๋ผ ์›€์ง์ด๊ฒŒ ๋จ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ธ์ง€์˜ ์—ฌ๋ถ€๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ์ •ํ•˜์ง€ ๋ชปํ•จ
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์€ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ๊ธธ์–ด์งˆ ์ˆ˜๋„ ์žˆ๊ณ  ์งง์•„์งˆ ์ˆ˜๋„ ์žˆ์Œ => ํ†ต์ œ๋ ฅ ์—†์Œ
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  lock์ด ๋งŒ๋ฃŒ๋˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ทธ lock์„ ํš๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    • ๊ทธ ํ”„๋กœ์„ธ์Šค๋Š” ํ•ญ๋ชฉ ํ•ด์‹œ์— ๋Œ€ํ•˜ ์™„๋ฒฝํ•œ ํ†ต์ œ๋ ฅ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์‹ค์ œ๋ก  ๊ทธ๋ ‡์ง€ ์•Š์Œ
  • ๋”ฐ๋ผ์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์•ˆ์—๋Š” ์ด๋ก ์ ์œผ๋กœ, ์—ฌ๊ธฐ์— lock์— ๋‚จ์€ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€, lock์ด ์•„์ง ์œ ํšจํ•œ์ง€ ๋ฌป๋Š” ๊ฒƒ์ด ํ•„์š”ํ•จ

๋งŒ๋ฃŒ ์‹ ํ˜ธ ์ œ๊ณตํ•˜๊ธฐ

  • signal๊ฐ์ฒด
    • "์œ ๊ฐ์ž…๋‹ˆ๋‹ค๋งŒ lock์ด ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ๋ฅผ ์‹œ๋„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค, ์™œ๋ƒ๋ฉด ์‹ค์ œ๋กœ lock์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๊ฑธ ๋ณด์žฅํ•  ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ์š”" ใ…‹ใ…‹
  • ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ๋„ ์™„์ „ํ•œ ํ•ด๊ฒฐ์€ ์•„๋‹˜

๋งŒ๋ฃŒ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํ•ด๋ฒ• Redis

  • ๋ˆ„๊ตฐ๊ฐ€ Redis ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” lock์ด ๋งŒ๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ
  • lock์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋‚ผ ๊ฒƒ, ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์šฐ๋ฆฐ ๊ทธ ์‚ฌ๋žŒ์ด ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์–ด๋–ค ๋ฉ”์„œ๋“œ๋‚˜ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉ
  • ํ ... ๋‚˜์ค‘์— ๋‹ค์‹œ ํ•œ๋ฒˆ ๋” ๋ณต์Šต