Redis๋ž€?

leejihyeonยท2026๋…„ 7์›” 7์ผ

๐Ÿ“… ๋‚ ์งœ: 2026๋…„ 7์›” 6์ผ


๐ŸŽฏ ์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ ํ•ต์‹ฌ ๋‚ด์šฉ

  • Redis : ๋ฐ์ดํ„ฐ๋ฅผ ์ปดํ“จํ„ฐ์˜ RAM(๋ฉ”๋ชจ๋ฆฌ)์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ์ด๋‹ค.
  • ์ž๋ฃŒ๊ตฌ์กฐ : Redis๋Š” String, List, Set, Hash, ZSet ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

ํ•™์Šต ๋‚ด์šฉ ์ •๋ฆฌ

Redis๋ž€?

  • Redis๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ

๋ณดํ†ต ์ผ๋ฐ˜์ ์ธ DB(MySQL ๋“ฑ)๋Š” "์ง€ํ•˜ ์ฐฝ๊ณ "๊ฐ™์€ ๋А๋‚Œ์ด๋‹ค. ๋ฌผ๊ฑด(๋ฐ์ดํ„ฐ)์„ ์•„์ฃผ ๋งŽ์ด ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฌผ๊ฑด์„ ๊บผ๋‚ด๋ ค๋ฉด ์ง€ํ•˜๊นŒ์ง€ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๋ฅผ ํƒ€๊ณ  ๋‚ด๋ ค๊ฐ€์•ผ ํ•ด์„œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ์ด๋ฅผ ํ•˜๋“œ๋””์Šคํฌ(HDD/SSD)์— ์ €์žฅํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

DB
์‚ฌ์šฉ์ž A โ†’ ์ธ๊ธฐ ์ƒํ’ˆ ์กฐํšŒ โ†’ DB ์กฐํšŒ
์‚ฌ์šฉ์ž B โ†’ ์ธ๊ธฐ ์ƒํ’ˆ ์กฐํšŒ โ†’ DB ์กฐํšŒ
์‚ฌ์šฉ์ž C โ†’ ์ธ๊ธฐ ์ƒํ’ˆ ์กฐํšŒ โ†’ DB ์กฐํšŒ

๋ฐ˜๋ฉด, Redis๋Š” ๋‚ด๊ฐ€ ์ž์ฃผ ์“ฐ๋Š” ์„œ๋ž์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ์–‘์€ ์ฐฝ๊ณ ๋ณด๋‹ค ์ ์ง€๋งŒ, ์†๋งŒ ๋ป—์œผ๋ฉด 0.1์ดˆ ๋งŒ์— ๋ฌผ๊ฑด์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ(RAM)์— ์ €์žฅํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

Redis
์‚ฌ์šฉ์ž โ†’ ์„œ๋ฒ„ โ†’ Redis โ†’ ์—†์œผ๋ฉด DB

์—ฌ๊ธฐ์„œ ์•Œ์•„๋‘๋ฉด ์ข‹์„ ์šฉ์–ด

  • ์ธ๋ฉ”๋ชจ๋ฆฌ(In-Memory) : ๋ฐ์ดํ„ฐ๋ฅผ ์ปดํ“จํ„ฐ์˜ ๋‡Œ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ(RAM)์— ์˜ฌ๋ ค๋‘๊ณ  ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹, ์ฐฝ๊ณ (ํ•˜๋“œ๋””์Šคํฌ)์— ๊ฐ”๋‹ค ์˜ค๋Š” ์‹œ๊ฐ„์ด ์—†์–ด์„œ ์†๋„๊ฐ€ ์••๋„์ ์œผ๋กœ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • ์บ์‹œ(Cache) : ์ž์ฃผ ์ฐพ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ดˆ๊ณ ์† ๋ฉ”๋ชจ์žฅ(Redis)์— ๋ณต์‚ฌํ•ด ๋‘์—ˆ๋‹ค๊ฐ€, ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๋ฉด ์ง„์งœ DB๊นŒ์ง€ ์•ˆ ๊ฐ€๊ณ  ์•ž์—์„œ ๋ฐ”๋กœ ๊บผ๋‚ด์ฃผ๋Š” ๊ธฐ์ˆ 

