๋ฐ์ดํ„ฐ ์šด์˜๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ redis์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

Redis๋Š” In-memory ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด

  • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์œ ์‹ค
  • ๋ณต์ œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด๋„ ์‚ฌ๋žŒ์˜ ์‹ค์ˆ˜ ๋ฐœ์ƒ ์‹œ ๋ฐ์ดํ„ฐ ๋ณต์› ๋ถˆ๊ฐ€
  • Redis๋ฅผ ์บ์‹œ ์ด์™ธ์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ํ•„์š”

 

AOF

Append Only File ๋ฐฉ์‹

  • ๋ชจ๋“  write/update ์ปค๋งจ๋“œ๋ฅผ log ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋Š” ํ˜•ํƒœ
  • redis ํ”„๋กœํ† ์ฝœ ํ˜•ํƒœ๋กœ ์ €์žฅ

RDB

snapshot ๋ฐฉ์‹

  • ์ˆœ๊ฐ„์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋‚ด์šฉ์„ disk์— ์˜ฎ๊ฒจ๋‹ด๋Š” ๋ฐฉ์‹
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ

 

AOF vs RDB ์„ ํƒ ๊ธฐ์ค€

redis๋ฅผ ์บ์‹œ๋กœ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‘˜ ๋‹ค ์“ธ ํ•„์š” ์—†๋‹ค.

1. ๋ฐฑ์—…์€ ํ•„์š”ํ•˜์ง€๋งŒ ์–ด๋А ์ •๋„ ๋ฐ์ดํ„ฐ ์†์‹ค์ด ๋ฐœ์ƒํ•ด๋„ ๊ดœ์ฐฎ์€ ๊ฒฝ์šฐ

  • RDB ๋‹จ๋… ์‚ฌ์šฉ
  • redis.conf ํŒŒ์ผ์—์„œ SAVE ์˜ต์…˜์„ ์ ์ ˆํžˆ ์‚ฌ์šฉ
    • ex) SAVE 900 1 โ†’ 900์ดˆ ๋™์•ˆ 1๊ฐœ ์ด์ƒ์˜ ํ‚ค๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ RDB ํŒŒ์ผ์„ ์žฌ์ž‘์„ฑํ•ด๋ผ

2. ์žฅ์•  ์ƒํ™ฉ ์ง์ „๊นŒ์ง€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • AOF ์‚ฌ์šฉ
  • APPENDSYNC ์˜ต์…˜์ด everysec์ธ ๊ฒฝ์šฐ ์ตœ๋Œ€ 1์ดˆ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ(default)

3. ์ œ์ผ ๊ฐ•๋ ฅํ•œ ๋‚ด๊ตฌ์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • RDB์™€ AOF ๋™์‹œ ์‚ฌ์šฉ

๋ฐ์ดํ„ฐ ์œ ํ˜•๊ณผ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํŒจํ„ด์„ ์ž˜ ๊ณ ๋ คํ•ด์„œ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

์ฝ๊ธฐ ์ „๋žต

Look-Aside(Lazy Loading)

๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ž‘์—…์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ (๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•)

Cache Hit

  1. ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  2. ๋จผ์ € cache ์„œ๋ฒ„(redis)๋ฅผ ํ™•์ธํ•œ๋‹ค.
  3. cache์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด DB๋ฅผ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  cache์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (Cache Hit)

Cache Miss

 

  1. ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  2. ๋จผ์ € cache ์„œ๋ฒ„(redis)๋ฅผ ํ™•์ธํ•œ๋‹ค.
  3. cache ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด DB๋ฅผ ์กฐํšŒํ•˜์—ฌ cache ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (Cache Miss)

 

Lazy Loading

cache๋Š” ์ฐพ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๋•Œ์—๋งŒ ์ž…๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— lazy loading์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ„

์ด ๊ตฌ์กฐ๋Š” redis๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ๋ฐ”๋กœ ์žฅ์• ๋กœ ์ด์–ด์ง€์ง€ ์•Š๊ณ  DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ์žˆ์Œ

 

Cache Warming

๋Œ€์‹  cache์— ๋ถ™์–ด์žˆ๋˜ ์ปค๋„ฅ์…˜์ด ๋งŽ์ด ์žˆ์—ˆ๋‹ค๋ฉด ๊ทธ ์ปค๋„ฅ์…˜์ด ๋‹ค DB์— ๋ถ™๊ฒŒ ๋ผ์„œ DB์— ๊ฐ‘์ž๊ธฐ ๋งŽ์€ ๋ถ€ํ•˜๊ฐ€ ๋ชฐ๋ฆด ์ˆ˜ ์žˆ์Œ

์ด๋Ÿฐ ๊ฒฝ์šฐ cache miss๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•ด์„œ ์„ฑ๋Šฅ์— ์ €ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์Œ

