๐Ÿ”ป Redis ์บ์‰ฌ ์ „๋žต - hello ์„œ๋น„์Šค์— ์ ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ๊ฐœ์„  ๊ฐ€๋Šฅ์„ฑ

Redis ์บ์‹œ ์ ์šฉ ์ „๋žต

  1. Spring Cache Abstraction ์‚ฌ์šฉ

    • Spring Boot๋Š” @Cacheable, @CachePut, @CacheEvict์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ์บ์‹ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Redis๋Š” Spring์˜ ์บ์‹œ ์ถ”์ƒํ™”(CacheManager)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์†์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ ๊ณ„์ธต ์บ์‹ฑ

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ Redis์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ ๋ฐ˜๋ณต์ ์ธ DB ํ˜ธ์ถœ์„ ์ค„์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ(์˜ˆ: ์ƒํ’ˆ ๋ชฉ๋ก, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„)๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜์—ฌ DB ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ถ„ํ•  ํ‚ค ์ „๋žต(Key Partitioning)

    • Redis์˜ ํ‚ค๋Š” ๊ณ ์œ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ๋”ฐ๋ผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: user:{id}, product:{id}์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ถฉ๋Œ ๋ฐฉ์ง€.
  4. TTL(Time-To-Live) ์„ค์ •

    • ์บ์‹œ ๋ฐ์ดํ„ฐ์— TTL์„ ์„ค์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋งŒ๋ฃŒ๋˜๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. Eviction ์ •์ฑ…

    • Redis์˜ LRU(Least Recently Used) ์ •์ฑ…์„ ํ™œ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„์— ๋„๋‹ฌํ•˜๋ฉด ์˜ค๋ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    • ํ•„์š”์— ๋”ฐ๋ผ LFU(Least Frequently Used) ๋˜๋Š” FIFO(First In First Out) ์ •์ฑ…์„ ์„ ํƒ.
  6. Multi-Level ์บ์‹ฑ

    • Redis ์บ์‹œ๋ฅผ 1์ฐจ ์บ์‹œ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ(์˜ˆ: Caffeine)๋ฅผ 2์ฐจ ์บ์‹œ๋กœ ์„ค์ •ํ•˜์—ฌ ์ž์ฃผ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  7. ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

    • Redis์˜ Hash ๋˜๋Š” Set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: ์‚ฌ์šฉ์ž์˜ ์—ฌ๋Ÿฌ ์„ค์ •๊ฐ’์„ Redis์˜ Hash๋กœ ์ €์žฅ.
  8. Pub/Sub๋ฅผ ํ™œ์šฉํ•œ ์บ์‹œ ๋ฌดํšจํ™”

    • Redis์˜ Pub/Sub ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ ๊ฐฑ์‹ ์ด๋‚˜ ๋ฌดํšจํ™” ์ด๋ฒคํŠธ๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค ๊ฐ„ ์บ์‹œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  9. ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์บ์‹œ

    • Redis๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง๊ณผ ์ƒค๋”ฉ์„ ํ†ตํ•ด ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์—์„œ ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด, ๋‹จ์ผ Redis ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ณต์œ  ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ๊ฐœ์„  ๊ฐ€๋Šฅ์„ฑ

  1. DB ์ฟผ๋ฆฌ ๊ฐ์†Œ

    • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Redis์— ์ €์žฅํ•˜์—ฌ DB ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
    • ์ฝ๊ธฐ ์š”์ฒญ์ด ๋งŽ์€ ์„œ๋น„์Šค์—์„œ DB ๋ถ€ํ•˜๋ฅผ ๋Œ€ํญ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค

    • Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ, ์ฝ๊ธฐ/์“ฐ๊ธฐ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋น„๊ตํ•ด ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋†’์€ ํ™•์žฅ์„ฑ

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

    • ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค์—์„œ ๋™์ผํ•œ Redis ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋น„์šฉ์„ ์ค„์ž…๋‹ˆ๋‹ค.
  5. ์บ์‹œ ์ ์ค‘๋ฅ  ์ฆ๊ฐ€

    • ์บ์‹œ ํžˆํŠธ์œจ์ด ๋†’์•„์ง€๋ฉด ์š”์ฒญ ์‘๋‹ต ์†๋„๊ฐ€ ๋น„์•ฝ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋น„์šฉ ์ ˆ๊ฐ

    • DB ์Šค์ผ€์ผ๋ง์ด๋‚˜ ๊ณ ์‚ฌ์–‘ ์„œ๋ฒ„๋กœ์˜ ์—…๊ทธ๋ ˆ์ด๋“œ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ

  1. ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ

    • ์บ์‹œ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด TTL, Pub/Sub, ์บ์‹œ ๋ฌดํšจํ™” ์ „๋žต์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰

    • Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. TTL ์„ค์ •๊ณผ ์ ์ ˆํ•œ Eviction ์ •์ฑ…์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณต์žก์„ฑ ์ฆ๊ฐ€

    • Redis ์บ์‹œ ๋„์ž…์€ ์ดˆ๊ธฐ ์„ค์ •๊ณผ ์œ ์ง€๋ณด์ˆ˜ ๋ณต์žก๋„๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Redis๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ๊ณ ๋ ค ์‚ฌํ•ญ

  1. ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„: Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ์ œํ•œ ์š”์ธ์ด ๋  ์ˆ˜ ์žˆ์Œ.
  2. ๋ฐ์ดํ„ฐ ์†์‹ค ๊ฐ€๋Šฅ์„ฑ: AOF๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ RDB๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ์Šค๋ƒ…์ƒท ์ดํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.
  3. ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ๋ถ€์žฌ: Redis๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€์“ฐ๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ, CPU ํ™œ์šฉ ์ธก๋ฉด์—์„œ ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ.