Redis๋Š” ์™œ ๋น ๋ฅผ๊นŒ?

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•„๋Š” ์ปดํ“จํ„ฐ์˜ ์ €์žฅ์†Œ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

  • ๋””์Šคํฌ(SSD, HDD) : ์ „์›์ด ๊บผ์ ธ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ๋Š” ์ €์žฅ๊ณต๊ฐ„์ด์ง€๋งŒ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ(RAM) : ์ปดํ“จํ„ฐ๊ฐ€ ๋ฐ”๋กœ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ €์žฅ๊ณต๊ฐ„์œผ๋กœ, ์†๋„๋Š” ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ๋ณดํ†ต ์ „์›์ด ๊บผ์ง€๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

Redis๊ฐ€ ๋น ๋ฅธ ํ•ต์‹ฌ ํŠน์ง•

Redis๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๋กœ '๋ฉ”๋ชจ๋ฆฌ'์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋น ๋ฅด๋ฉฐ, 3๊ฐ€์ง€์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

1. In-Memory(์ธ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ)

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ RAM์— ์ €์žฅํ•˜์—ฌ ๋””์Šคํฌ๋ฅผ ๊ฑฐ์น  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ž…์ถœ๋ ฅ(I/O) ๋ณ‘๋ชฉํ˜„์ƒ์„ ์›์ฒœ ์ฐจ๋‹จํ•œ๋‹ค.

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

2. ๋‹จ์ผ ์Šค๋ ˆ๋“œ(Single-threaded)

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ์—†๊ณ  ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • ๊ฐœ๋… ์ •๋ฆฌ

    • ์Šค๋ ˆ๋“œ : ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ๊พผ(์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” ์ผ๊พผ์ด 1๋ช…)

    • ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ : ์ผ๊พผ์ด ์—ฌ๋Ÿฌ ์ผ์„ ๋ฒˆ๊ฐˆ์•„ ํ•  ๋•Œ, ๊ธฐ์กด ์ž‘์—…์„ ๊ธฐ๋กํ•˜๊ณ  ๋‹ค์Œ ์ž‘์—… ์ค€๋น„๋ฌผ์„ ์ฑ™๊ธฐ๋Š” '์ž‘์—… ์ „ํ™˜ ์‹œ๊ฐ„๊ณผ ์ž์› ๋‚ญ๋น„'๋ฅผ ๋œปํ•œ๋‹ค.

  • Redis์˜ ํ•ด๊ฒฐ๋ฒ• : ์ผ๊พผ์ด ํ•œ ๋ช…๋ฟ์ด๋ผ ์ผ์„ ๋ฐ”๊พธ๋ฉฐ ์™”๋‹ค๊ฐ”๋‹ค ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ๋๊นŒ์ง€ ํ•ด๊ฒฐํ•˜๋ฏ€๋กœ ์ „ํ™˜ ๋น„์šฉ์ด 0์ด๋‹ค.


3. ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ง€์›

๋‹จ์ˆœํ•œ key-valueํ˜•ํƒœ๋ฅผ ๋„˜์–ด, ๊ฐœ๋ฐœ์— ์œ ์šฉํ•œ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ง€์›ํ•œ๋‹ค.

  • ๊ธฐ์กด ๋ฐฉ์‹์˜ ๋ฌธ์ œ : ์ผ๋ฐ˜ ์ €์žฅ์†Œ๋Š” ๋‹จ์ˆœ ํ…์ŠคํŠธ๋งŒ ์ €์žฅํ•˜๋ฏ€๋กœ ์‹ค์‹œ๊ฐ„ ๋žญํ‚น 1~10์œ„ ์ถ”์ถœ ๊ฐ™์œผ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋ ค๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋ณต์žกํ•œ ์ •๋ ฌ(Sort)์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์งœ์•ผ ํ–ˆ๋‹ค.

  • Redis์˜ ํ•ด๊ฒฐ๋ฒ• : Redis๋Š” "์ž๋™ ์ •๋ ฌ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์ฃผ๋จธ๋‹ˆ(Sorted Set)"๊ฐ™์€ ์œ ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