โ†’ ๋ฏธ๋ฆฌ DB์—์„œ cache๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด๋„ฃ์–ด ์ฃผ๋Š” ์ž‘์—…

โ†’ Cache Warming๐Ÿ”ฅ

 

์“ฐ๊ธฐ ์ „๋žต

Write-Around

์ผ๋‹จ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” DB์— ์ €์žฅ๋˜๊ณ  cache miss๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋งŒ cache(redis)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•

์ด ๊ฒฝ์šฐ cache ๋ฐ์ดํ„ฐ์™€ DB ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

Write-Through

DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ cache์—๋„ ํ•จ๊ป˜ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

cache๋Š” ํ•ญ์ƒ ์ตœ์‹  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ 

์ €์žฅํ•  ๋•Œ๋งˆ๋‹ค ๋‘ ๋‹จ๊ณ„ ์Šคํ…์„ ๊ฑฐ์ณ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค.

 

๋ฌด์กฐ๊ฑด cache์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ข…์˜ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ์žˆ์–ด

expire time์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

Redis๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋ณ„ ์ปค๋งจ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Key ์„ค์ • ํฌ์ธํŠธ

  • Key๋Š” ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ์ตœ๋Œ€ 512MB๊นŒ์ง€ ๊ฐ€๋Šฅ
    • ๊ธธ์ด ๋“ฑ ๊ฐ€๋…์„ฑ์„ ๊ณ ๋ คํ•ด์•ผํ•˜๊ณ , ์Šคํ‚ค๋งˆ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•  ๊ฒƒ
    • ex) user:1000:followers

 

Strings

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Redis ๋ฐ์ดํ„ฐ ์œ ํ˜•

ํ…์ŠคํŠธ, ์ง๋ ฌํ™”๋œ ๊ฐœ์ฒด ๋ฐ ์ด์ง„ ๋ฐฐ์—ด์„ ํฌํ•จํ•œ ๋ฐ”์ดํŠธ ์‹œํ€€์Šค๋ฅผ ์ €์žฅ, ์ด๋ฏธ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ

์บ์‹ฑ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์นด์šดํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณต

๋‹จ์ผ ๋ฌธ์ž์—ด์€ ์ตœ๋Œ€ 512MB

 

์˜ˆ

  • ๋ฌธ์ž์—ด ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰
> SET user:1 minju
OK
> GET user:1
"minju"
  • ์ง๋ ฌํ™”๋œ JSON ๋ฌธ์ž์—ด ์ €์žฅํ•˜๊ณ  ์ง€๊ธˆ๋ถ€ํ„ฐ 100์ดˆ ํ›„์— ๋งŒ๋ฃŒ๋˜๋„๋ก ์„ค์ •
> SET ticket:27 "\"{'username': 'minju', 'ticket_id': 321}\"" EX 100
  • ์นด์šดํ„ฐ ์ฆ๊ฐ€
> INCR views:page:2
(integer) 1
> INCRBY views:page:2 10
(integer) 11

Bitmaps

String์˜ ํ™•์žฅ, bit ๋‹จ์œ„ ์—ฐ์‚ฐ

๋ฐ์ดํ„ฐ ์ €์žฅ๊ณต๊ฐ„ ์ ˆ์•ฝ

์ •์ˆ˜๋กœ ๋œ ๋ฐ์ดํ„ฐ๋งŒ ์นด์šดํŒ… ๊ฐ€๋Šฅ

๋ฐ์ดํ„ฐ on/off ๊ฐ€๋Šฅ - SETBIT

  • ํ•˜๋ฃจ ์ด ๋ฐฉ๋ฌธ์ž ์ˆ˜ ์„ธ๊ธฐ

 

Lists

๋ฌธ์ž์—ด์˜ ๋ชฉ๋ก

Linked List์™€ ๊ฐ™์€ ํ˜•ํƒœ, ์Šคํƒ๊ณผ ํ ํ˜•ํƒœ ๊ตฌํ˜„

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ ๊ตฌ์ถ•

Blocking ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด Event Queue๋กœ ์‚ฌ์šฉ

  • ํŠธ์œ„ํ„ฐ ํ”ผ๋“œ ๊ธฐ๋Šฅ
    • ํ‚ค๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ฐ€๋Šฅ - LPUSHX / RPUSHX : ์ด๋ฏธ ์บ์‹ฑ๋˜์–ด ์žˆ๋Š” ํ”ผ๋“œ์—๋งŒ ์‹ ๊ทœ ํŠธ์œ—์„ ์ €์žฅํ•ด์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ €์—๊ฒŒ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ์Œ

 

