๋ณดํต ์ผ๋ฐ์ ์ธ DB(MySQL ๋ฑ)๋ "์งํ ์ฐฝ๊ณ "๊ฐ์ ๋๋์ด๋ค. ๋ฌผ๊ฑด(๋ฐ์ดํฐ)์ ์์ฃผ ๋ง์ด ์์ ํ๊ฒ ๋ณด๊ดํ ์ ์์ง๋ง, ๋ฌผ๊ฑด์ ๊บผ๋ด๋ ค๋ฉด ์งํ๊น์ง ์๋ฆฌ๋ฒ ์ดํฐ๋ฅผ ํ๊ณ ๋ด๋ ค๊ฐ์ผ ํด์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์ด๋ฅผ ํ๋๋์คํฌ(HDD/SSD)์ ์ ์ฅํ๋ค๊ณ ํ๋ค.
DB
์ฌ์ฉ์ A โ ์ธ๊ธฐ ์ํ ์กฐํ โ DB ์กฐํ
์ฌ์ฉ์ B โ ์ธ๊ธฐ ์ํ ์กฐํ โ DB ์กฐํ
์ฌ์ฉ์ C โ ์ธ๊ธฐ ์ํ ์กฐํ โ DB ์กฐํ
๋ฐ๋ฉด, Redis๋ ๋ด๊ฐ ์์ฃผ ์ฐ๋ ์๋์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๋ณด๊ดํ ์ ์๋ ์์ ์ฐฝ๊ณ ๋ณด๋ค ์ ์ง๋ง, ์๋ง ๋ป์ผ๋ฉด 0.1์ด ๋ง์ ๋ฌผ๊ฑด์ ๊บผ๋ผ ์ ์๋ค. ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅํ๋ค๊ณ ํ๋ค.
Redis
์ฌ์ฉ์ โ ์๋ฒ โ Redis โ ์์ผ๋ฉด DB
์ฐ๋ฆฌ๊ฐ ํํ ์๋ ์ปดํจํฐ์ ์ ์ฅ์๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋๋ค.
Redis๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ก '๋ฉ๋ชจ๋ฆฌ'์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋น ๋ฅด๋ฉฐ, 3๊ฐ์ง์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ RAM์ ์ ์ฅํ์ฌ ๋์คํฌ๋ฅผ ๊ฑฐ์น ๋ ๋ฐ์ํ๋ ์ ์ถ๋ ฅ(I/O) ๋ณ๋ชฉํ์์ ์์ฒ ์ฐจ๋จํ๋ค.
์ฑ๊ธ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ฌ ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ์๊ณ ๋์์ฑ ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค.
๊ฐ๋ ์ ๋ฆฌ
์ค๋ ๋ : ์ผ์ ์ฒ๋ฆฌํ๋ ์ผ๊พผ(์ฑ๊ธ ์ค๋ ๋๋ ์ผ๊พผ์ด 1๋ช )
์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ : ์ผ๊พผ์ด ์ฌ๋ฌ ์ผ์ ๋ฒ๊ฐ์ ํ ๋, ๊ธฐ์กด ์์ ์ ๊ธฐ๋กํ๊ณ ๋ค์ ์์ ์ค๋น๋ฌผ์ ์ฑ๊ธฐ๋ '์์ ์ ํ ์๊ฐ๊ณผ ์์ ๋ญ๋น'๋ฅผ ๋ปํ๋ค.
Redis์ ํด๊ฒฐ๋ฒ : ์ผ๊พผ์ด ํ ๋ช
๋ฟ์ด๋ผ ์ผ์ ๋ฐ๊พธ๋ฉฐ ์๋ค๊ฐ๋ค ํ ํ์๊ฐ ์๋ค. ๋ค์ด์จ ์์ฒญ์ ์์๋๋ก ํ๋์ฉ ๋๊น์ง ํด๊ฒฐํ๋ฏ๋ก ์ ํ ๋น์ฉ์ด 0์ด๋ค.