โ†’ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์ž‘ํ•ฉ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ํ•„์š” ์—†์ด, Redis์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  1๋“ฑ๋ถ€ํ„ฐ 10๋“ฑ๊นŒ์ง€ ๊บผ๋‚ด์ค˜๋ผ๋Š” ๋ช…๋ น์–ด ํ•œ ์ค„๋งŒ ๋ณด๋‚ด๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.


Redis๋Š” ์˜๊ตฌ ์ €์žฅ์†Œ์ผ๊นŒ?

Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ๋ผ ๋น ๋ฅด์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์žˆ์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ๊บผ์กŒ์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Redis๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šผํฌ์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.
๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” RDB, AOF๊ฐ€ ์žˆ๋‹ค.

RDB

ํŠน์ • ์‹œ์ ์˜ Redis๋ฐ์ดํ„ฐ๋ฅผ ์Šค๋ƒ…์ƒท(๊ฒŒ์ž„ ์ค‘๊ฐ„ ์ €์žฅ)์ฒ˜๋Ÿผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด 5๋ถ„๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ํ˜„์žฌ Redis ์ƒํƒœ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์žฅ์ 

    • ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋น„๊ต์  ์ž‘๋‹ค
    • ๋ณต๊ตฌ๊ฐ€ ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐฑ์—… ์šฉ๋„๋กœ ์ข‹๋‹ค.
  • ๋‹จ์ 

    • ๋งˆ์ง€๋ง‰ ์ €์žฅ ์ดํ›„ ๋ฐ์ดํ„ฐ๋Š” ์œ ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.
    • 5๋ถ„๋งˆ๋‹ค ์ €์žฅํ•˜๋Š”๋ฐ Reids๊ฐ€ 4๋ถ„ 59์ดˆ์— ์ฃฝ์œผ๋ฉด, ์ตœ๊ทผ 4๋ถ„ 59์ดˆ ๋™์•ˆ์˜ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

AOF

Redis์— ๋“ค์–ด์˜จ ์“ฐ๊ธฐ ๋ช…๋ น์„ ๋กœ๊ทธ์ฒ˜๋Ÿผ ๊ณ„์† ๊ธฐ๋ก(๋‚ด๊ฐ€ ํ•œ ํ–‰๋™์„ ์ผ๊ธฐ์žฅ์— ๊ณ„์† ์ ๋Š”)ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

SET user:1 ์ฒ ์ˆ˜
ZINCRBY popular:keywords 1 Redis

์œ„์˜ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์„ ๊ธฐ๋กํ•ด๋‘”๋‹ค.
Reids๊ฐ€ ์žฌ์‹œ์ž‘๋˜๋ฉด ์ด ๋ช…๋ น๋“ค์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค.

  • ์žฅ์ 
    • RDB๋ณด๋‹ค ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ์ ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 
    • ํŒŒ์ผ์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณต๊ตฌ ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿผ RDB์—์„œ 5๋ถ„๋ง๊ณ  1๋ถ„์ด๋‚˜ 30์ดˆ๋กœ ์งง๊ฒŒ ์žก์œผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

5๋ถ„๋งˆ๋‹ค ์ €์žฅ โ†’ ์ตœ๋Œ€ ์•ฝ 5๋ถ„ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ
1๋ถ„๋งˆ๋‹ค ์ €์žฅ โ†’ ์ตœ๋Œ€ ์•ฝ 1๋ถ„ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ
30์ดˆ๋งˆ๋‹ค ์ €์žฅ โ†’ ์ตœ๋Œ€ ์•ฝ 30์ดˆ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์œ ์‹ค ๊ฐ€๋Šฅ ์‹œ๊ฐ„์€ ์ค„์–ด๋“ค์ง€๋งŒ ๊ณต์งœ๊ฐ€ ์•„๋‹ˆ๋‹ค. RDB ์Šค๋ƒ…์ƒท์„ ์ž์ฃผ ๋งŒ๋“ค๋ฉด Redis๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ์•„์ง„๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•ด์•ผ ํ•จ
  • ํŒŒ์ผ ์ƒ์„ฑ ๋น„์šฉ ๋ฐœ์ƒ
  • CPU ์‚ฌ์šฉ
  • ๋””์Šคํฌ I/O ์ฆ๊ฐ€
  • Redis ์„œ๋ฒ„ ๋ถ€๋‹ด ์ฆ๊ฐ€