์˜ˆ

  •  
  • ๋ฆฌ์ŠคํŠธ๋ฅผ ๋Œ€๊ธฐ์—ด์ฒ˜๋Ÿผ ์ทจ๊ธ‰(์„ ์ž…์„ ์ถœ)
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> RPOP work:queue:ids
"101"
> RPOP work:queue:ids
"237"
  • ๋ฆฌ์ŠคํŠธ๋ฅผ ์Šคํƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰(์„ ์ž…, ํ›„์ถœ)
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> LPOP work:queue:ids
"237"
> LPOP work:queue:ids
"101"
  • ๋ฆฌ์ŠคํŠธ ๊ธธ์ด ์กฐํšŒ
> LLEN work:queue:ids
(integer) 0
  • ํ•œ ๋ฆฌ์ŠคํŠธ์—์„œ ์š”์†Œ๋ฅผ atomicํ•˜๊ฒŒ popํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชฉ๋ก์œผ๋กœ push
> LPUSH board:todo:ids 101
(integer) 1
> LPUSH board:todo:ids 273
(integer) 2
> LMOVE board:todo:ids board:in-progress:ids LEFT LEFT
"273"
> LRANGE board:todo:ids 0 -1
1) "101"
> LRANGE board:in-progress:ids 0 -1
1) "273"
  • 100๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค(LTRIM) ํ˜ธ์ถœ(LPUSH)
> LPUSH notifications:user:1 "You've got mail!"
(integer) 1
> LTRIM notifications:user:1 0 99
OK
> LPUSH notifications:user:1 "Your package will be delivered at 12:01 today."
(integer) 2
> LTRIM notifications:user:1 0 99
OK

Hashes

ํ•˜๋‚˜์˜ key ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ field-value ์Œ์˜ ์ปฌ๋ ‰์…˜

field = subkey, field ๊ฐœ์ˆ˜๋Š” ์ œํ•œ ์—†์Œ

๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์นด์šดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ €์žฅ

 

์˜ˆ

  • ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์„ ํ•ด์‹œ๋กœ ๋‚˜ํƒ€๋ƒ„
> HSET username:123 username minju firstName Minju lastName Jeon country KR
(integer) 4
> HGET user:123 username
"minju"
> HGETALL user:123
1) "username"
2) "minju"
3) "firstName"
4) "Minju"
5) "lastName"
6) "Jeon"
7) "country"
8) "KR"
  • ์žฅ์น˜ 777์ด ์„œ๋ฒ„์— ํ•‘์„ ๋ณด๋‚ด๊ฑฐ๋‚˜, ์š”์ฒญ์„ ๋ฐœํ–‰ํ•˜๊ฑฐ๋‚˜, ์˜ค๋ฅ˜ ๋ณด๋‚ธ ํšŸ์ˆ˜์— ๋Œ€ํ•œ ์นด์šดํ„ฐ ์ €์žฅ
> HINCRBY device:777:stats pings 1
(integer) 1
> HINCRBY device:777:stats pings 1
(integer) 2
> HINCRBY device:777:stats pings 1
(integer) 3
> HINCRBY device:777:stats errors 1
(integer) 1
> HINCRBY device:777:stats requests 1
(integer) 1
> HGET device:777:stats pings
"3"
> HMGET device:777:stats requests errors
1) "1"
2) "1"

Sets

๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด, ์ค‘๋ณต X, ์ •๋ ฌX โ†’ ์ง‘ํ•ฉ

๊ณ ์œ ํ•œ ํ•ญ๋ชฉ ์ถ”์ (์˜ˆ: ์ง€์ •๋œ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ชจ๋“  ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ ์ถ”์ )

๊ด€๊ณ„ ๋‚˜ํƒ€๋‚ด๊ธฐ(์˜ˆ: ์ฃผ์–ด์ง„ ์—ญํ• ์„ ๊ฐ€์ง„ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ง‘ํ•ฉ)

๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ ๋“ฑ ์ผ๋ฐ˜์ ์ธ ์ง‘ํ•ฉ ์—ฐ์‚ฐ ์ˆ˜ํ–‰

 

์˜ˆ

  • ์‚ฌ์šฉ์ž 123 ๋ฐ 456์˜ ์ฆ๊ฒจ์ฐพ๋Š” ์ฑ… ID set ์ €์žฅ
> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1
  • ์‚ฌ์šฉ์ž 123์ด ์ฑ… 742์™€ 299๋ฅผ ์ข‹์•„ํ•˜๋Š”์ง€ ์กฐํšŒ
> SISMEMBER user:123:favorites 742
(integer) 1
> SISMEMBER user:123:favorites 299
(integer) 0
  • ์‚ฌ์šฉ์ž 123๊ณผ 456์ด ๊ณตํ†ต์ ์œผ๋กœ ์ข‹์•„ํ•˜๋Š” ์ฑ… ์กฐํšŒ