๋จ์ํ key-valueํํ๋ฅผ ๋์ด, ๊ฐ๋ฐ์ ์ ์ฉํ ๋ค์ํ ์๋ฃ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ง์ํ๋ค.
๊ธฐ์กด ๋ฐฉ์์ ๋ฌธ์ : ์ผ๋ฐ ์ ์ฅ์๋ ๋จ์ ํ ์คํธ๋ง ์ ์ฅํ๋ฏ๋ก ์ค์๊ฐ ๋ญํน 1~10์ ์ถ์ถ ๊ฐ์ผ ๊ธฐ๋ฅ์ ๋ง๋๋ ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ณต์กํ ์ ๋ ฌ(Sort)์ฝ๋๋ฅผ ์ง์ ์ง์ผ ํ๋ค.
Redis์ ํด๊ฒฐ๋ฒ : Redis๋ "์๋ ์ ๋ ฌ ๊ธฐ๋ฅ์ด ์๋ ์ฃผ๋จธ๋(Sorted Set)"๊ฐ์ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ค.
โ ๊ฐ๋ฐ์๊ฐ ๋ณต์ํฉ ๋ก์ง์ ๊ตฌํํ ํ์ ์์ด, Redis์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ 1๋ฑ๋ถํฐ 10๋ฑ๊น์ง ๊บผ๋ด์ค๋ผ๋ ๋ช ๋ น์ด ํ ์ค๋ง ๋ณด๋ด๋ฉด ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌ๋๋ค.
Redis๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์ ์ฅ์๋ผ ๋น ๋ฅด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ์๋ง ์์ผ๋ฉด ์๋ฒ๊ฐ ๊บผ์ก์ ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง ์ ์๋ค. ๊ทธ๋์ Redis๋ ๋ฐ์ดํฐ๋ฅผ ๋์ผํฌ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
๋ํ์ ์ผ๋ก๋ RDB, AOF๊ฐ ์๋ค.
ํน์ ์์ ์ Redis๋ฐ์ดํฐ๋ฅผ ์ค๋ ์ท(๊ฒ์ ์ค๊ฐ ์ ์ฅ)์ฒ๋ผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
์๋ฅผ ๋ค์ด๋ณด๋ฉด 5๋ถ๋ง๋ค ํ ๋ฒ์ฉ ํ์ฌ Redis ์ํ๋ฅผ ํ์ผ๋ก ์ ์ฅํ ์ ์๋ค.
์ฅ์
๋จ์

Redis์ ๋ค์ด์จ ์ฐ๊ธฐ ๋ช ๋ น์ ๋ก๊ทธ์ฒ๋ผ ๊ณ์ ๊ธฐ๋ก(๋ด๊ฐ ํ ํ๋์ ์ผ๊ธฐ์ฅ์ ๊ณ์ ์ ๋)ํ๋ ๋ฐฉ์์ด๋ค.
SET user:1 ์ฒ ์
ZINCRBY popular:keywords 1 Redis
์์ ๊ฐ์ ๋ช
๋ น์ด๋ค์ ๊ธฐ๋กํด๋๋ค.
Reids๊ฐ ์ฌ์์๋๋ฉด ์ด ๋ช
๋ น๋ค์ ๋ค์ ์คํํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ค.