โ†’ ์ด ๋ง์€ ๋น„์œ ํ•˜์ž๋ฉด 5๋ถ„๋งˆ๋‹ค ๊ฒŒ์ž„ ์ €์žฅํ•˜๋ฉด ์ €์žฅ ๋ถ€๋‹ด์€ ์ ์ง€๋งŒ, ํŠ•๊ธฐ๋ฉด ์ตœ๋Œ€ 5๋ถ„ ํ”Œ๋ ˆ์ด๊ฐ€ ๋‚ ์•„๊ฐ
30์ดˆ๋งˆ๋‹ค ๊ฒŒ์ž„์„ ์ €์žฅํ•˜๋ฉด ๋‚ ์•„๊ฐ€๋Š” ์–‘์€ ์ ์ง€๋งŒ ๋Œ€์‹  ์ €์žฅ์ด ๋„ˆ๋ฌด ์ž์ฃผ ์ผ์–ด๋‚˜์„œ ๊ฒŒ์ž„์ด ๋ฒ„๋ฒ…์ผ ์ˆ˜ ์žˆ์Œ

Redis๋„ ๋น„์Šทํ•˜๋‹ค.
๊ทธ๋ž˜์„œ RDB ์ €์žฅ ์ฃผ๊ธฐ๋ฅผ ๋„ˆ๋ฌด ์งง๊ฒŒ ์žก์œผ๋ฉด ์„ฑ๋Šฅ์— ๋ถ€๋‹ด์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ณ , ๋””์Šคํฌ ์“ฐ๊ธฐ๊ฐ€ ๋งŽ์ด์ง€๊ณ , ์Šค๋ƒ…์ƒท ์ƒ์„ฑ ๋น„์šฉ์ด ๋Š˜์–ด๋‚œ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒ€์ƒ‰์„ ํ•ด๋ดค์„ ๋•Œ ์‹ค๋ฌด์—์„œ๋Š” ๋ณดํ†ต ์ด๋ ‡๊ฒŒ ๊ณ ๋ฏผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

  • ์ด Redis ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ธˆ ์œ ์‹ค๋ผ๋„ ๋˜๋Š”๊ฐ€?
  • ์ ˆ๋Œ€ ์œ ์‹ค๋˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€?
  • Redis๋ฅผ ์บ์‹œ๋กœ ์“ฐ๋Š”๊ฐ€?
  • ์›๋ณธ ์ €์žฅ์†Œ๋กœ ์“ฐ๋Š”๊ฐ€?
  • ์„ฑ๋Šฅ์ด ๋” ์ค‘์š”ํ•œ๊ฐ€?
  • ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ์ค‘์š”ํ•œ๊ฐ€?

์—ฌ๊ธฐ์„œ ์บ์‹œ ์šฉ๋„๋ผ๋ฉด ์กฐ๊ธˆ ์œ ์‹ค๋ผ๋„ ๊ดœ์ฐฎ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์บ์‹œ
  • ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด
  • ๋žญํ‚น
  • ์ž„์‹œ ๋ฐ์ดํ„ฐ
    ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋Š” Redis๊ฐ€ ๋‚ ์•„๊ฐ€๋„ ๋‹ค์‹œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ์ง€๋งŒ ๋งŒ์•ฝ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ผ๋ฉด RDB๋งŒ์œผ๋กœ๋„ ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿด๋•Œ๋Š” AOF๋ฅผ ๊ฐ™์ด ๊ณ ๋ คํ•œ๋‹ค.
AOF ์„ค์ •์—์„œ ๋ฐ‘์˜ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