> SINTER user:123:favorites user:456:favorites
1) "561"
  • ์‚ฌ์šฉ์ž 123์ด ์ข‹์•„ํ•˜๋Š” ์ฑ…์ด ๋ช‡ ๊ถŒ์ธ์ง€ ์กฐํšŒ
> SCARD user:123:favorites
(integer) 3

Sorted Sets

์ •๋ ฌ๋œ ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด set

key, value์—์„œ score๊นŒ์ง€ ํ•จ๊ป˜ ์ €์žฅ โ†’ ๋‘˜ ์ด์ƒ์˜ score ๊ฐ’์ด ๋™์ผํ•  ๊ฒฝ์šฐ ์‚ฌ์ „์ˆœ ์ •๋ ฌ

  • ์ˆœ์œ„ํ‘œ. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€๊ทœ๋ชจ ์˜จ๋ผ์ธ ๊ฒŒ์ž„์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜์˜ ์ •๋ ฌ๋œ ๋ชฉ๋ก์„ ์‰ฝ๊ฒŒ ์œ ์ง€ ๊ด€๋ฆฌ
  • ์†๋„ ์ œํ•œ๊ธฐ. ๊ณผ๋„ํ•œ API ์š”์ฒญ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์†๋„ ์ œํ•œ๊ธฐ ๊ตฌ์ถ•

์˜ˆ

  • ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์‹ค์‹œ๊ฐ„ ์ˆœ์œ„ํ‘œ ์—…๋ฐ์ดํŠธ
> ZADD leaderboard:455 100 user:1
(integer) 1
> ZADD leaderboard:455 75 user:2
(integer) 1
> ZADD leaderboard:455 101 user:3
(integer) 1
> ZADD leaderboard:455 15 user:4
(integer) 1
> ZADD leaderboard:455 275 user:2
(integer) 0
  • ์ƒ์œ„ 3๋ช…์˜ ํ”Œ๋ ˆ์ด์–ด ์ ์ˆ˜ ์กฐํšŒ
> ZRANGE leaderboard:455 0 2 REV WITHSCORES
1) "user:2"
2) "275"
3) "user:3"
4) "101"
5) "user:1"
6) "100"
  • ์‚ฌ์šฉ์ž 2์˜ ๋“ฑ๊ธ‰ ์กฐํšŒ
> ZREVRANK leaderboard:455 user:2
(integer) 0

HyperLogLogs(HLL)

2007๋…„ Philippe Flajolet์ด ๋ฐœํ‘œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์‹œ๊ฐ„๋ณต์žก๋„ O(1)๋กœ ํšจ์œจ์ ์ธ ๊ณต๊ฐ„ ํ™œ์šฉ์„ ์œ„ํ•ด unique count๋ฅผ ํ†ตํ•œ ์™„๋ฒฝํ•œ ์ •ํ™•๋„ ์ œ๊ณต, set์˜ ์นด๋””๋„๋ฆฌํ‹ฐ๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋จ

ํ™•๋ฅ ์  ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ ์ถ”์ • ์›๋ฆฌ : https://d2.naver.com/helloworld/711301

์ตœ๋Œ€ 12KB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  0.81%์˜ ์˜ค๋ฅ˜ ์ œ๊ณต

count๋งŒ ์…€๋ฟ์ด์–ด์„œ value๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Œ (๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ํ™•์ธ ๋ถˆ๊ฐ€๋Šฅ)

AWS ์—˜๋ผ์Šคํ‹ฑ์บ์‹œ, ํด๋ผ์šฐ๋“œ ๋ฏธํ„ฐ๋ง(๋ˆ์„ ๋งค๊ธฐ๋Š” ์ง€ํ‘œ)

 

์˜ˆ

  • ๋ช‡ ๊ฐ€์ง€ ํ•ญ๋ชฉ ์ถ”๊ฐ€
> PFADD members 123
(integer) 1
> PFADD members 500
(integer) 1
> PFADD members 12
(integer) 1
  • set์˜ ๊ตฌ์„ฑ์› ์ˆ˜ ์ถ”์ •
> PFCOUNT members
(integer) 3

Streams

์‹ ๊ทœ ๊ธฐ๋Šฅ

append-only ๋กœ๊ทธ, ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ธฐ์— ์ตœ์ ์˜ ์ž๋ฃŒ๊ตฌ์กฐ

๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋กœ ํŠนํ™”

์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋™์‹œ์— syndicate ํ•œ๋‹ค. (์ผ๊ด„์ ์œผ๋กœ ..??)

