๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/DB

[DB] ์บ์‹œ, Redis

by dar0m! 2021. 4. 18.

์บ์‹œ๋ž€?

cache ๊ตฌ์กฐ (์ถœ์ฒ˜ : https://sabarada.tistory.com/103)

  • ํ•œ๋ฒˆ ์ฝ์€(์ฒ˜๋ฆฌํ•œ) ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ „์†ก,๊ฐฑ์‹ ,์‚ญ์ œํ•˜๋Š” ๊ธฐ์ˆ ๋กœ
    ๋ณดํ†ต์€ ๋ฐ์ดํ„ฐ์˜ ๋ณด๊ด€์žฅ์†Œ๋กœ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ์—์„œ ์ •๋ณด๋ฅผ ์–ป์–ด์˜ค๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ I/O์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋‚˜ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๊ฑฐ๋‚˜ ์žฌ๋ถ€ํŒ…๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ๋ผ์ง€๋Š” ์„ฑ๊ฒฉ์˜ ํœ˜๋ฐœ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด
  • ์˜์†์ ์œผ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์—†๋Š”, ๋ง ๊ทธ๋Œ€๋กœ ์ž„์‹œ์ ์œผ๋กœ ๋ณด๊ด€ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ทธ ์ •๋ณด์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฌผ๋ก  ์ •๋ณด์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ๋ณ„๋„์˜ ๋””์Šคํฌ๋ฐฑ์—… ๋ฐ TTL๋“ฑ์˜ ์„ค์ •์œผ๋กœ ์˜๊ตฌ๋ณด๊ด€์ด๋‚˜ ์˜ค๋žœ๊ธฐ๊ฐ„ ์œ ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹จ ์ด๋Ÿฐ ์„ค์ •๋“ค์ด ๊ผญ ํ•„์š”ํ•˜๋‹ค๋ฉด Cache๋ฅผ ์ ์šฉํ•˜๋Š”๊ฒŒ ๋งž๋Š”์ง€ ํ•œ ๋ฒˆ๋„ ํƒ€๋‹น์„ฑ์„ ๊ฒ€ํ† ํ•ด ๋ณด๋Š”๊ฒŒ ์ข‹๊ฒ ๋‹ค.

๋ชฉ์ 

  • ์„œ๋ฒ„๊ฐ„ ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ ,
  • ๊ทธ๋กœ ์ธํ•ด ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜ ๊ฐ์†Œ์‹œํ‚ค๊ณ 
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น ๋ฅธ ์ฒ˜๋ฆฌ์„ฑ๋Šฅ(์กฐํšŒ)์„ ํ™•๋ณดํ•ด์„œ ๊ถ๊ทน์ ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ๊ฐ์—๊ฒŒ ์พŒ์ ํ•œ ์„œ๋น„์Šค๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ

 

Redis

Redis๋Š” ํ‚ค-๊ฐ’ ๊ธฐ๋ฐ˜์˜ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ(In-Memory Database, IMDB)์ด๋‹ค.

ํŠน์ง•

  • ํ‚ค-๊ฐ’ ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ํ•  ํ•„์š”์—†์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋˜ํ•œ, ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • ๋””์Šคํฌ ์ ‘๊ทผ์ด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ๋ณด๋‹ค ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ
  • ๋‚ด๋ถ€ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋” ๋‹จ์ˆœํ•˜๋ฉฐ ๋” ์ ์€ CPU ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ
    • 1๋ฒˆ์— 1๊ฐœ์˜ ๋ช…๋ น์–ด๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅ
    • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ, ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ์ฝ”์–ด๋ฅผ ์ง€์›ํ•˜๋Š” Memcahed์™€ ์ฐจ์ด์ 
  • Master-Slaves ๊ตฌ์กฐ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฝ๊ธฐ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋†’์€ ๊ฐ€์šฉ์„ฑ(์˜ค๋žœ ์‹œ๊ฐ„๋™์•ˆ ๊ณ ์žฅ๋‚˜์ง€ ์•Š์Œ) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ๊ณต
  • ํŠธ๋žœ์žญ์…˜ ์ง€์›
  • ๋งค์ฒด๊ฐ€ ํœ˜๋ฐœ์„ฑ
    • ์„œ๋ฒ„ ์ „์›์ด ๊บผ์ง€๋ฉด, ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋จ

ํŠน์ง•

  • Redis๋Š” List, Set, Sorted Set, Hash ๋“ฑ๊ณผ ๊ฐ™์€ Collection์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. (= ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(Collection) ์ œ๊ณต)
    • String : ๋‹จ์ˆœ ํ‚ค-๊ฐ’ ๋งคํ•‘ ๊ตฌ์กฐ
    • List : Array ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ. ์ฒ˜์Œ๊ณผ ๋์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์€ ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์€ ๋Š๋ฆด ์ˆ˜ ์žˆ์Œ.
    • Set : ์ˆœ์„œ๊ฐ€ ์—†์€ String ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ. ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต์— ๋Œ€ํ•œ ๊ฑฑ์ • ์—†์Œ.
    • Sorted Set : Set๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์ด์ง€๋งŒ, Score์„ ํ†ตํ•ด ์ˆœ์„œ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Hash : ํ‚ค-๊ฐ’ ๊ตฌ์กฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€์ง„ Object ํƒ€์ž…์„ ์ €์žฅํ•˜๊ธฐ ์ข‹์€ ๊ตฌ์กฐ
  • Race condition์— ๋น ์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ
    • Redis๋Š” Single Thread
    • ๋”ฐ๋ผ์„œ Atomic ๋ณด์žฅ
  • persistence๋ฅผ ์ง€์›ํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ๊บผ์ง€๋”๋ผ๋„ ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™œ์šฉ

  • Remote Data Store
    • ์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ Data ๊ณต์œ ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ.
    • ํŠนํžˆ, Redis์˜ ๊ฒฝ์šฐ Single Thread ์ด๋ฏ€๋กœ Race Condition ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ๋‹ค๋Š” ๊ฒƒ์„ ํ™œ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ
  • ์ธ์ฆ ํ† ํฐ ๊ฐœ๋ฐœ
  • Ranking Board (Sorted Set)
  • ์œ ์ € API Limit
  • Job Queue

 

์ฐธ๊ณ 

'๐Ÿ“ŒCS > DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DB] ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Transaction Isolation Level)  (0) 2021.04.23
[DB] ํŠธ๋žœ์žญ์…˜(Transaction)  (0) 2021.04.23
[DB] Connection Pool  (0) 2021.04.18
[DB] ์ •๊ทœํ™”  (0) 2021.04.11
[DB] N + 1 ๋ฌธ์ œ  (0) 2021.04.11

๋Œ“๊ธ€