appendfsync everysec
์˜๋ฏธ๋Š” ๋Œ€๋žต ์“ฐ๊ธฐ ๋ช…๋ น ๋กœ๊ทธ๋ฅผ 1์ดˆ๋งˆ๋‹ค ๋””์Šคํฌ์— ๋ฐ˜์˜์ด๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด

  • RDB ์ €์žฅ ์ฃผ๊ธฐ๋ฅผ ์งง๊ฒŒ ํ•˜๋ฉด ์œ ์‹ค ๊ฐ€๋Šฅ ์‹œ๊ฐ„์„ ์ค„์–ด๋“ ๋‹ค.
  • ํ•˜์ง€๋งŒ ์Šค๋ƒ…์ƒท ์ƒ์„ฑ ๋น„์šฉ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ถ€๋‹ด์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ผ๋ฉด RDB ์ฃผ๊ธฐ๋ฅผ ๋ฌด์ž‘์ • ์ค„์ด๊ธฐ๋ณด๋‹ค AOF๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•œ๋‹ค.
  • ์บ์‹œ ์šฉ๋„๋ผ๋ฉด ์•ฝ๊ฐ„์˜ ์œ ์‹ค์€ ํ—ˆ์šฉํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์šฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿผ Redis๋Š” DB๋ž‘ ๊ฐ™์€ ๊ฑธ๊นŒ?

Redis๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ, MySQL ๊ฐ™์€ RDBMS์™€ ๋ชฉ์ ์ด ๋‹ค๋ฅด๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

MySQL ๊ฐ™์€ RDBMS๋Š” ๊ด€๊ณ„ํ˜• DB์ด๋‹ค.
๊ด€๊ณ„ํ˜•์ด๋ผ๋Š” ๋ง์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ์˜๋ฏธ์ด๋‹ค.

idemailname
1abc@test.com์ฒ ์ˆ˜
2abc2@test.com์˜ํฌ

ํ–‰๊ณผ ์—ด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ์˜ ์žฅ์ ์œผ๋กœ๋Š”

  • ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ธฐ ์ข‹๋‹ค.
  • ๋ณต์žกํ•œ ๊ฒ€์ƒ‰๊ณผ JOIN์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ •ํ•ฉ์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์ข‹๋‹ค.

Redis๋Š” ๋ณดํ†ต Key-Value ์ €์žฅ์†Œ์ด๋‹ค.
Key-Valuee๋Š” ์ด๋ฆ„ํ‘œ์™€ ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

key :  user:1:name
value : ์ฒ ์ˆ˜
๋˜๋Š”
key : popular:keywords
value : ๊ฒ€์ƒ‰์–ด ์ˆœ์œ„ ๋ฐ์ดํ„ฐ

Redis๋Š” ๋ณต์žกํ•œ JOIN๋ณด๋‹ค๋Š” ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด๋Š” ๋ฐ ๊ฐ•ํ•˜๋‹ค.


key-Value๋ž€?

key-value๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

  • key : ์ด๋ฆ„ํ‘œ
  • value = ์‹ค์ œ ๊ฐ’

์—ฌ๊ธฐ์„œ ์‰ฝ๊ฒŒ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด

  • ์‚ฌ๋ฌผํ•จ ๋ฒˆํ˜ธ 101๋ฒˆ โ†’ ์ฒ ์ˆ˜ ๊ฐ€๋ฐฉ
  • ์‚ฌ๋ฌผํ•จ ๋ฒˆํ˜ธ 102๋ฒˆ โ†’ ์˜ํฌ ๊ฐ€๋ฐฉ

โ†’ key : ์‚ฌ๋ฌผํ•จ ๋ฒˆํ˜ธ / value : ๊ฐ€๋ฐฉ
Redis๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • user:1:nickname โ†’ ์ฒ ์ˆ˜
  • product:100:name โ†’ ์•„๋ฉ”๋ฆฌ์นด๋…ธ
  • popular:keywords โ†’ ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ๋ชฉ๋ก

๊ทธ๋ž˜์„œ Redis์—์„œ key๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.

์ข‹์€ key ์˜ˆ์‹œ
user:1
product:100
search:result:coffee:page:1
popular:keywords:daily:2026-07-06