kafka์—์„œ ์˜ํ–ฅ์„ ๋ฐ›์Œ

  • ์ด๋ฒคํŠธ ์†Œ์‹ฑ(์˜ˆ: ์‚ฌ์šฉ์ž ์ž‘์—…, ํด๋ฆญ ์ถ”์  ๋“ฑ)
  • ์„ผ์„œ ๋ชจ๋‹ˆํ„ฐ๋ง(์˜ˆ: ํ˜„์žฅ ์žฅ์น˜์˜ ํŒ๋…๊ฐ’)
  • ์•Œ๋ฆผ(์˜ˆ: ๊ฐ ์‚ฌ์šฉ์ž์˜ ์•Œ๋ฆผ ๊ธฐ๋ก์„ ๋ณ„๋„์˜ ์ŠคํŠธ๋ฆผ์— ์ €์žฅ)

๊ฐ ์ŠคํŠธ๋ฆผ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ID๋ฅผ ์ƒ์„ฑ โ†’ ๋‚˜์ค‘์— ์—ฐ๊ฒฐ๋œ ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ํ›„์† ํ•ญ๋ชฉ ์ฒ˜๋ฆฌ

์—ฌ๋Ÿฌ ํŠธ๋ฆฌ๋ฐ ์ „๋žต(์ŠคํŠธ๋ฆผ์ด ๋ฌด์ œํ•œ์œผ๋กœ ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€)๊ณผ ๋‘˜ ์ด์ƒ์˜ ์†Œ๋น„ ์ „๋žต(XREAD, XREADGROUP, ๊ณผ XRANGE)์„ ์ง€์›

 

์˜ˆ

  • ์ŠคํŠธ๋ฆผ์— ์—ฌ๋Ÿฌ ์˜จ๋„ ํŒ๋…๊ฐ’ ์ถ”๊ฐ€
> XADD temperatures:us-ny:10007 * temp_f 87.2 pressure 29.69 humidity 46
"1658354918398-0"
> XADD temperatures:us-ny:10007 * temp_f 83.1 pressure 29.21 humidity 46.5
"1658354934941-0"
> XADD temperatures:us-ny:10007 * temp_f 81.9 pressure 28.37 humidity 43.7
"1658354957524-0"
  • ID์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์ฒ˜์Œ ๋‘ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ ํ•ญ๋ชฉ ์กฐํšŒ
> XRANGE temperatures:us-ny:10007 1658354934941-0 + COUNT 2
1) 1) "1658354934941-0"
   2) 1) "temp_f"
      2) "83.1"
      3) "pressure"
      4) "29.21"
      5) "humidity"
      6) "46.5"
2) 1) "1658354957524-0"
   2) 1) "temp_f"
      2) "81.9"
      3) "pressure"
      4) "28.37"
      5) "humidity"
      6) "43.7"
  • ์ŠคํŠธ๋ฆผ์˜ ๋์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ตœ๋Œ€ 100๊ฐœ์˜ ์ƒˆ ์ŠคํŠธ๋ฆผ์„ ์ฝ๊ณ  ํ•ญ๋ชฉ์ด ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ตœ๋Œ€ 300ms ๋™์•ˆ ์ฐจ๋‹จ
> XREAD COUNT 100 BLOCK 300 STREAMS temperatures:us-ny:10007 $
(nil)

 

๋ฐ์ดํ„ฐ ํƒ€์ž…๋ณ„ ์ปค๋งจ๋“œ

https://redis.io/commands/

 

Commands

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker

redis.io

 

redis๋ž€?

โœ… ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Redis๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค(BSD ๋ผ์ด์„ผ์Šค), ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. Redis๋Š” strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Redis๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ๋ณต์ œ, Lua ์Šคํฌ๋ฆฝํŒ…, LRU ์ œ๊ฑฐ, ํŠธ๋žœ์žญ์…˜ ๋ฐ ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ์˜จ๋””์Šคํฌ ์ง€์†์„ฑ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์œผ๋ฉฐ Redis Sentinel์„ ํ†ตํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฐ Redis ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ†ตํ•œ ์ž๋™ ํŒŒํ‹ฐ์…”๋‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

redis๋Š” remote dictionary server์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค.

์‚ฌ์ „ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, key-value ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

redis๋Š” db-engines.com์—์„œ key, value ์ €์žฅ์†Œ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ์ˆœ์œ„์ž…๋‹ˆ๋‹ค.

2023๋…„ 1์›” 18์ผ ๊ธฐ์ค€

 