5๋ถ๋ง๋ค ์ ์ฅ โ ์ต๋ ์ฝ 5๋ถ ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ
1๋ถ๋ง๋ค ์ ์ฅ โ ์ต๋ ์ฝ 1๋ถ ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ
30์ด๋ง๋ค ์ ์ฅ โ ์ต๋ ์ฝ 30์ด ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ
์ด๋ ๊ฒ ํ๋ฉด ์ ์ค ๊ฐ๋ฅ ์๊ฐ์ ์ค์ด๋ค์ง๋ง ๊ณต์ง๊ฐ ์๋๋ค. RDB ์ค๋ ์ท์ ์์ฃผ ๋ง๋ค๋ฉด Redis๊ฐ ํด์ผ ํ ์ผ์ด ๋ง์์ง๋ค.
โ ์ด ๋ง์ ๋น์ ํ์๋ฉด 5๋ถ๋ง๋ค ๊ฒ์ ์ ์ฅํ๋ฉด ์ ์ฅ ๋ถ๋ด์ ์ ์ง๋ง, ํ๊ธฐ๋ฉด ์ต๋ 5๋ถ ํ๋ ์ด๊ฐ ๋ ์๊ฐ
30์ด๋ง๋ค ๊ฒ์์ ์ ์ฅํ๋ฉด ๋ ์๊ฐ๋ ์์ ์ ์ง๋ง ๋์ ์ ์ฅ์ด ๋๋ฌด ์์ฃผ ์ผ์ด๋์ ๊ฒ์์ด ๋ฒ๋ฒ
์ผ ์ ์์
Redis๋ ๋น์ทํ๋ค.
๊ทธ๋์ RDB ์ ์ฅ ์ฃผ๊ธฐ๋ฅผ ๋๋ฌด ์งง๊ฒ ์ก์ผ๋ฉด ์ฑ๋ฅ์ ๋ถ๋ด์ด ์๊ธธ ์ ์๊ณ , ๋์คํฌ ์ฐ๊ธฐ๊ฐ ๋ง์ด์ง๊ณ , ์ค๋
์ท ์์ฑ ๋น์ฉ์ด ๋์ด๋๋ค.
๊ทธ๋์ ๊ฒ์์ ํด๋ดค์ ๋ ์ค๋ฌด์์๋ ๋ณดํต ์ด๋ ๊ฒ ๊ณ ๋ฏผํ๋ค๊ณ ํ๋ค.
์ฌ๊ธฐ์ ์บ์ ์ฉ๋๋ผ๋ฉด ์กฐ๊ธ ์ ์ค๋ผ๋ ๊ด์ฐฎ์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๊ทธ๋ด๋๋ AOF๋ฅผ ๊ฐ์ด ๊ณ ๋ คํ๋ค.
AOF ์ค์ ์์ ๋ฐ์ ๋ฐฉ์์ด ์๋ค.
appendfsync everysec
์๋ฏธ๋ ๋๋ต ์ฐ๊ธฐ ๋ช
๋ น ๋ก๊ทธ๋ฅผ 1์ด๋ง๋ค ๋์คํฌ์ ๋ฐ์์ด๋ค.
์ ๋ฆฌํ์๋ฉด
Redis๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง๋ง, MySQL ๊ฐ์ RDBMS์ ๋ชฉ์ ์ด ๋ค๋ฅด๋ค๊ณ ํ ์ ์๋ค.
MySQL ๊ฐ์ RDBMS๋ ๊ด๊ณํ DB์ด๋ค.
๊ด๊ณํ์ด๋ผ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํ ํํ๋ก ์ ์ฅํ๋ ์๋ฏธ์ด๋ค.
| id | name | |
|---|---|---|
| 1 | abc@test.com | ์ฒ ์ |
| 2 | abc2@test.com | ์ํฌ |
ํ๊ณผ ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋์ ์ฅ์ ์ผ๋ก๋
Redis๋ ๋ณดํต Key-Value ์ ์ฅ์์ด๋ค.
Key-Valuee๋ ์ด๋ฆํ์ ๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
key : user:1:name
value : ์ฒ ์
๋๋
key : popular:keywords
value : ๊ฒ์์ด ์์ ๋ฐ์ดํฐ
Redis๋ ๋ณต์กํ JOIN๋ณด๋ค๋ ๋น ๋ฅด๊ฒ ์ ์ฅํ๊ณ ๊บผ๋ด๋ ๋ฐ ๊ฐํ๋ค.
key-value๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฅ ๋จ์ํ ๋ฐฉ์ ์ค ํ๋์ด๋ค.
์ฌ๊ธฐ์ ์ฝ๊ฒ ์์๋ฅผ ๋ค์ด๋ณด๋ฉด
โ key : ์ฌ๋ฌผํจ ๋ฒํธ / value : ๊ฐ๋ฐฉ
Redis๋ ์ด๋ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
๊ทธ๋์ Redis์์ key๋ฅผ ์ ์ค๊ณํ๋๊ฒ ์ค์ํ๋ค.
์ข์ key ์์
user:1
product:100
search:result:coffee:page:1
popular:keywords:daily:2026-07-06
โ :๋ฅผ ์ฌ์ฉํด์ ์๋ฏธ๋ฅผ ๋๋๋ฉด ์ฝ๊ธฐ ์ข๋ค.
Redis์๋ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉ์ด ๋๋๋ฐ ๋ํ์ ์ธ ์ฌ์ฉ์ฒ๋
์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ๋ฅผ Redis์ ์ ์ฅํด๋๊ณ ๋น ๋ฅด๊ฒ ๊บผ๋ธ๋ค.
๊ฒ์์ด๊ฐ ๊ฒ์๋ ๋๋ง๋ค ์ ์๋ฅผ ์ฌ๋ฆฌ๊ณ , ์ ์๊ฐ ๋์ ๊ฒ์์ด๋ฅผ ์กฐํํ๋ค.
์ด๋ Redis์ ZSet์ด ์ ์ฉํ๋ค.
๊ฒ์ ์ ์, ๊ฒ์๊ธ ์ข์์ ์์, ์ธ๊ธฐ ์ํ ์์ ๋ฑ์ ๋ง๋ค ์ ์๋ค.
์ฌ๋ฌ ์๋ฒ๊ฐ ๋์์ ๊ฐ์ ์์ ์ ํ์ง ๋ชปํ๊ฒ ๋ง์ ๋ ์ฌ์ฉํ๋ค.
์์
Redis๋ Pub/Sub ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
Redis๋ ๋จ์ํ ๋ฌธ์์ด๋ง ์ ์ฅํ๋๊ฒ ์๋๋ค.
์ฌ๋ฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํด์ฃผ๋๋ฐ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๋ชจ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Redis์ ๋ํ ๊ตฌ์กฐ์๋ฃ๋ Sttring, List, Set, Hash, Sorted Set, Zset๊ฐ ์๋ค.
String์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํ๋์ key์ ํ๋์ ๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
key: user:1:name
value : ์ฒ ์
// ์์
SET user:1:name ์ฒ ์
GET user:2:name
์ด ์๋ฃ๊ตฌ์กฐ๋ ๊ฐ๋จํ ๊ฐ ์ ์ฅ, ์บ์ ๋ฐ์ดํฐ ์ ์ฅ, ์กฐํ์ ์ซ์ ์ ์ฅ, ํ ํฐ ์ ์ฅ, ์กฐํ์ ์ฆ๊ฐํ ๋ ์ฌ์ฉํ๋ค.
// ์กฐํ์ ์ฆ๊ฐ
INCR post:1:viewCount
์ฌ๊ธฐ์ INCR ๋ช ๋ น์ด๋ ๋ฌด์์ธ๊ฐ?
์ ์ฅ๋ ์ซ์๋ฅผ 1์ฉ ์ฆ๊ฐ์ํจ๋ค.
Redis-INCR ๊ณต์๋ฌธ์
List๋ ์์๊ฐ ์๋ ๋ชฉ๋ก์ด๊ณ ์๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๊ณ FIFO(First-In_First-Out) ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
[๋ฉ์์ง1, ๋ฉ์์ง2, ๋ฉ์์ง3]
List๋ ์ต๊ทผ ๋ณธ ์ํ, ์๋ฆผ ๋ชฉ๋ก, ๊ฐ๋จํ ํ์์ ์ฌ์ฉํ๋ค.
// ์ต๊ทผ ๋ณธ ์ํ
recent:user:1
โ [์ํ3, ์ํ2, ์ํ1]
Set์ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์งํฉ์ด๋ค.
์ดํดํ๊ธฐ ์ฝ๊ฒ ์ถ์ ์ฒดํฌ๋ฅผ ์๊ฐํ๋ฉด ๋๋ค.
์ค๋ ์ถ์ํ ํ์ ๋ชฉ๋ก
์ฒ ์
์ํฌ
๊ธธ๋
// ์ฒ ์๊ฐ ๋ ๋ฒ ์ถ์ํด๋ ํ ๋ฒ๋ง ์ ์ฅ๋๋ค.
์ด ์๋ฃ๊ตฌ์กฐ๋ ์ข์์ ๋๋ฅธ ์ฌ์ฉ์ ๋ชฉ๋ก, ์ค๋ณต ์ ๊ฑฐ, ํน์ ์ฌ์ฉ์๊ฐ ์ฐธ์ฌํ๋์ง ํ์ธํ ๋ ์ฌ์ฉํ๋ค.
SADD post:1:likes user:1
SADD post:1:likes user:2
Hash๋ ํ๋์ key์์ ์ฌ๋ฌ ํ๋์ ๊ฐ์ ์ ์ฅํ๋ ๊ตฌ์กฐ์ด๋ค.
์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด์๋ Java ๊ฐ์ฒด๋ DB row์ฒ๋ผ ์๊ฐํ๋ฉด ๋๋ค.
key: user:1
field: name โ ์ฒ ์
field: age โ 15
field: email โa@test.com
์ด ์๋ฃ๊ตฌ์กฐ๋ ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ, ์ํ ์ ๋ณด ์ ์ฅ, ์ค์ ๊ฐ ์ ์ฅ์ ์ฌ์ฉ๋๋ค.
HSET user:1 name ์ฒ ์ age 15
HGET user:1 name
ZSet์ Sorted Set์ ์ค์๋ง์ด๋ค.
Sorted๋ ์ ๋ ฌ๋, Set์ ์ค๋ณต ์๋ ์งํฉ์ด๋ผ๋ ๋ป์ด๋ค.
๊ทธ๋์ ZSet์ "์ค๋ณต ์๋ ๊ฐ๋ค์ ์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ"์ด๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ํน์ง์ ๊ฐ ๊ฐ๋ง๋ค score, ์ ์๊ฐ ์๋ค๋ ๊ฑฐ๋ค.
๊ฒ์์ด: Redis, ์ ์: 10
๊ฒ์์ด: Spring, ์ ์: 7
๊ฒ์์ด: JPA, ์ ์: 3
ZSet์ ์ด ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ ์๋ค.
โ ๐กํต์ฌ ์ฐจ์ด์ ์์ฝ
Q.
**A.
๋ด๋ฐฐ์บ ๊ฐ์ ์๋ฃ