Redis ์บ์‹œ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ ์ ˆํ•œ hello ์„œ๋น„์Šค

    1. ์บ์‹œ์™€ DB ๊ฐ„์˜ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์„ select(์กฐํšŒ) ์ฟผ๋ฆฌ, ์žฌ์‚ฌ์šฉ๋ฅ ์ด ๋†’์€ ๋ฐ์ดํ„ฐ
    1. ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ ์ธ์Šคํ„ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ

hello service ์—์„œ์˜ ์‚ฌ์šฉ ์˜ˆ

1. ์ฃผ๋‹ด๋Œ€ ์ˆ˜์ทจ๋ฌธ์„œ ๋ฐœ๊ธ‰ ์‹œ ์‚ฌ์šฉ๋˜๋Š” hexString

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

2. ์ •์  ์˜ค๋ธŒ์ ํŠธ ๋กœ๋”ฉ์œผ๋กœ ์ธํ•œ ์ด ๋กœ๋”ฉ์‹œ๊ฐ„ ์ง€์—ฐ ๋ฌธ์ œ

  • ์ •์ ์˜ค๋ธŒ์ ํŠธ ๋กœ๋”ฉ ํ›„ ๋™์ž‘ํ•˜๋Š” jsํŠน์„ฑ
  • ๋‹ค์–‘ํ•œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” redisํŠน์„ฑ ์‚ฌ์šฉ
  • ๋กœ์ง์„ ๋ณ€๊ฒฝ ํ•˜์ง€ ์•Š๊ณ , ์žฌ์ง„์ž…์‹œ js๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์„๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋จ

๋ฉ”์ธ ํŽ˜์ด์ง€

Pasted image 20241206140739.png

ํˆฌ์ž ํŽ˜์ด์ง€

Pasted image 20241206140822.png

3. ์ฃผ๋‹ด๋Œ€ ์ฃผ์†Œ/์‹œ์„ธ ์กฐํšŒ๋‚˜, ADMIN์˜ ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ ์žฌ๊ฒ€์ƒ‰ ๋“ฑ..

๋งค๋ฒˆ ๋ฐ์ดํ„ฐ ์ตœ์‹ ํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ

  • ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์žฌ ์กฐํšŒ๋‚˜, ๊ฒ€์ƒ‰ ํ•„ํ„ฐ ์ ์šฉ์‹œ ๋ฐ์ดํ„ฐ ์ตœ์‹ ํ™” ํ•„์š”๋„๊ฐ€ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์บ์‰ฌ ์ „๋žต์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์„๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋จ

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

4. ๋งˆ์ผ€ํŒ…์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(ํด๋ผ์šฐ๋“œ ์•„๋‚ ๋ฆฌํ‹ฑ์Šค์— ์žˆ๋Š”์ง€ ์•„์ง ๋ชจ๋ฆ„)

"coordinates": [ 128.0827, 37.6061 ], ์œ„๋„/๊ฒฝ๋„ ๋ฐ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์บ์‰ฌ์— ์ทจํ•ฉ ํ›„, ์˜๊ตฌ์ €์žฅ DB ๋Œ€๋ถ„๋ฅ˜(์ง€์—ญ ๋ฐ ์‹œ๊ฐ„๋Œ€) ๋กœ ์นด์šดํŠธ๋ฅผ ์ง‘๊ณ„ํ•˜์—ฌ, ๋งˆ์ผ€ํŒ… ์š”์ฒญ์‹œ ๊ด‘๊ณ  ํƒ€๊ฒŸ ์œ„์น˜ ๋ฐ ์‹œ๊ฐ„๋Œ€๋ฅผ ์ง€์ •ํ•˜์—ฌ ๊ด‘๊ณ  ์š”์ฒญ์„ ํ•œ๋‹ค๋ฉด ์ ์€๋น„์šฉ ๋Œ€๋น„ ๋†’์€ ํšจ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.


Redis ์ •๋ณด ๊ธ€