ํŠน์ง•

  • key-value ๊ตฌ์กฐ์˜ NoSQL
    • ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Œ
  • In-Memory ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • ๋งค์šฐ ๋น ๋ฅธ ์†๋„
    • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์œ ์˜ ํ•„์š”
    • ๋ณต์ œ์™€ ๋ฐฑ์—…์€ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณต์ œ๋กœ๋Š” ๋ณต์›์ด ๋ถˆ๊ฐ€, ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ฃผ๊ธฐ์  ๋ฐฑ์—… ํ•„์š”
  • ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ง€์›
    • sorted sets ํƒ€์ž…์„ ํ™œ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋จ๊ณผ ๋™์‹œ์— ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„ ๋žญํ‚น ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์— ์œ ์šฉํ•จ
    • application ๋‹จ์—์„œ ์ž‘์„ฑํ•  ๋กœ์ง์„ redis๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    • ์ž๋ฃŒ๊ตฌ์กฐ ๋ณ„๋กœ ๋‹ค๋ฅธ ์ปค๋งจ๋“œ ์ œ๊ณต
  • Single Thread ๋ฐฉ์‹ ๋™์ž‘
    • ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    • ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธด ๋ช…๋ น์–ด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋’ค ๋ช…๋ น์–ด๋“ค์€ ์•ž์— ์žˆ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
    • ํ•˜์ง€๋งŒ get, set ๋ช…๋ น์–ด์˜ ๊ฒฝ์šฐ ์ดˆ๋‹น 10๋งŒ ๊ฐœ ์ด์ƒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋น ๋ฆ„
    • atomic์„ ๋ณด์žฅํ•˜๊ณ , race condition์„ ํšŒํ”ผ
  • ๋ฒ„์ „ 6.x๋ถ€ํ„ฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ถ€๋ถ„์—๋งŒ Multi Thread ๋„์ž…
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์ „์†กํ•œ ๋ช…๋ น์„ ์ฝ๊ณ  ํŒŒ์‹ฑํ•˜๋Š” ๋ถ€๋ถ„
    • ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•˜๋Š” ๋ถ€๋ถ„
    • (์ฃผ์˜) ๋ช…๋ น์–ด ์‹คํ–‰ ์ž์ฒด๋Š” ์œ„์˜ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ๋ผ๊ณ  ๋ด์•ผํ•จ

 

์™œ ์“ธ๊นŒ?

DB๊ฐ€ ์žˆ๋Š”๋ฐ๋„ redis๋ผ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

 

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

 

์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž DB๋ฅผ ์Šค์ผ€์ผ ์ธ, ์Šค์ผ€์ผ ์•„์›ƒ ํ•˜๋Š” ๋ฐฉ์‹ ์™ธ์— ์บ์‹œ ์„œ๋ฒ„๋กœ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด redis ์ž…๋‹ˆ๋‹ค.

 

์บ์‹œ๋Š” ํ•œ๋ฒˆ ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ๋‹ค์Œ์— ์ฝ์„ ๋•Œ๋Š” ๋น ๋ฅด๊ฒŒ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋™์ž‘ํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ์š”์ฒญ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์บ์‹œ ์„œ๋ฒ„์—์„œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ”๋กœ ๋‚ด๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— DB์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ์„œ๋น„์Šค ์†๋„๋„ ๋А๋ ค์ง€์ง€ ์•Š๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

์™œ ์šฐ๋ฆฌ๋Š” ์‹œ์Šคํ…œ์— ๋ˆ์„ ๋‚ด๋Š”๊ฐ€

์‹œ์Šคํ…œ์ด๋ž€ ๋ฌด์—‡์„ ์œ„ํ•ด ๋„์ž…ํ•˜๋Š”๊ฐ€?

โ†’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€ ๋ฌด์—‡์„ ์œ„ํ•ด ๋„์ž…ํ•˜๋Š”๊ฐ€?

โ†’ ์™œ ์‹œ์Šคํ…œ์— ๋ˆ์„ ๋‚ด๋Š”๊ฐ€?

์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ์ด์œ 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ดˆ๊ธฐ๋น„์šฉ

์‹œ์Šคํ…œ์˜ ์ „์ฒด๋น„์šฉ ๋‚ด์—ญ

  • ์ดˆ๊ธฐ๋น„์šฉ : ์ตœ์ดˆ์— ์ง€๊ธ‰ํ•˜๋Š” ๋ˆ
  • ์šด์˜๋น„์šฉ : ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ธฐ๊ฐ„์— ๊ณ„์†ํ•ด์„œ ์ง€๊ธ‰ํ•˜๋Š” ๋ˆ

์ผ๋ฐ˜์ ์œผ๋กœ ์šด์˜๋น„์šฉ์˜ ๋‹จ์œ„ ๊ธˆ์•ก(์›” ๋น„์šฉ์ด๋‚˜ ์—ฐ๊ฐ„ ๋น„์šฉ)์€ ์ดˆ๊ธฐ๋น„์šฉ๋ณด๋‹ค ๋‚ฎ๊ฒŒ ์„ค์ •๋จ

ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ๋น„์šฉ < ์šด์˜๋น„์šฉ ํ•ฉ์ธ ๊ฒฝ์šฐ๋„ ๋“œ๋ฌผ์ง€ ์•Š์Œ

