BootCamp 10day

GyeongNamยท2023๋…„ 11์›” 27์ผ
0

BootCamp

๋ชฉ๋ก ๋ณด๊ธฐ
10/49
post-thumbnail

๐Ÿ“… 2023๋…„ 11์›” 27์ผ

[DB 8์ผ์ฐจ]

์˜ค๋Š˜์€ DB๊ต์œก์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์ด๋‹ค.


10์ผ์ฐจ: DB ์„œ๋ฒ„ ๊ตฌ์„ฑ, Redis

DB ์„œ๋ฒ„ ๊ตฌ์„ฑ

๊ณ ๊ฐ€์šฉ์„ฑ ํ™•๋ณด๋ฅผ ์œ„ํ•œ ๋ฐฉ์•ˆ์œผ๋กœ ์•„๋ž˜ 3๊ฐœ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • Clustering
  • Replica
  • Sharding

Clustering :

1๋Œ€์˜ ์Šคํ† ๋ฆฌ์ง€๋กœ ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„ ์šด์˜

  • DB ํ•œ๋Œ€๋งŒ ์šด์˜ํ•  ๊ฒฝ์šฐ์— ๋ฌธ์ œ์ ์€ DB์„œ๋ฒ„๊ฐ€ ๋ฉˆ์ถ”๋ฉด ๊ด€๋ จ๋œ ์„œ๋น„์Šค๊ฐ€ ์ „์ฒด ์ค‘๋‹จ
  • ๋™์ผํ•œ DB ์„œ๋ฒ„๋ฅผ ๋‘ ๋Œ€๋ฅผ ๋ฌถ์–ด ์‚ฌ์šฉํ•œ๋‹ค.

    • active/active : ๋ถ€ํ•˜๋ถ„์‚ฐ๋“ฑ์˜ ๋ชฉ์ ์œผ๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ. ์„œ๋น„์Šค ๋‹จ์œ„๋ฅผ ๋‚˜๋ˆ„์–ด ๋ถ„์‚ฐ์‹œํ‚ค๊ธฐ๋„ ํ•œ๋‹ค
    • active/stand by : ์žฅ์•  ๋Œ€๋น„, ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„๋•Œ ์˜ˆ๋น„ ์‹œ์Šคํ…œ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ๋“ฑ์„ ์œ„์ฃผ๋กœ ๊ตฌ์„ฑ

active/active์ผ ๊ฒฝ์šฐ ์ปดํ“จํ„ฐ ์ž์›๋“ค์—๊ฒŒ ์ž‘์—…์„ ๋‚˜๋ˆ„ Load balancing (Round Robin)์ด ํ•„์š”ํ•˜๋‹ค.

Round Robin Method : ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์š”์ฒญ์„ ์„œ๋ฒ„์— ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์ด ๋™์ผํ•˜๊ณ  ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ, ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉ


Replica :

n๊ฐœ์˜ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„๋ฅผ ์šด์˜

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ† ๋ฆฌ์ง€ ์œ ์‹ค์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€ ๊นŒ์ง€ ๋ณต์ œ
  • ๋ณต์ œ๋งŒ ํ•˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ์ผ€์ด์Šค์™€ ๋ณต์ œ๋ฅผ ํ•˜๋ฉด์„œ ๋™์‹œ์— slave์„œ๋ฒ„๋Š” select์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ผ€์ด์Šค(๋ถ€ํ•˜ ๋ถ„์‚ฐ)
  • ์žฌํ•ด๋ณต๊ตฌ๋ฅผ ์œ„ํ•œ DR(Disaster Recovery)์„ผํ„ฐ ์šด์˜

Sharding :

  • ๊ฐ™์€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅ
  • ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ์œ„ํ•ด ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ† ๋ฆฌ์ง€๋ฅผ n๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ €์žฅ
  • ์ „๋žต
    • Hash sharding : DB์„œ๋ฒ„๊ฐ€ ์ถ”๊ฐ€ ๋  ๊ฒฝ์šฐ ํ•ด์‰ฌ ํ•จ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ
    • Dynamic sharding : ๋ชฉ์ ์ง€ shard์™€ id range๋งŒ์„ ์ง€์ •ํ•˜๋ฏ€๋กœ, ์„œ๋ฒ„ ์ถ”๊ฐ€์‹œ ์šฉ์ดํ•˜๋‹ค.

  • HA(High Availablity)๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๋œปํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์žฅ์• ์—†๋Š” ์ง€์†๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋ฅผ ์ง€์นญํ•˜๊ณ , ์„œ๋ฒ„์˜ ๋‹ค์ค‘ํ™” ๊ตฌ์„ฑ์„ ์˜๋ฏธ

Redis :