โ†’ :๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜๋ฏธ๋ฅผ ๋‚˜๋ˆ„๋ฉด ์ฝ๊ธฐ ์ข‹๋‹ค.

  • ์ข‹์€ key ์„ค๊ณ„ ๊ธฐ์ค€
    • ๋ฌด์Šจ ๋ฐ์ดํ„ฐ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์•„์•ผ ํ•œ๋‹ค.
    • ๋„ˆ๋ฌด ๊ธธ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
    • ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ์žˆ๋‹ค๋ฉด key์— ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ธฐ๊ฐ„ ๋ฐ์ดํ„ฐ๋ผ๋ฉด ๋‚ ์งœ๋ฅผ ํฌํ•จํ•˜๋ฉด ์ข‹๋‹ค.

Redis๋Š” ์–ด๋””์— ์‚ฌ์šฉํ• ๊นŒ?

Redis์—๋Š” ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉ์ด ๋˜๋Š”๋ฐ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ์šฉ์ฒ˜๋Š”

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

์บ์‹œ

์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Redis์— ์ €์žฅํ•ด๋‘๊ณ  ๋น ๋ฅด๊ฒŒ ๊บผ๋‚ธ๋‹ค.

  • ์ƒํ’ˆ ๋ชฉ๋ก
  • ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ
  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด

๊ฒ€์ƒ‰์–ด๊ฐ€ ๊ฒ€์ƒ‰๋  ๋•Œ๋งˆ๋‹ค ์ ์ˆ˜๋ฅผ ์˜ฌ๋ฆฌ๊ณ , ์ ์ˆ˜๊ฐ€ ๋†’์€ ๊ฒ€์ƒ‰์–ด๋ฅผ ์กฐํšŒํ•œ๋‹ค.

  • 1์œ„ Redis
  • 2์œ„ Spring
  • 3์œ„ JPA

์ด๋•Œ Redis์˜ ZSet์ด ์œ ์šฉํ•˜๋‹ค.

๋žญํ‚น

๊ฒŒ์ž„ ์ ์ˆ˜, ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š” ์ˆœ์œ„, ์ธ๊ธฐ ์ƒํ’ˆ ์ˆœ์œ„ ๋“ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ์ฒ ์ˆ˜ 980์ 
  • ์˜ํฌ 850์ 
  • ๋ฏผ์ˆ˜ 770์ 

๋ถ„์‚ฐ๋ฝ

์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ์ž‘์—…์„ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ์‹œ

  • ์„ ์ฐฉ์ˆœ ์ฟ ํฐ ๋ฐœ๊ธ‰
  • ์žฌ๊ณ  ์ฐจ๊ฐ
  • ์ค‘๋ณต ๊ฒฐ์ œ ๋ฐฉ์ง€

Redis Pub/Sub

Redis๋Š” Pub/Sub ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.


Redis ์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

Redis๋Š” ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด๋งŒ ์ €์žฅํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š”๋ฐ ์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๋ชจ์–‘์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
Redis์˜ ๋Œ€ํ‘œ ๊ตฌ์กฐ์ž๋ฃŒ๋Š” Sttring, List, Set, Hash, Sorted Set, Zset๊ฐ€ ์žˆ๋‹ค.


Redis String

String์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
ํ•˜๋‚˜์˜ key์— ํ•˜๋‚˜์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

key: user:1:name
value : ์ฒ ์ˆ˜

// ์˜ˆ์‹œ
SET user:1:name ์ฒ ์ˆ˜
GET user:2:name 

์ด ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐ„๋‹จํ•œ ๊ฐ’ ์ €์žฅ, ์บ์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์กฐํšŒ์ˆ˜ ์ˆซ์ž ์ €์žฅ, ํ† ํฐ ์ €์žฅ, ์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

// ์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€
INCR post:1:viewCount

์—ฌ๊ธฐ์„œ INCR ๋ช…๋ น์–ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?

  • ์ €์žฅ๋œ ์ˆซ์ž๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
Redis-INCR ๊ณต์‹๋ฌธ์„œ

Redis List

List๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ชฉ๋ก์ด๊ณ  ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๊ณ  FIFO(First-In_First-Out) ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

[๋ฉ”์‹œ์ง€1, ๋ฉ”์‹œ์ง€2, ๋ฉ”์‹œ์ง€3]

List๋Š” ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ, ์•Œ๋ฆผ ๋ชฉ๋ก, ๊ฐ„๋‹จํ•œ ํ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

// ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ
recent:user:1
โ†’ [์ƒํ’ˆ3, ์ƒํ’ˆ2, ์ƒํ’ˆ1]

Redis Set

Set์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ง‘ํ•ฉ์ด๋‹ค.
์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ถœ์„ ์ฒดํฌ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์˜ค๋Š˜ ์ถœ์„ํ•œ ํ•™์ƒ ๋ชฉ๋ก
์ฒ ์ˆ˜
์˜ํฌ
๊ธธ๋™
// ์ฒ ์ˆ˜๊ฐ€ ๋‘ ๋ฒˆ ์ถœ์„ํ•ด๋„ ํ•œ ๋ฒˆ๋งŒ ์ €์žฅ๋œ๋‹ค.

์ด ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ข‹์•„์š” ๋ˆ„๋ฅธ ์‚ฌ์šฉ์ž ๋ชฉ๋ก, ์ค‘๋ณต ์ œ๊ฑฐ, ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ์ฐธ์—ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

SADD post:1:likes user:1
SADD post:1:likes user:2

Redis Hash

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

Reids Sorted Set, ZSet์ด๋ž€?

ZSet์€ Sorted Set์˜ ์ค„์ž„๋ง์ด๋‹ค.
Sorted๋Š” ์ •๋ ฌ๋œ, Set์€ ์ค‘๋ณต ์—†๋Š” ์ง‘ํ•ฉ์ด๋ผ๋Š” ๋œป์ด๋‹ค.
๊ทธ๋ž˜์„œ ZSet์€ "์ค‘๋ณต ์—†๋Š” ๊ฐ’๋“ค์„ ์ ์ˆ˜ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์„œ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ"์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํŠน์ง•์€ ๊ฐ ๊ฐ’๋งˆ๋‹ค score, ์ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฑฐ๋‹ค.

๊ฒ€์ƒ‰์–ด: Redis, ์ ์ˆ˜: 10
๊ฒ€์ƒ‰์–ด: Spring, ์ ์ˆ˜: 7
๊ฒ€์ƒ‰์–ด: JPA, ์ ์ˆ˜: 3

ZSet์€ ์ด ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Š๊ฐ ์ฐจ์ด์ 

โ†’ ๐Ÿ’กํ•ต์‹ฌ ์ฐจ์ด์  ์š”์•ฝ


๐Ÿ”์ถ”๊ฐ€๋กœ ์•Œ์•„๋ณด๊ธฐ

Q.

**A.


๐Ÿ“ ์˜ค๋Š˜์˜ ๋ณต์Šต ๋ฉ”๋ชจ

  • ๐Ÿ“š Redis๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ๊ผญ ์•Œ์•„์•ผ ํ•  ๊ฐœ๋… ์ •๋ฆฌ

    • ๋ฉ”๋ชจ๋ฆฌ : Redis๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
    • key : ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ด๋ฆ„ํ‘œ์ด๋‹ค.
    • value : key์— ์ €์žฅ๋œ ์‹ค์ œ ๋ฐ์ดํ„ฐ์ด๋‹ค.
    • TTL : ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ด์•„์žˆ๋Š” ์‹œ๊ฐ„์ด๋‹ค.
    • ์ž๋ฃŒ๊ตฌ์กฐ : ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๋ชจ์–‘์ด๋‹ค.
    • ZSet : ์ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ •๋ ฌ๋œ ์ง‘ํ•ฉ์ด๋‹ค.

  • ๐Ÿš€ ์ถ”๊ฐ€ ๋ณต์Šตํ•  ๋‚ด์šฉ ์ ๊ธฐ


์ถœ์ฒ˜

๋‚ด๋ฐฐ์บ  ๊ฐ•์˜ ์ž๋ฃŒ

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