์ดˆ๊ธฐ๋น„์šฉ๊ณผ ์šด์˜๋น„์šฉ์˜ ๋น„์œจ์„ ๋ฐ”๊ฟ”์„œ ์ „์ฒด๋น„์šฉ์„ ๋‚ฎ๊ฒŒ ๋ณด์ด๋ ค๋Š” ์‹ฌ๋ฆฌ์ ์ธ ํŠธ๋ฆญ๋„ ์žˆ์Œ

 

๋ผ์ด์„ ์Šค ์š”๊ธˆ๊ณผ ๊ฐ€๊ฒฉ์˜ ์ฐจ์ด

  • ๋ผ์ด์„ ์Šค : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„์ž…ํ•  ๋•Œ ์ดˆ๊ธฐ๋น„์šฉ, ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉํ—ˆ๊ฐ€๋ฃŒ

์ฐจ์ด

  1. ํŒ๋งค๋‹จ์œ„๊ฐ€ ํŠน์ˆ˜ํ•˜๋‹ค
  2. ์šด์˜๋น„์šฉ์„ ์ง€๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์‹ค์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

ํ”„๋กœ์„ธ์„œ ๋ผ์ด์„ ์Šค์™€ ์‚ฌ์šฉ์ž ๋ผ์ด์„ ์Šค

  • ํ”„๋กœ์„ธ์„œ ๋ผ์ด์„ ์Šค : ํ•˜๋“œ์›จ์–ด CPU ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ๊ฐ€๊ฒฉ์ด ๊ฒฐ์ •๋จ
    • ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ๋ถˆํŠน์ • ๋‹ค์ˆ˜๊ฐ€ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ์…€ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ ์šฉ
  • ์‚ฌ์šฉ์ž ๋ผ์ด์„ ์Šค : ์‚ฌ์šฉ์ž ์ˆ˜์— ๋”ฐ๋ผ ๊ฐ€๊ฒฉ์ด ๊ฒฐ์ •๋จ
    • ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ ์œ ๋ฆฌ

๋‘˜ ๋‹ค DBMS๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๊ทœ๋ชจ(ํ”„๋กœ์„ธ์„œ ์„ฑ๋Šฅ, ์‚ฌ์šฉ์ž ์ˆ˜)๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋ผ์ด์„ ์Šค๋ฃŒ๋„ ์˜ฌ๋ผ๊ฐ„๋‹ค.

 

์ดˆ๊ธฐ๋น„์šฉ์„ ๋Š˜๋ฆฌ๋Š” ๋ฒ”์ธ

์—๋””์…˜๊ณผ ์˜ต์…˜

์—๋””์…˜

  • ์Šคํƒ ๋‹ค๋“œ ์—๋””์…˜ : ์ค‘์†Œ๊ทœ๋ชจ ์‹œ์Šคํ…œ์šฉ
  • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์—๋””์…˜ : ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์šฉ
    • ์‹ ๋ขฐ์„ฑ : ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ, ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜
    • ์„ฑ๋Šฅ : ์ผ์ • ์ˆ˜๋Ÿ‰ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์„œ ๊ธฐ์ˆ ์ง€์›, ํ…Œ์ด๋ธ” ํŒŒํ‹ฐ์…”๋‹, ์„ฑ๋Šฅ ๋ฆฌํฌํŠธ ์ถœ๋ ฅ, ๋ฐ์ดํ„ฐ ์••์ถ•
    • ๋ณด์•ˆ : ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”, ๊ฐ์‚ฌ๋กœ๊ทธ ๊ธฐ๋ก
    • ์˜คํ”ˆ์†Œ์Šค DBMS(PostgreSQL, MySQL)๋ณด๋‹ค ๋ฒค๋”์—์„œ ๊ฐœ๋ฐœํ•œ DBMS(Oracle, SQL Server. DB2)์ด ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง
  • ์ต์Šคํ”„๋ ˆ์Šค ์—๋””์…˜ : ์‹œํ—˜ํŒ
    • ๋ผ์ด์„ ์Šค๋ฃŒ ๋ฌด๋ฃŒ(๋ฒค๋”๊ฐ€ ์ œ์‹œํ•˜๋Š” ์ด์šฉ ์š”๊ฑด ์ง€ํ‚ค๋Š” ์„ ์—์„œ)
    • ์ผ๋ถ€ ๊ธฐ๋Šฅ ์ด์šฉ ๋ถˆ๊ฐ€
    • ์‹œํ—˜์ด๋‚˜ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์šด์˜๋น„์šฉ

