-
Notifications
You must be signed in to change notification settings - Fork 0
๐ดโโ๏ธRedis๋ก ๊ฒ์๋ฐฉ ๊ด๋ฆฌ ์ต์ ํํ๊ธฐ
๊ฒ์๋ฐฉ ๊ด๋ฆฌ๋ ๋ฐ์ดํฐ์ ์ ์ฅ, ๊ฒ์, ์ ๋ ฌ, ์์ ์์ ์ด ๋น๋ฒํ๊ฒ ์ด๋ฃจ์ด์ง๋ ์์ญ์ ๋๋ค. ๊ธฐ์กด ๋ฐฉ์์ ์ฑ๋ฅ ์ ํ์ ๋ณต์กํ ์ ์ง๋ณด์ ๋ฌธ์ ๋ฅผ ์ด๋ํ์ง๋ง, Redis๋ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ Redis๋ฅผ ํ์ฉํ์ฌ ๊ฒ์๋ฐฉ ๋ฐ์ดํฐ๋ฅผ ์ต์ ํํ ๊ณผ์ ๊ณผ ์ฑ๊ณผ๋ฅผ ๊ณต์ ํฉ๋๋ค. Redis์ Hash, Sorted Set, List ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ํจ์จ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์์ ํ๋ณดํ ์ฌ๋ก๋ฅผ ๋ค๋ฃน๋๋ค.
-
๋ฐ์ดํฐ ์ ์ฅ: JSON ๋ฌธ์์ด๋ก Redis์
SET
์๋ฃ๊ตฌ์กฐ์ ์ ์ฅ. - ๊ฒ์๊ณผ ์ ๋ ฌ: ๋ชจ๋ ๋ฐ์ดํฐ์ ๊ฒ์, ์ ๋ ฌ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ์ํ.
-
ํจ์จ์ฑ ๋ถ์กฑ
- ๋ฐฉ ์ด๋ฆ ๊ฒ์์ด๋ ํน์ ์กฐ๊ฑด์ ๋ฐฉ์ ์ฐพ๊ธฐ ์ํด ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ํ.
- Redis์ ๊ณ ์ ํค-๊ฐ ๊ฒ์ ์ด์ ์ ํ์ฉํ์ง ๋ชปํจ.
-
๋์์ฑ ๊ด๋ฆฌ ์ด๋ ค์
- JSON ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๋ฉด ์ ์ฒด ๊ฐ์ฒด๋ฅผ ์ฝ๊ณ , ์์ ํ ๋ค์ ์ ์ฅํด์ผ ํ์ต๋๋ค.
- ๋ค์์ ์ฌ์ฉ์๊ฐ ๋์ ์์ ์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์.
-
๋ณต์กํ ์ฝ๋
- JSON ๋ฌธ์์ด ํ์ฑ ๋ฐ ์ฌ์ ์ฅ ๊ณผ์ ์ด ๋ณต์กํ๊ณ , ์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ.
Redis์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์์ ์ฑ๋ฅ์ ๋ํญ ๊ฐ์ ํ์ต๋๋ค.
Redis์ Hash
์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ๊ฒ์๋ฐฉ์ ์ฃผ์ ๋ฐ์ดํฐ๋ฅผ ํ๋-๊ฐ ์์ผ๋ก ์ ์ฅ.
Key: room:{roomId}
Value: {
"roomId": "room1",
"roomName": "๊ฒ์๋ฐฉ123",
"hostNickname": "host1",
"players": "[{\\"playerNickname\\":\\"player1\\",\\"isReady\\":true,\\"isMuted\\":false}]",
"status": "waiting"
}
- ํน์ ํ๋๋ง ์ฝ๊ฑฐ๋ ์์ ๊ฐ๋ฅ (
O(1)
). - JSON ํ์ฑ ๋ฐ ์ง๋ ฌํ ๊ณผ์ ์ด ๋ถํ์.
Redis์ Sorted Set
์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ๋ฐฉ ์ด๋ฆ์ ๊ฒ์ํ๊ณ Auto Complete๋ฅผ ๊ตฌํ.
Key: room_names
Value: [
{score: 0, value: "๊ฒ์๋ฐฉ123"},
{score: 0, value: "๊ฒ์ํํฐ๋ฐฉ"},
{score: 0, value: "ํด๋ก๋ฐ์ ๋ฐฉ"}
]
ZRANGEBYLEX
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ํค์๋๋ก ์์ํ๋ ๋ฐฉ ์ด๋ฆ ๊ฒ์.
ZRANGEBYLEX room_names [๊ฒ์] [๊ฒ์\\xff]
- ๊ฒ์ ์๋ O(log(N)).
- Auto Complete์ ๊ฐ์ ์ฌ์ฉ์ ์นํ์ ๊ธฐ๋ฅ ์ง์.
Redis์ List
์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋ฐฉ ์์๋ฅผ ๊ด๋ฆฌ.
Key: recent_rooms
Value: ["room1", "room2", "room3"]
- ์๋ก์ด ๋ฐฉ ์์ฑ ์
RPUSH
๋กroomId
๋ฅผ ๋ฆฌ์คํธ ๋งจ ๋ค์ ์ถ๊ฐ. -
LRANGE
๋ช ๋ น์ด๋ก ์์ฑ๋ ์์๋๋ก ๋ฐฉ ๋ชฉ๋ก ์กฐํ.
RPUSH recent_rooms room1
RPUSH recent_rooms room2
LRANGE recent_rooms 0 10 # ์ต๊ทผ ์์ฑ๋ 10๊ฐ์ ๋ฐฉ ์กฐํ
- ์์ฑ ์์ ๊ธฐ๋ฐ ์ ๋ ฌ ๋ก์ง ์ ๊ฑฐ.
- ์์ฑ๋ ์์๋๋ก ๋ฐฉ ๋ชฉ๋ก์ ๋น ๋ฅด๊ฒ ์กฐํ ๊ฐ๋ฅ.
- Hash: ํ๋ ๋จ์ ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ์์ ์ผ๋ก ํจ์จ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ.
- Sorted Set: ๋ฐฉ ์ด๋ฆ ๊ฒ์ ์๋์ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ .
- List: ๋ฐฉ ์์ฑ ์์ ๊ด๋ฆฌ์ ๋จ์ํ์ ์ฑ๋ฅ ๊ฐ์ .
Redis๋ฅผ ํ์ฉํ ์ต์ ํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ๋ํญ ๊ฐ์ ํ๊ณ ์๋ฒ ๋ถํ๋ฅผ ์ค์์ต๋๋ค. ํนํ ์ค์๊ฐ ๋ฐ์์ฑ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ Redis๋ ์ต์ ์ ์ ํ์์ ์ฆ๋ช ํ์ต๋๋ค.
Redis ์ต์ ํ์ ๋ํด ๋ ๊ถ๊ธํ ์ ์ด๋ ์๊ฒฌ์ด ์์ผ์๋ค๋ฉด ๊ณต์ ํด์ฃผ์ธ์! ๐
๐ค Ground Rule
๐ Convention
๐ณ Git Branch ์ ๋ต
๐ ๏ธ AGT - Automatic Git & Github Tool
๐ WebRTC Mesh โ ํธ๋ํฝ ๊ณ์ฐ
๐ข WebRTC Mesh - ํ๋ํ ์ฌ์
๐ฌ WebRTC๋ฅผ ์์๋ณด์
๐ฎ SSE(Server Sent Events)
๐ SSE Pagination
โณ Socket ํต์ ์์ ๋น๋๊ธฐ ์์
์์ ๋ณด์ฅ ๋ฐฉ๋ฒ
๐ก Redis pub/sub๋ฅผ ํ์ฉํ SSE ์ ์ฉ๊ธฐ
๐๏ธ Naver Cloud Platform์ ํ์ฉํ ๋ฐฐํฌ ์ ๋ต
โ๏ธ๐ ๋ถํ ํ
์คํธ: ๋จ์ผ ์ธ์คํด์ค VS NKS
๐ดโโ๏ธ Redis๋ก ๊ฒ์๋ฐฉ ๊ด๋ฆฌ ์ต์ ํ: ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฑ๋ฅ ๊ฐ์
๐ ํ์๋ก ์บ๋ฆฐ๋
๐ค ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ ํ
ํ๋ฆฟ
๐ค ํ๊ณ ํ
ํ๋ฆฟ
0๏ธโฃ 0์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
1๏ธโฃ 1์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
2๏ธโฃ 2์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
3๏ธโฃ 3์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
4๏ธโฃ 4์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
0๏ธโฃ 0์ฃผ์ฐจ ๋ฐํ
1๏ธโฃ 1์ฃผ์ฐจ ๋ฐํ
2๏ธโฃ 2์ฃผ์ฐจ ๋ฐํ
3๏ธโฃ 3์ฃผ์ฐจ ๋ฐํ
4๏ธโฃ 4์ฃผ์ฐจ ๋ฐํ
5๏ธโฃ ์ต์ข
๋ฐํ