๊ณ ์„ฑ๋Šฅ์˜ ํ‚ค-๊ฐ’(key-value) ์ €์žฅ์†Œ๋กœ, ๊ฑฐ๋Œ€ํ•œ ๋งต(Map) ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.

sudo apt-get update  #ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ
sudo apt-get install -y redis-server	# redis ๋‹ค์šด๋กœ๋“œ
sudo systemctl start redis-server	# ์‹คํ–‰
redis-cli	# ์ ‘์†

ํŠน์ง•

  • in memory db : ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋น ๋ฅธ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋ฅผ ์ง€์›
  • ์ฃผ๋กœ ์บ์‹ฑ, ์„ธ์…˜ ๊ด€๋ฆฌ, DB๋™์‹œ์„ฑ ์ œ์–ด ๋“ฑ์„ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
  • Single Thread ๊ตฌ์กฐ๋กœ ๋™์‹œ์„ฑ ์ด์Šˆ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์œˆ๋„์šฐ ์„œ๋ฒ„๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” 0~15๊นŒ์ง€๋กœ 16๊ฐœ๋กœ ๊ตฌ์„ฑ

Redis data structure

keys *		# ์ „์ฒด ์กฐํšŒ
DEL key		# ํ‚ค ์‚ญ์ œ
FLUSHDB		# ์ „์ฒด ํ‚ค ์‚ญ์ œ
  • Strings :
    ํ…์ŠคํŠธ๋‚˜ ์ˆซ์ž ๋ฐ์ดํ„ฐ ์ €์žฅ, key - value ๊ตฌ์กฐ
# ํ‚ค์˜ ๊ฐ’ ์„ค์ •
set key value

# ๊ฐ’ ์ถœ๋ ฅ
get key

# ํ‚ค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์ž…๋ ฅ
set key value nx

# ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์„ค์ • (์ดˆ๋‹จ์œ„๋กœ ์ดํ›„ ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง„๋‹ค.)
set key value nx ex 10 # 10์ดˆ๋’ค ์‚ฌ๋ผ์ง
  • Lists
    ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋ชฉ๋ก
# ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
lpush key value
rpush key value

# ๋ฐ์ดํ„ฐ ์ถ”์ถœ
lpop key
rpop key

# ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜
llen

# ์ „์ฒด ์กฐํšŒ
lrange key 0 -1 

# ๋‚จ์€ ๋งŒ๋ฃŒ์‹œ๊ฐ„ ํ™•์ธ
ttl key
  • Sets
    ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด ์ง‘ํ•ฉ
# ์ง‘ํ•ฉ์— ๋ฉค๋ฒ„ ์ถ”๊ฐ€
sadd key member

# ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ฐ˜ํ™˜
smembers key

# ๋ฉค๋ฒ„ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
scard key

# ํŠน์ • ๋ฉค๋ฒ„ ์‚ญ์ œ
srem key member1 member2
  • Sorted Sets(zset)
    ์ ์ˆ˜๊ฐ€ ํ• ๋‹น๋œ ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ, ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ๊ด€๋ฆฌ
# zset ์ถ”๊ฐ€
zadd key score member

# ํŠน์ •ํ‚ค ํŠน์ •๋ฉค๋ฒ„ ์‚ญ์ œ
zren key member

# ํŠน์ •๋ฉค๋ฒ„์˜ ์œ„์น˜ ์ •๋ณด ๋ฐ˜ํ™˜
zrank key member

# key ์˜ค๋ฆ„์ฐจ์ˆœ ์กฐํšŒ
zrange key 0 -1

# key ๋‚ด๋ฆผ์ฐจ๋ฆผ ์กฐํšŒ
zrevrange key 0 -1

# 1์”ฉ ์ฆ๊ฐ€
incr key

# 1์”ฉ ๊ฐ์†Œ
decr key
  • Hashes
    ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
# ์ €์žฅ
hset key value
hmset key value1 "value1" value2 "value2"

# ์กฐํšŒ
hget key value
hmget key value1 value2

# ์ „์ฒด์กฐํšŒ
hgetall key

# ์‚ญ์ œ
hdel key	# ํ•ด์‹œ ํ‚ค ๋ฐ‘ ํ•„๋“œ ์‚ญ์ œ
del key		# ํ•ด์‹œ ํ‚ค ์‚ญ์ œ

์˜ค๋Š˜๋ถ€๋กœ Linux์— ์ด์–ด DB๋ถ€๋ถ„๋„ ๋๋‚ฌ๋‹ค. ๋‚ด์ผ๋ถ€ํ„ด S/W ๊ณตํ•™์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

๋‹ค์Œ์ฃผ ์›”์š”์ผ์— ์žˆ์„ ์‹œํ—˜(Linux, SQL)์„ ์ž˜ ๋Œ€๋น„ํ•˜์ž

profile
503 Service Unavailable Error

0๊ฐœ์˜ ๋Œ“๊ธ€