์ƒ์šฉ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ดˆ๊ธฐ๋น„์šฉ ๋ชป์ง€์•Š๊ฒŒ ์šด์˜๋น„์šฉ(= ๊ธฐ์ˆ ์ง€์› ๋น„์šฉ)์ด ๋ฐœ์ƒ

์ผ์ • ๊ธฐ๊ฐ„์— OO์›์„ ์ง€๊ธ‰ํ•ด์•ผ ํ•จ

 

๊ธฐ์ˆ ์ง€์› ์„œ๋น„์Šค

  • ๊ธฐ์ˆ  Q&A
  • ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋ฐฐํฌ
  • ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ์˜ ์—…๋ฐ์ดํŠธ ๊ด€๋ฆฌ
  • ์ƒˆ๋กœ์šด OS๋‚˜ ํ•˜๋“œ์›จ์–ด์—์˜ ๋Œ€์‘
  • ์ „๋ฌธ ๊ธฐ์ˆ ์ž๋‚˜ ์ปจ์„คํ„ดํŠธ๋ฅผ ํ†ตํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • ๋…ธํ•˜์šฐ๋‚˜ ๋ฒ„๊ทธ ์ •๋ณด ๊ฐ™์€ ๊ธฐ์ˆ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ์˜ ์ ‘๊ทผ ๊ถŒ๋ฆฌ

ํŠน์ง•

  • ์ œํ’ˆ์˜ ๊ธฐ์ˆ ์ง€์› ๊ธฐ๊ฐ„์— ์ฃผ์˜
  • ๊ธฐ์ˆ ์ง€์› ์—†๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์œ„ํ—˜
  • ๊ธฐ์ˆ ์ง€์› ์ˆ˜์ค€์€ ๋งค๋…„ ๋‚ด๋ ค๊ฐ
    • EOSL(End Of Service Life) : ์„œํฌํŠธ ์ข…๋ฃŒ ํƒ€์ด๋ฐ
  • ๊ตฌ๋งค ์‹œ๊ธฐ์™€ ๊ธฐ์ˆ ์ง€์› ๊ธฐ๊ฐ„์€ ๊ด€๊ณ„์—†์Œ
    • ์†Œํ”„ํŠธ์›จ์–ด ์ˆ˜๋ช… : ์†Œํ”„ํŠธ์›จ์–ด ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ฐ์ •๋จ

๋ผ์ด์„ ์Šค vs ์„œ๋ธŒ์Šคํฌ๋ฆฝ์…˜

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

 

์ดˆ๊ธฐ๋น„์šฉ๊ณผ ์šด์˜๋น„์šฉ์˜ ์กฐํ•ฉ

  1. ์ดˆ๊ธฐ๋น„์šฉ X + ์šด์˜๋น„์šฉ X
    • ์ƒ์šฉ์€ ํ˜„์‹ค์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ
    • ๊ฐœ์ธ์€ ๋ฌด๋ฃŒ ์†Œํ”„ํŠธ์›จ์–ด
  2. ์ดˆ๊ธฐ๋น„์šฉ O + ์šด์˜๋น„์šฉ X
    • ์œ ์ง€๋ณด์ˆ˜ ๊ณ„์•ฝ์„ ๋งบ์ง€ ์•Š์•„ ๊ธฐ์ˆ ์ง€์›์ด ์—†๋Š” ๊ฒƒ
  3. ์ดˆ๊ธฐ๋น„์šฉ O + ์šด์˜๋น„์šฉ O
  4. ์ดˆ๊ธฐ๋น„์šฉ X + ์šด์˜๋น„์šฉ O
    • ์˜คํ”ˆ์†Œ์Šค ์ด์šฉ
    • ๊ธฐ์ˆ ์ง€์›๋ฃŒ๋งŒ ์œ ์ƒ์œผ๋กœ ํ•˜๊ฑฐ๋‚˜, ์„œ๋ธŒ์Šคํฌ๋ฆฝ์…˜ ํ˜•์‹
    • Red Hat, MySQL ๋“ฑ

 

์ดˆ๊ธฐ๋น„์šฉ์˜ ํŠธ๋ฆญ

์ธ๊ฐ„์˜ ํ˜„์žฌ์ง€ํ–ฅ ํŽธํ–ฅ์„ ์ด์šฉํ•˜์—ฌ ์ดˆ๊ธฐ๋น„์šฉ์„ ์šด์˜๋น„์šฉ์— ํฌํ•จํ•˜์—ฌ ์ด์ต์„ ํšŒ์ˆ˜

์šด์˜๋น„์šฉ์„ ํฌํ•จํ•œ ์ „์ฒด๋น„์šฉ์„ ํ™•์‹คํ•˜๊ฒŒ ๊ณ„์‚ฐํ•ด์•ผ ํ•จ

 

 

+ Recent posts