ํ์ฌ ์ฌ๋ด์ ๋ค์ํ ์
๋ฌด ์์คํ
์ด 3.0 ํ๊ฒฝ์์ 5.0 ํ๊ฒฝ์ผ๋ก ์ ์ง์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ํนํ ์ผํ๋ชฐ ๋ฐ์ดํฐ ์์ง ์
๋ฌด๋ฅผ ๊ณ ๋ํํ๋ ๊ณผ์ ์์ ์ธ์ฆ ํ ํฐ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๊ฐ์ ํ ์ ์๋ค๋ ์๊ฐ์ ํ๊ณ , ๋ฐฉ์์ ์ ๋ฆฌํ์ฌ ์ ์์๋ฅผ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
์ด๋ฒ ๊ธ์ ๋น์ ์ ๊ฐ ํ์ฅ๋๊ณผ ๋ณธ๋ถ์ฅ๋๊ป ๋๋ ธ๋ ์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๊ตฌ์ฑํ ๊ฒ์
๋๋ค. ์ธ์ฆ ํ ํฐ ์ ์ฅ์๋ฅผ RDB์์ Redis๋ก ์ ํํ๋ ๊ณผ์ ์์์ ๋ฐฐ๊ฒฝ, Redis๋ฅผ ์ ํํ ์ด์ , ์ค์ ์ ์ฉ ์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ, ๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ์ค์ํ ์ค์ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
ํนํ ์ ์ฅ ๊ณต๊ฐ ๊ด์ ์์ Redis ์ ํ์ ์๋นํ ์ฑ๊ณผ๋ฅผ ๋ณด์์ต๋๋ค. ๊ธฐ์กด RDB ๋ฐฉ์์ ๋์ผํ ํ ํฐ์ด 3.0/5.0 ํ
์ด๋ธ์ ์ค๋ณต ์ ์ฅ๋๋ฉฐ ์ค์ง์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐ ํฌ๊ธฐ๊ฐ 5.6KB ์ด์์ ๊ณต๊ฐ์ ์ฐจ์งํ์ง๋ง, Redis ๊ธฐ๋ฐ ๊ตฌ์กฐ์์๋ ๋์ผ ๋ฐ์ดํฐ๋ฅผ ์ฝ 1.5KB๋ก ์ ์ฅํ ์ ์์์ต๋๋ค. ์ฆ, ํตํฉ ์ผํ๋ชฐ ๊ณ์ ๊ธฐ์ค ์ฝ 73%์ ์ ์ฅ ๊ณต๊ฐ ์ ๊ฐ ํจ๊ณผ๋ฅผ ๋ฌ์ฑํ ์ ์์์ผ๋ฉฐ, ์ด ํจ๊ณผ๋ ๊ณ์ ์์ ํ ํฐ ์๊ฐ ๋์ ๋ ์๋ก ๋์ฑ ํฌ๊ฒ ์ฒด๊ฐ๋ฉ๋๋ค.
๐๋ฐฐ๊ฒฝ ์ํฉ
์ผํ๋ชฐ ์ค ์ผ๋ถ๋ ์์ฒด ๋ก๊ทธ์ธ ๋ฐฉ์์ผ๋ก ์ธ์ฆ์ ์ฒ๋ฆฌํ์ง๋ง, ๋ง์ ์๋น์ค๊ฐ OAuth 2.0 ๊ธฐ๋ฐ ์ธ์ฆ/์ธ๊ฐ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
OAuth ๊ธฐ๋ฐ ์๋น์ค๋ ์ก์ธ์ค ํ ํฐ(access token) ๊ณผ ๋ฆฌํ๋ ์ ํ ํฐ(refresh token) ์ ์ฃผ์ ์ธ์ฆ ์๋จ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ํ ํฐ์ ์์ธํ ๋์ ์๋ฆฌ๋ OAuth ํ๋กํ ์ฝ ์ค๋ช
์ ์๋ ๊ฒ์๊ธ์ ์ฐธ๊ณ ํ์๋ฉด ๋๊ณ , ์ด๋ฒ ๊ธ์์ ๋ฐ๋ก ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค.
https://programmer-may.tistory.com/261
OAuth 2.0 ์ดํด์ TikTok Shop API ์ฐ๋ํ๊ธฐ
์ฌ๋ด์์ ํตํฉ ์ผํ๋ชฐ ์ฐ๋์๋น์ค์ ์๋กญ๊ฒ ๋๋จ์ ์์ฅ์ ๊ฒจ๋ฅํ์ฌ, TikTok Shop ์คํ๋ง์ผ ์ฐ๋์ ๋ด๋นํ๊ฒ ๋์ต๋๋ค. TikTok Shop API ๋ฅผ ์ฐ๋ํ๋ฉด์ TikTok Shop ์์ ์ธ์ฆ์ธ๊ฐ๋ฅผ OAuth 2.0 ๋ฐฉ์์ ์ฌ์ฉํ
programmer-may.tistory.com
๊ทธ๋์ ์ฌ๋ด ์๋น์ค์์๋ ์ธ์ฆ ํ ํฐ์ RDB ๊ธฐ๋ฐ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์์์ต๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก๋ 3.0 ๋ฒ์ ์ผ๋ก MariaDB ํ
์ด๋ธ์ 5.0 ๋ฒ์ ์ผ๋ก PostreSQL ํ
์ด๋ธ์ ์ ์ฅํ๊ณ ์์ต๋๋ค.
์ ๋ ์ด ํ ํฐ ์ ๋ณด๋ฅผ RDB๊ฐ ์๋ Redis์ ์บ์ฑํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ์ ์๋๋ ธ์ต๋๋ค.
์ธ์
์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด Redis๋ฅผ ์ธ์
์คํ ๋ฆฌ์ง๋ก ํ์ฉํ๋ฏ, OAuth ํ ํฐ ์ญ์ Redis๋ฅผ ํ ํฐ ์คํ ์ด๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๐ชง์ ์ ๊ทผ๊ฑฐ
1๏ธโฃ ๋ฐ์ดํฐ ์์ฑ์ด ๋ค๋ฆ ๋๋ค — ๋น์ฆ๋์ค ์ ํ ๋ฐ์ดํฐ vs ์ธ์ฆ ํ ํฐ ๋ฐ์ดํฐ
PostgreSQL(RDB)์ ์ ์ฅํ๋ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ ์ ํ์ฑ ๋ฐ์ดํฐ์
๋๋ค.
์ด ๋ฐ์ดํฐ๋ ๊ฐ๋ ฅํ ACID ํน์ฑ, ํธ๋์ญ์
๋ฌด๊ฒฐ์ฑ, ์ด๋ ฅ ๊ด๋ฆฌ๊ฐ ์ค์ํฉ๋๋ค.
RDB๋ ์ ํฉ์ฑ ๋ณด์ฅ๊ณผ ์ํฐํ๋ผ์ด์ฆ ๋ฐ์ดํฐ์ ๋ณด์กด์ ์ํด ์ ํฉํฉ๋๋ค.
ํ์ง๋ง ํ ํฐ ๋ฐ์ดํฐ์ ํน์ฑ์ ์์ ํ ๋ค๋ฆ
๋๋ค.
- ํ ํฐ์ ๋ช
ํํ ๋ง๋ฃ ๊ธฐํ(expire) ์ ๊ฐ์ต๋๋ค.
→ ์ผ์ ์์ ์ด ์ง๋๋ฉด ๊ทธ ์์ฒด๋ก ๋ฌด์๋ฏธํ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋๋ค. - ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์กฐ์ธํ๊ฑฐ๋ ์ง๊ณํ๊ฑฐ๋, ๋ณต์กํ ์ฟผ๋ฆฌ๋ก ์กฐํํด์ผ ํ ์ํฉ์ด ์์ต๋๋ค.
- ์ฌ์ง์ด ๋ฐ์ดํฐ ์์ฒด๋ณด๋ค “๋ง๋ฃ ์ฌ๋ถ๊ฐ ๋ ์ค์ํ ๋ฐ์ดํฐ” ์ ๋๋ค.
์ฆ, ์๊ตฌ ๋ณด์กด๊ณผ ๊ด๊ณ ์ ํฉ์ฑ์ด ์ค์ํ RDB๊ฐ ์๋, ํ๋ฐ์ฑ ์บ์ ์ ์ฅ์(volatile key-value storage) ์ ์ ํฉํ ๋ฐ์ดํฐ์ ๋๋ค.
2๏ธโฃ๋ฐ์ดํฐ TTL ๊ด์ — “๊ฐฑ์ ๋๋ ์ ๋ณด” vs “๋์ ๋๋ ๋ ์ฝ๋”
ํ์ฌ ํ ํฐ ๋ฐ์ดํฐ๋ ํ์ฌ ์ฝ๋ + ๋ง์ผ ์ฝ๋ ๊ธฐ์ค์ผ๋ก ์ ์ฅํฉ๋๋ค.
๊ฐฑ์ ์์๋ ๊ธฐ์กด ์ปฌ๋ผ ๊ฐ์ UPDATEํ๋ ๋ฐฉ์์
๋๋ค.
์์)
- ๊ฐฑ์ ์
| ํ์ฌ์ฝ๋ | ๋ง์ผ์ฝ๋ | Access ํ ํฐ | Access Token ๋ง๋ฃ์๊ฐ | Refresh ํ ํฐ | Refresh Token ๋ง๋ฃ์๊ฐ |
| 10000 | 10 | AAA | 10000 | 123AAA | 50000 |
- ๊ฐฑ์ ์ดํ
| ํ์ฌ์ฝ๋ | ๋ง์ผ์ฝ๋ | Access ํ ํฐ | Access Token ๋ง๋ฃ์๊ฐ | Refresh ํ ํฐ | Refresh Token ๋ง๋ฃ์๊ฐ |
| 10000 | 10 | BBB | 10000 | 456BBB | 50000 |
์ด ํ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ํ ์ด๋ธ์ ํ์ฌ ํํด, ๋ง์ผ ์ฌ์ฉ ์ค์ง, ํ ํฐ ๋ง๋ฃ ๋ฑ์ ์กฐ๊ฑด์ด ๋ฐ์ํด๋ ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ๋จ์ต๋๋ค. ๊ฒฐ๊ตญ, ๋ฒ๋ ค์ง ํ ํฐ ๋ฐ์ดํฐ๋ ์๋ ํ๊ธฐ๋์ง ์๊ณ ์๊ตฌ์ ์ผ๋ก ๋์ ๋ฉ๋๋ค.
๋ ๋์๊ฐ 3.0๊ณผ 5.0 ์๋น์ค๊ฐ ๋์์ ์ด์๋๋ ํ์ฌ ๊ตฌ์กฐ์์๋ ๋์ผํ ์ธ์ฆ ํ ํฐ ๋ฐ์ดํฐ๊ฐ ๋ ๊ฐ์ ํ ์ด๋ธ์ ์ค๋ณต ์ ์ฅ๋๋ฉฐ ๋ถํ์ํ๊ฒ 2๋ฐฐ๋ก ์ถ์ ๋๋ ๋ฌธ์ ๊น์ง ๋ฐ์ํฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ค์ผ์ค๋ฌ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ก์ ๋ง๋ค์ด ์ ๋ฆฌํด์ผ ํ๋๋ฐ, ์ด๋ ๋ถํ์ํ ์ด์ ๋ถ๋ด์ด ๋์ด๋๋ ๋ฐฉ์์
๋๋ค.
ํ์ง๋ง Redis๋ TTL์ ๊ธฐ๋ฐ์ผ๋ก ํค ๋ง๋ฃ๋ฅผ ์ค์ค๋ก ์ฒ๋ฆฌํฉ๋๋ค.
ํค์ expireIn์ ์ง์ ํ๋ ์๊ฐ, ๋ง๋ฃ ๊ด๋ฆฌ ์ฑ
์์ ๊ฐ๋ฐ์๊ฐ ์๋ Redis๊ฐ ๋งก๊ฒ ๋ฉ๋๋ค.
์ด ๋ฐฉ์์
- ๋ถํ์ํ ๋ฐ์ดํฐ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ ๊ฑฐ๋๋ฉฐ
- ์ ์ฅ ๊ณต๊ฐ์ ๋ญ๋นํ์ง ์๊ณ
- ์ด์์๊ฐ ๋ณ๋๋ก ์ ๋ฆฌ ์์ ์ ํ์ง ์์๋ ๋ฉ๋๋ค.
3๏ธโฃ ์กฐํ ์ฑ๋ฅ ์ฐจ์ด
ํต์ฌ ์ด์ ๋ ์๋์ง๋ง, ์กฐํ ์๋ ๋ํ Redis ๋ฐฉ์์ ์ฅ์ ์ ๋๋ค. RDB ๋ ๋์คํฌ ๊ธฐ๋ฐ ์ ์ฅ์์ง๋ง, ๋ ๋์ค๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์ ์ฅ์์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
- RDB ํ๊ท ์ง์ฐ: ์ ใณ ~ ์์ญ ใณ
- Redis: ใฒ(๋ง์ดํฌ๋ก์ด) ๋จ์ ~ ์ ใณ
ํ ํฐ์ ์์ฒญ๋ง๋ค ๋ฐ๋ณต์ ์ผ๋ก ์กฐํํ๋ ๋ฐ์ดํฐ์ด๋ฏ๋ก,
๋ ๋น ๋ฅธ ์๋ต์ด ๋์ ๋๋ฉด ์ ์ฒด ์์คํ
์ฑ๋ฅ ๊ฐ์ ์ผ๋ก ์ด์ด์ง๋๋ค.
4๏ธโฃ ์ธ์ฆ ํ ํฐ ์กฐํ ๋ฐ ์ฝ์ ๋ก์ง ๊ตฌ์กฐ ํ๋ฆ ๊ฐ์
์ธ๋ถ ์์ง์ฒ(์ผํ๋ชฐ) ๊ณผ ํต์ ํ๋ ์๋ฒ๋ ์คํฌ๋ํ ์๋ฒ์ด๊ณ ์ฌ๋ด์์ ์ด๋ฅผ External ๋จ๊ณ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ธ๋ถ ์๋ฒ์ ํต์ ํ๋ ์๋ฒ๋ ์ฌ๋ด ๋ณด์ ์ ์ฑ ์ RDB ์ ํต์ ์ ๊ธ์งํ๊ณ ์์ด, ์คํฌ๋ํ ์๋ฒ ์ ๊ณผ ํ์ ์ธ์ฆ ํ ํฐ ์กฐํ์ ์ฝ์ ํ๋ ๋ก์ง์ด ์กด์ฌํด์ผ ํฉ๋๋ค.
โ ๊ธฐ์กด ๋ฐฉ์ ํ๋ฆ๋

๊ธฐ์กด ๋ฐฉ์์์๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ๋ก์ง๋๋ฌธ์ ๋ถ๊ธฐ์ ๋ก์ง์ด ์ถ๊ฐ๋๋ฉด์ ์ฝ๋ ๋ณต์ก๋๊ฐ ์ ์ ๋์์ง๋๋ค.
3.0๊ณผ 5.0 ํ๊ฒฝ์ด ๊ณต์กดํ๋ ํ ๊ตฌ์กฐ์์๋ ์ธ์ฆ ํ ํฐ์ด ๊ฐ๊ฐ์ ํ ์ด๋ธ์ ์ค๋ณต ์ ์ฅํด์ผ ํ๋ฉฐ, ๋งค ์์ฒญ๋ง๋ค ๋ฉ์์ง์ ํ ํฐ ๊ฐ์ ํญ์ ํฌํจํด ์ ๋ฌํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ธ์ฆ ๋ฐ์ดํฐ๊ฐ “ํญ์ ํจ๊ป ์์ง์ฌ์ผ ํ๋ ๋ถ์ํ”์ด ๋์ด, ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ๋ถํ์ํ๊ฒ ๋ฐฉ๋ํด์ง๋๋ค.
ํนํ ํตํฉ ์ผํ๋ชฐ ๊ตฌ์กฐ(1๊ฐ ํ๋งค์ ๊ณ์ / N๊ฐ ์คํ๋ง์ผ) ์์๋ ๋ฌธ์ ๋ ๋์ฑ ๋ณต์กํด์ง๋๋ค.
์ฌ์ฉ์๊ฐ ์ฌ์ธ์ฆ์ ์ํํ ๊ฒฝ์ฐ ๊ธฐ์กด์ ์ฐ๊ฒฐํ๋ ์ผ๋ถ ์คํ๋ง์ผ์ ์ ์ธํ๊ณ ์ธ์ฆ์ ์งํํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๊ธฐ์กด ๋ฐ์ดํฐ์ ์๋ก ์ ์ถ๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋น๊ตํด, ๋๋ฝ๋ ์คํ๋ง์ผ์ ํด๋นํ๋ ํ ํฐ ROW๋ฅผ ์ฐพ์, ์ ๊ฑฐํ๋ ๋ณต์กํ ๋ก์ง์ด ์ถ๊ฐ ๋์ด์ผ ํฉ๋๋ค.
- ์์) 1๊ฐ ๊ณ์ / 5๊ฐ ์คํ๋ง์ผ → 1๊ฐ ๊ณ์ 3๊ฐ ์คํ๋ง์ผ (์ด ๋ ๋น ์ง 2๊ฐ์ ์คํ๋ง์ผ ์ธ์ฆ ํ ํฐ ROW๋ฅผ ์ญ์ ํด์ค์ผํจ)
โ Redis ์ธ์ฆ ํ ํฐ ์ ์ฅ์๋ก ์ ํ ํ ํ๋ฆ๋

ํ์ง๋ง Redis๋ฅผ ์ค์ฌ์ผ๋ก ์ธ์ฆ์ ๊ตฌ์กฐํํ๋ฉด, ์ ์ฅ ์์น์ TTL ์ ์ฑ
์ด ๊ณ ์ ๋๋ฉด์ ์ ์ฒด ํ๋ฆ์ด ๋จ์ํด์ง๊ณ ์ ์ง๋ณด์์ฑ์ด ํจ์ฌ ์ข์์ง๋๋ค.
ํ ํฐ์ด “๊ฐ ์๋น์ค์ ํจ๊ป ์ด๋ฆฌ์ ๋ฆฌ ๋ค๊ณ ๋ค๋
์ผ ํ๋ ๋ฐ์ดํฐ”๊ฐ ์๋๋ผ, ํญ์ Redis์๋ง ์กด์ฌํ๋ ์ค์ ์ง์คํ ์์์ด ๋๊ฒ๋ฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ์์๋ ๋ ์ด์ ๋งค ์์ฒญ๋ง๋ค ํ ํฐ ๊ฐ์ ๋ฉ์์ง์ ํ์ ๋ณด๋ด์ง ์์๋ ๋ฉ๋๋ค.
์์ฒญ ๋ฉ์ธ์ง์๋ ํ์ฌ ์ฝ๋, ํตํฉ ์ผํ๋ชฐ ๊ณ์ ์๋ณ์, ์คํ๋ง์ผ ์ฝ๋ ์ ๋์ ์ต์ ์๋ณ ์ ๋ณด๋ง ๋ด๊ณ , ์ค์ ํ ํฐ ์กฐํ๋ ๊ฐ ์๋น์ค๊ฐ Redis์์ ์ง์ ๊ฐ์ ธ์ค๋ ํํ๋ก ๋ฐ๋๋๋ค.
๋ํ RDB ๋ฅผ ์ฌ์ฉํ์ง ์๊ฒ ๋๋ฉด์ ํ ํฐ์ ์ค์ง์ ์ธ ์ ์ฅ ์์น๋ ํญ์ Redis ํ ๊ณณ์ผ๋ก ๊ณ ์ ๋ฉ๋๋ค.
์ค๋ณต ์ ์ฅ(๋ ํ
์ด๋ธ์ ๊ฐ์ ํ ํฐ์ ๋ฃ๋ ๋ฌธ์ )๋ ์ฌ๋ผ์ง๊ณ , “ํ ํฐ์ด ์ด๋์, ์ด๋ค ์คํค๋ง๋ก ์ ์ฅ๋์ด ์๋์ง”๋ฅผ ์ ํ์๊ฐ ์์ต๋๋ค.
์์ ํตํฉ ์ผํ๋ชฐ์ ๊ฒฝ์ฐ(1๊ฐ ํ๋งค์ ๊ณ์ / N๊ฐ ์คํ๋ง์ผ)๋ Redis๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋จ์ํ๊ฒ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
๊ธฐ์กด ๋ฐฉ์์์๋ ์ฌ์ธ์ฆ ์, “์ด๋ฒ์๋ ์ด๋ค ์คํ๋ง์ผ์ด ๋น ์ก๋์ง”๋ฅผ ์ผ์ผ์ด ๋น๊ตํด์ ๋๋ฝ๋ ์คํ๋ง์ผ์ ํด๋นํ๋ ROW๋ฅผ ์ฐพ์ ์ญ์ ํ๋ ๋ถ๊ธฐ ๋ก์ง์ด ํ์ํ์ต๋๋ค.
๋ฐ๋ฉด Redis๋ฅผ ํ ํฐ ์ ์ฅ์๋ก ์ฌ์ฉํ๋ฉด, ํด๋น ํตํฉ ์ผํ๋ชฐ ๊ณ์ ์ ๋ํ Redis ํค(๋๋ ํค ํจํด)๋ฅผ ํ ๋ฒ์ ์ญ์ ํ๊ฑฐ๋ ์ด๊ธฐํํ๊ณ ์๋ก ์ธ์ฆ๋ 3๊ฐ์ ์คํ๋ง์ผ์ ๋ํด์๋ง ํ ํฐ์ ๋ค์ ์ธํ
ํฉ๋๋ค.
“๊ธฐ์กด ์ํ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ ๋ฆฌํ๋” ๋ณต์กํ ๋ถ๊ธฐ ๋์ “ํ์ฌ ์ํ๋ฅผ ๊ทธ๋๋ก ๋ฎ์ด์ฐ๋” ๋ฐฉ์์ด ๋์ฑ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ์ ์ง๋ณด์์ฑ์ด ๋์์ง๋๋ค.
์ฌ๊ธฐ์ TTL๊น์ง ๋ํด์ง๋ฉด, ์ฌ์ฉ์๊ฐ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ์คํ๋ง์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ํ ํฐ ํค ์์ฒด๊ฐ ์๋์ผ๋ก ๋ง๋ฃ·์ญ์ ๋ฉ๋๋ค.
๋ณ๋์ ์ ๋ฆฌ ์ค์ผ์ค๋ฌ ์์ด๋ “์ฌ์ฉํ์ง ์๋ ์ธ์ฆ ์ ๋ณด๋ ์์์ ์ฌ๋ผ์ง๋ ๊ตฌ์กฐ”๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ ๋ฆฌํ์๋ฉด, Redis ๊ธฐ๋ฐ ํ ํฐ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ฉด
- ์ธ์ฆ ์ ๋ณด ์ ๋ฌ ๋ก์ง์ด ๋จ์ํด์ง๊ณ (ํ ํฐ์ ๋ค๊ณ ๋ค๋์ง ์์)
- 3.0 / 5.0 ๊ณต์กด ๊ตฌ์กฐ์์๋ ์ ์ฅ์๊ฐ ํ๋๋ก ์ผ์ํ๋๋ฉฐ
- ํตํฉ ์ผํ๋ชฐ ๊ตฌ์กฐ์์๋ ์ฌ์ธ์ฆ ์ ๋ณต์กํ ๋ถ๊ธฐ/์ญ์ ๋ก์ง ์์ด “์ํ ์ค๋ ์ท ๊ฐฑ์ ” ํจํด์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ณ
- TTL ๋๋ถ์ ์ฌ์ฉ๋์ง ์๋ ํ ํฐ ๋ฐ์ดํฐ๋ ์์ฐ์ค๋ฝ๊ฒ ์ ๋ฆฌ๋ฉ๋๋ค.
์ด๋ฐ ์ ์์ Redis๋ ๋จ์ํ ์บ์๋ฅผ ๋์ด, ์ธ์ฆ ํ ํฐ์ ๊ด๋ฆฌํ๊ธฐ์ ๋ ๋ฐ์ดํฐ ํน์ฑ์ ์ ๋ง๋ ์ ์ฅ์๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๐ค Redis ์ธ์ฆ ํ ํฐ ์ ์ฅ์ ๋์ ์ ์ํด ๊ณ ๋ฏผํ ์
Redis ๊ธฐ๋ฐ ํ ํฐ ๊ด๋ฆฌ๋ ๋ฐ์ดํฐ ํน์ฑ์ ๋ง๋ ์ ๊ทผ ๋ฐฉ์์ด์ง๋ง, ์ค์ ์ฌ๋ด ์ธํ๋ผ ๊ตฌ์กฐ์ ๊ฒฐํฉํด ์ด์ํ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ์ค์ํ ๊ณ ๋ ค ์ง์ ์ด ์กด์ฌํฉ๋๋ค.
์๋๋ Redis๋ฅผ ํ ํฐ ์ ์ฅ์๋ก ํ์ฉํ ๋ ์ ๊ฐ ๊ฒํ ํ๋ ๋ด์ฉ์
๋๋ค.
1๏ธโฃ ๋จ์ผ ์ฅ์ ์ง์ (SPOF)์ ๊ทน๋ณตํ๊ธฐ ์ํ ์ด์ํ ๊ตฌ์ฑ(Replication)๊ณผ ์๋ฒ ์ ์
Redis๋ก ํ ํฐ์ ๊ด๋ฆฌํ๋ ๊ฐ์ฅ ํฐ ์ฅ์ ์ TTL ๊ธฐ๋ฐ ์๋ ๋ง๋ฃ, ์ ์ง์ฐ ์กฐํ, Key-value ๊ธฐ๋ฐ ์ ์ฅ ๊ตฌ์กฐ์ ๋จ์์ฑ์
๋๋ค.
์ธ์ฆ ํ ํฐ์ ์กฐํ ๋น๋๊ฐ ๋๊ณ , TTL์ ๊ฐ๋ ํ๋ฐ์ฑ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ Redis ์๋ฒ์ ํ ํฐ์ ์บ์ฑํด์ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๋ชฉ์ ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
(๋จ, ์ด๋ฅผ ์ํด์๋ Redis ์๋ฒ์ ๋ํ ์ปค๋ฅ์
๋ณด์ ํ์ฉ์ด ์ ํ๋์ด์ผ ํฉ๋๋ค.)
ํ์ง๋ง, ๋จ์ผ Redis ์๋ฒ์๋ง ์์กดํ ๊ฒฝ์ฐ, ์ฅ์ ๋ฐ์ ์ ํ ํฐ ์ ์ฅ์ ์ ์ฒด๊ฐ ํจ๊ป ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์,
๋ฐ๋์ Failover์ ๋ฐฑ์
์ ์ฅ์(Secondary Store) ๋ฅผ ํจ๊ป ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
ํ์ฌ ์ฌ๋ด DB๋ Zone ๋จ์๋ก ๋ถ๋ฆฌ๋์ด ์ด์๋์ง๋ง, Redis๋ Zone ๊ทธ๋ฃน ๋จ์๋ก ๊ณต์ ๋๋ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ Redis ์บ์ ์๋ฒ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น Zone ๊ทธ๋ฃน ์ ์ฒด๊ฐ ์ธ์ฆ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๋จ์ผ ์ฅ์ ์ง์ (SPOF) ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ด๋ฅผ ์ต์ํํ๊ธฐ ์ํด ํ ํฐ ์ ์ฅ์๋ฅผ ์ด์ํ(์์ค – ๋ ํ๋ฆฌ์นด ๊ตฌ์กฐ)ํ์ฌ ์ด์ํ๋ ๋ฐฉ์์ ๊ฒํ ํ์ต๋๋ค.
RDB๋ฅผ ์ ์ธํ๊ณ , ํ์ฌ ์ฌ๋ด์์ ์ฌ์ฉ ์ค์ธ ๋ฐ์ดํฐ ์ ์ฅ์๋ก๋ LevelDB, SSDB, Redis๊ฐ ์์ต๋๋ค.
๊ฐ๊ฐ์ ๋ชจ๋ Key-Value ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ์ง๋ง, ์ ์ฅ ๋งค์ฒด์ ์ฌ์ฉ ๋ฐฉ์์ด ๋ค๋ฆ
๋๋ค.
- Redis: ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ Key-Value ์ ์ฅ์๋ก, ๋น ๋ฅธ ์ฝ๊ธฐ·์ฐ๊ธฐ๊ฐ ๊ฐ์ ์ ๋๋ค.
- LevelDB: ์๋ฒ ๋ก์ปฌ ๋์คํฌ์ ํ์ผ ํํ๋ก ์ ์ฅํ๋ ๋ด์ฅํ Key-Value ์์ง์ ๋๋ค.
- SSDB: Redis ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ง๋ง, ๋์คํฌ ๊ธฐ๋ฐ์ธ Key-Value ์ ์ฅ์์ ๋๋ค.
ํ ํฐ ์ ์ฅ์ ์ํ ์ฃผ ์ ์ฅ์์ ๋ถ ์ ์ฅ์ ์กฐํฉ์ ๋ค์ ์ธ ๊ฐ์ง ์์ผ๋ก ์์ถํ์ต๋๋ค.
1. ์ฃผ ์ ์ฅ์: Global Redis ์๋ฒ
๋ถ ์ ์ฅ์: Local Redis ์๋ฒ

2. ์ฃผ ์ ์ฅ์: ๊ฐ ์กด(Zone)์ Redis ์๋ฒ
๋ถ ์ ์ฅ์: ๊ฐ ์คํฌ๋ํ ์๋ฒ์ LevelDB

3. ์ฃผ ์ ์ฅ์: ๊ฐ ์กด(Zone)์ Redis ์๋ฒ
๋ถ ์ ์ฅ์: X์กด(COMMON ๊ทธ๋ฃน)์ SSDB

๊ฐ ์์ ๋ํด์๋ ์๋ ํ์ ๊ฐ์ด ํต์ ๋ฐฉ์, ์ ์ฅ ๋งค์ฒด, ๋๊ธฐํ ๋ฐฉ์, ์ถ๊ฐ ์์ ํ์ ์ฌ๋ถ ๊ด์ ์์ ์ฅ๋จ์ ์ ์ ๋ฆฌํ์ต๋๋ค.
| ๊ตฌ๋ถ | 1. Global Redis – Local Redis | 2. Redis – LevelDB | 3. Redis – SSDB |
| ํต์ | ๋คํธ์ํฌ ํต์ | X (๋ก์ปฌ ๋์คํฌ file I/O) | ๋คํธ์ํฌ ํต์ |
| ์ ์ฅ ์ฅ์ | ๋ฉ๋ชจ๋ฆฌ | ๋์คํฌ | ๋์คํฌ |
| ๋๊ธฐํ ์ ๋ฌด | ์๋ ๋๊ธฐํ | ๊ฐ ์คํฌ๋ํ ์๋ฒ์ LevelDB์ ๋๊ธฐํ ํ์ | ๊ฐ๊ฐ ์ ์ฅ |
| ์ถ๊ฐ ์์ | LVDB ์ ์ฅ ๋ฐฑ์๋ ๋๊ธฐํ ๋ก์ง ํ์ | X์กด SSDB ์์ฑ ํ์ |
์ ๋ฆฌ๋ ๋ด์ฉ์ ํ ๋๋ก ์ธํ๋ผ ๋ถ๋ฌธ์ฅ๋, ๋ณธ๋ถ์ฅ๋, ํ์ฅ๋๊ณผ ๋ ผ์ํ ๊ฒฐ๊ณผ, ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋ชจ๋ ๊ฐ๋ฅํ Redis ์๋ฒ๋ฅผ ์ฃผ ์ ์ฅ์๋ก ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ต์ข ๊ฒฐ์ ๋์์ต๋๋ค.
ํด๋น ์๋ฒ๋ ๋ด๋ถ์ ์ผ๋ก ๋๊ธฐํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๊ณ ์์ด ๋ณ๋์ ๋ ํ๋ฆฌ์นด ์ค๊ณ๋ฅผ ์ถ๊ฐํ์ง ์์๋ ์ด์์ด ๊ฐ๋ฅํ๋ค๋ ์ ๋ ๊ฒฐ์ ์ ์ค์ํ ๊ทผ๊ฑฐ์์ต๋๋ค.
๋ํ, ์ ๊ฐ ์ฅ์ ๊ฐ๋ฅ์ฑ์ ๋ํด ์ฐ๋ คํ์ผ๋, ์ฌ๋ด์์๋ Redis ๋ฅผ ์ธ์
์คํ ๋ฆฌ์ง์ ๊ธฐ๋ฐ ์ธํ๋ผ๋ก ํ์ฉํ๊ณ ์์ด ๊ฐ์ฅ ๋์ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅ๋ฐ๋ ์ธํ๋ผ ์์์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ค๋ ์ค๋ช
์ ๋ค์์ต๋๋ค. ์ด๋ฌํ ์ด์ ์ฒด๊ณ ๋๋ถ์ Redis ์๋ฒ ์ฅ์ ๋ฆฌ์คํฌ๋ ์ค์ง์ ์ผ๋ก ๋งค์ฐ ๋ฎ๋ค๋ ์ ์ ํ์ธํ ์ ์์๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ํ ํฐ ์ ์ฅ์๋ก ํ์ฉํ๋ ๋ฐ ๋ฌด๋ฆฌ๊ฐ ์๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค.
2๏ธโฃ ์ด์ํ ํ๊ฒฝ์์์ ์ฐ๊ธฐ ์ฐ์ฐ๊ณผ ํธ๋์ญ์ ์ฒ๋ฆฌ
์ ํ์๋ฅผ ํ๊ธฐ ์ , ์ด์ํ ํ๊ฒฝ์ด ๋์
๋๋ค๋ฉด ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ณ ๋ฏผํ์ต๋๋ค.
ํ ํฐ์ TTL ๊ธฐ๋ฐ์ผ๋ก ์๋ฉธํ๋ ํน์ฑ์ด ์์ด ์ง์์ ๊ฐํ ์ผ๊ด์ฑ์ ํ์ ์๊ตฌ์ฌํญ์ด ์๋๋๋ค. ๊ทธ๋ฌ๋ ์์ค – ๋ ํ๋ฆฌ์นด ๊ฐ ์ ํฉ์ฑ์ ๊ฒฐ๊ตญ ์ด์ ์์ ์ฑ๊ณผ ์ง์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ผ๋ฐ ์ ์ธ Replication์ ๋ณต์ ์คํธ๋ฆผ ๊ธฐ๋ฐ์ผ๋ก ์์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉด ์๋์ผ๋ก ๋ ํ๋ฆฌ์นด์๋ ๋๊ธฐํ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ ๊ตฌ์กฐ๊ฐ ์ด ์๋ ๋๊ธฐํ ํํ์ธ์ง, ํน์ ๋
๋ฆฝ์ ์ธ Redis ์ธ์คํด์ค๋ก์ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ์๋์ด ์๋์ง ํ์ธ์ด ํ์ํ์ต๋๋ค.
ํ์๋ผ๋ฉด ๋ ์ ์ฅ์ ๋ชจ๋ ์ง์ SET ํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ ์ด ์์ ๋ถํฐ ์ฐ๊ธฐ ๋จ์๊ฐ ์์์ฑ์ ์๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ์์ค ์ ์ฅ์์๋ ์ ์ฅ์ด ์ฑ๊ณตํ์ง๋ง ๋ ํ๋ฆฌ์นด ์ ์ฅ์ ์ ๋ฐ์ดํธ๊ฐ ์คํจํ๋ ๊ฒฝ์ฐ, ํน์ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด ์ํฉ์ ๋ฐฉ์นํ๋ฉด ์๋ก ๋ค๋ฅธ ์ ์ฅ์ ๊ฐ ํ ํฐ ๊ฐ ๋ถ์ผ์น๋ฅผ ์ด๋ํ๊ณ , ์๋น์ค ๋จ์์๋ “์ด๋ค ๋ ธ๋๊ฐ ์ต์ ๊ฐ์ธ์ง” ํ๋จํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ณด์ ํธ๋์ญ์ (Compensating Transaction) ์ ์ ์ฉํ๊ฑฐ๋, ๋ณ๋์ ์ ํฉ์ฑ ๋ณต๊ตฌ ๋ก์ง์ ์ค๊ณํด์ผ ํฉ๋๋ค.
๋ณด์ ํธ๋์ญ์
์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์ค ์ ์ฅ ์ฑ๊ณต / ๋ ํ๋ฆฌ์นด ์ ์ฅ ์คํจ
→ ์์ค ์ ์ฅ์ ๋กค๋ฐฑํ๊ฑฐ๋, ์คํจํ ๋ ํ๋ฆฌ์นด ์ ์ฅ์ ์ฌ์๋ - ๋ ํ๋ฆฌ์นด ์ ์ฅ ์ฑ๊ณต / ์์ค ์ ์ฅ ์คํจ
→ ๋ ํ๋ฆฌ์นด ์ ์ฅ์ ์ ๊ฑฐํ๊ฑฐ๋, ์์ค ์ ์ฅ์ ๋ค์ ์๋
์ด๋ฌํ ๋ณต๊ตฌ ์ ์ฐจ๋ ๋จ์ํ “์คํจ ์ ์ฌ์๋” ์์ค์ ๋ก์ง์ด ์๋๋ผ, ์ต์ 2๊ฐ์ ์ ์ฅ์๊ฐ ๋์ผํ ์ํ๋ฅผ ๊ฐ์ง ๋๊น์ง ์ฌ์๋๋ฅผ ๋ณด์ฅํ๋ ๋จ์ ์์
์ด ๋์ด์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํน์ ์์ ์ ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ์์ ๋ค๋ฅธ Redis ์ธ์คํด์ค๊ฐ ์๋ก ๋ค๋ฅธ ํ ํฐ ์ํ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๋ ๋จ์ํ ์บ์ ์ ์ฅ์๋ก ์ ๊ทผํ๋ Redis๋ฅผ, “๋ ์ ์ฅ์ ๊ฐ ์ ํฉ์ฑ์ ์ ์งํด์ผ ํ๋ DB ์ ์ฌ ์คํ ๋ฆฌ์ง” ๋ก ๊ฒฉ์์ํค๋ ์ค๊ณ์
๋๋ค.
์ด๋ฌํ ์ ๊ทผ์ ๊ธฐ์ ์ ๋์ด๋๋ฟ๋ง ์๋๋ผ ์ ์ง๋ณด์ ๋น์ฉ๋ ํฌ๊ฒ ์ฆ๊ฐ์ํต๋๋ค.
์ ํ์๋ฅผ ํตํด ํ ํฐ ์ ์ฅ์๋ฅผ ์ด์ํํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ๋์๊ธฐ ๋๋ฌธ์, ์์ ์ธ๊ธํ๋ ๋ณต์กํ ๊ณ ๋ ค ์ฌํญ๋ค(๋ฉํฐ ์ ์ฅ์ ๋๊ธฐํ, ๋ถ์ฐ ํธ๋์ญ์ , ๋ณด์ ์ฒ๋ฆฌ ๋ก์ง)์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋์์ต๋๋ค.
๋ค๋ง, ์ด์ํ๋ฅผ ์ฑํํ์ง ์๋๋ค๋ ๊ฒ์ ๊ณง ํ๋์ Redis ์๋ฒ๊ฐ ๋จ์ผ ์ง์ค ์๋ณธ(SSOT, Single Source of Truth) ์ญํ ์ ์ํํ๊ฒ ๋๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์, ๊ทธ๋งํผ ํด๋น Redis ์๋ฒ์ ์์ ์ฑ๊ณผ ๊ฐ์ฉ์ฑ ํ๋ณด๊ฐ ๋งค์ฐ ์ค์ํด์ง๋๋ค.
๋ด๋ถ์ ์ผ๋ก ์ด๋ฏธ Redis๋ ์ธ์ ์คํ ๋ฆฌ์ง ๊ธฐ๋ฐ ์ธํ๋ผ๋ก ์ด์๋๋ฉฐ ๊ฐ์ฅ ๋์ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅ๋ฐ๋ ๋ฆฌ์์ค์ด์ง๋ง, ํ ํฐ ์ญ์ ์ธ์ฆ ์ฒด๊ณ์ ์ผ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๋์ผํ ์์ค์ ์ด์ฉ ์์ ์ฑ์ ๊ธฐ๋ํ ์ ์์ด์ผ ํฉ๋๋ค.
๊ฒฐ๊ตญ, ์ฅ์ ๋ณต๊ตฌ / ๋ฐฑ์ ์ ์ฑ / ๋ชจ๋ํฐ๋ง ๊ธฐ์ค์ ๋ ํ๋ฆฌ์นด ๊ตฌ์ฑ ๋์ “๋จ์ผ ์ ์ฅ์๋ฅผ ์์ ์ ์ผ๋ก ์ด์ํ๋ ๋ฐฉํฅ”์ผ๋ก ์ด์ ์ด ์ฎ๊ฒจ๊ฐ๊ฒ ๋ฉ๋๋ค. Redis ์์ฒด์ ๋ ํ๋ฆฌ์นด ๊ตฌ์ฑ, ์ฅ์ ์๋ ์ ํ, ๋ด๋ถ Sync ๋ฉ์ปค๋์ฆ์ ์ธํ๋ผ ๋ ๋ฒจ์์ ๊ด๋ฆฌ๋๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ์ค๋ณต ์ ์ฅ, ๋ณด์ ํธ๋์ญ์ , ๋ฉํฐ ์ปค๋ฅ์ ํธ๋์ญ์ ์ ๊ตฌํํ ํ์๊ฐ ์๋ค๋ ์ ์ ์คํ๋ ค ์ฅ์ ์ ๋๋ค.
3๏ธโฃ ๋ฐ์ดํฐ ์บ์ฑ์ ๋์์ฑ ๋ฌธ์
Redis ์บ์๊ฐ ๋ง๋ฃ๋๋ ์๊ฐ, ๋์์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ์บ์ ๋ฏธ์ค → ์ ๊ท ํ ํฐ ๋ฐํ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ค๋ณต ์ฐ๊ธฐ(Duplicate Write)๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์์ ์ํ์ค๋ค์ด์ด๊ทธ๋จ

๋ ์ฌ์ฉ์๊ฐ ๋์ ์์ฒญํ์ฌ ํ ํฐ ๊ฐฑ์ ์ด ๊ฒน์น๋ฉด, ํ์ชฝ ์ฌ์ฉ์์๊ฒ๋ “์๋ชป๋ ์ธ์ฆ ์ ๋ณด”๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Grace Period ๊ฐ๊ธฐ ๋๋ฌธ์ ํ ํฐ์ ์ฌ๋ฐ๊ธํด๋ ๊ธฐ์กด ์ก์ธ์ค ํ ํฐ์ด ์ฆ์ ํ๊ธฐ๋์ง ์๊ธด ํ์ง๋ง ๋นก๋นกํ๊ฒ ์ธ์ฆํ ํฐ์ ๊ด๋ฆฌํ๋ ์๋น์ค๋ผ๋ฉด ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ด๋ฐ ๋์์ฑ ์ด์๋ Redis๋ฟ๋ง ์๋๋ผ RDB๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ถฉ๋ถํ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ๋๋ค. ์ ํ์์์๋ ์ค์ ๋ก ์ด๋ฐ ์ํฉ์ด ๋ฐ์ํ ํ๋ฅ ์ ๋ฎ๊ณ , ์ค๋ น ๋ฐ์ํ๋๋ผ๋ ๋ ์์ฒญ์ ๋ชจ๋ ์ต์ง๋ก ์ฑ๊ณต์ํค๊ธฐ๋ณด๋ค๋ ํ์ชฝ ์์ฒญ๋ง ์ ์ ์ฒ๋ฆฌ๋๊ณ ๋ค๋ฅธ ํ์ชฝ์ 401 ์๋ฌ๋ฅผ ๋ฐํํ๋ ์ชฝ์ด ๋ ์์ ํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค.
์ด์ฐจํผ 401 ์๋ฌ๋ฅผ ๋ฐ์ ์ฌ์ฉ์๋ ๋ค์ ํ ๋ฒ ์ธ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๊ณ , ์ด ๊ณผ์ ์์ ์ ์์ ์ธ ํ ํฐ์ด ์ฌ๋ฐ๊ธ·์ฌ์บ์ฑ๋๋ฏ๋ก ์๋น์ค ์ ์ฒด์ ์ธ ๊ด์ ์์๋ ํ์ฉ ๊ฐ๋ฅํ ์์ค์ ๋ฆฌ์คํฌ๋ก ๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
๐ Redis ์ธ์ฆ ํ ํฐ ์ ์ฅ์ Key ์ค๊ณ
์ฒ์์๋ Redis์ ์ธ์ฆ ํ ํฐ์ ์ ์ฅํ ๋ Access Token๊ณผ Refresh Token์ ํ๋์ ํค๋ก ๋ฌถ์ด HASH ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ๊น ๊ณ ๋ฏผํ์ต๋๋ค.
์๋์ ๊ฐ์ ํํ์
๋๋ค.
key: {tenant CODE}:{openmarket CODE}
fields:
access_token = AAA
refresh_token = BBB
ํด๋น ๋ฐฉ์์ ๋ฐ์ดํฐ ์กฐํ๊ฐ ๋จ์ผ ํค ์กฐํ๋ก ๋จ์ํด์ง๊ณ , ์ฌ๋ฌ ํ๋๋ฅผ ํ ๋ฒ์ ์ฝ์ด์ฌ ์ ์๋ค๋ ์ ์์ ์ด์์ ์ผ๋ก ๋ณด์ผ ์ ์์ต๋๋ค.
ํ์ง๋ง, ์ค์ OAuth ํ๊ฒฝ์์ ํ ํฐ์ ์ด์ํด๋ณด๋ฉด HASH ๊ตฌ์กฐ๊ฐ ์๊ฐ๋ณด๋ค ํฐ ์ ์ฝ์ ๋ง๋ญ๋๋ค.
ํต์ฌ์ TTL(๋ง๋ฃ ์๊ฐ)์ ํ ํฐ๋ณ๋ก ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๋ ์ ์
๋๋ค.
Access Token๊ณผ Refresh Token์ ๋ณธ์ง์ ์ผ๋ก ์ ํจ๊ธฐ๊ฐ์ด ๋ค๋ฆ
๋๋ค.
- Access Token: ์์ญ ๋ถ ~ ์ ์๊ฐ
- Refresh Token: ๋ฉฐ์น ~ ๋ช ๋ฌ
์ด๋ HASH ์๋ฃ๊ตฌ์กฐ์์ key ๋จ์ TTL๋ง ์ ๊ณตํ๊ณ , field๋ณ TTL์ ์ค์ ํ ์ ์์ต๋๋ค.
Refresh Token์ ๋ง๋ฃ ๊ธฐํ์ผ๋ก HASH key ์ TTL ์ ๊ฑธ๋ฉด ์ด๋ฏธ ๋ง๋ฃ๋ Access Token ์ ํ ํฐ์ ๋ถํ์ํ๊ฒ ๋ ๋์ค์ ์ ์ฅํ ์ ์๊ณ , Access Token ์ ๋ง๋ฃ ๊ธฐํ์ผ๋ก HASH key ์ TTL ์ ๊ฑธ๋ฉด ๋ฆฌํ๋ ์ ํ ํฐ์ ๋ง๋ฃ๊ธฐํ์ด ์์ง ๋จ์์ง๋ง, ์ก์ธ์ค ํ ํฐ๊ณผ ๊ฐ์ด ๋ง๋ฃ๋์ด ์ฌ์ฉ์๋ ์์คํ
๋ด๋ถ์์ ํ ํฐ ๊ฐฑ์ ์ ํตํ ์ธ์ฆ์ธ๊ฐ๊ฐ ์๋ ๋น๋ฒํ๊ฒ ์ฌ์ธ์ฆํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊น๋๋ค.
์ค ์๋น์ค์์๋ Access Token์ด ๋งค์ฐ ์์ฃผ ๋ฐ๋๋๋ค. ๋ฐ๋๋ก Refresh Token์ ๊ทนํ ๋๋ฌผ๊ฒ ๊ต์ฒด๋ฉ๋๋ค.
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด STRING ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ Access Token๊ณผ Refresh Token์ ๊ฐ๊ฐ ๋ณ๋์ ํค๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ์ ํํ์ต๋๋ค.
์์
{tenant}:{openmarket}:at
access_token → TTL = 7200s
{tenant}:{openmarket}:rt
refresh_token → TTL = 604800s
๋ํ ํตํฉ ์ผํ๋ชฐ์ ๊ฒฝ์ฐ(1๊ฐ ํ๋งค์ ๊ณ์ / N๊ฐ ์คํ๋ง์ผ)์๋ ํ๋์ ํค์ ์ฌ๋ฌ ์คํ๋ง์ผ ์ธ์ฆ ์ ๋ณด๋ฅผ ํจ๊ป ๋ณด๊ดํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฅผ JSON ๊ตฌ์กฐ๋ก ์ค๊ณํ๊ณ ๋ฌธ์์ด๋ก ๋ณํํด ์ ์ฅํ์ง๋ง, ๋จ์ผ ์คํ๋ง์ผ ํ ํฐ์ ๋นํด ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ํตํฉ ์ผํ๋ชฐ ํ ํฐ์ JSON ๋ฐ์ดํฐ๋ฅผ Deflate๋ก ์์ถํ ๋ค Base64๋ก ์ธ์ฝ๋ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํด ์ ์ฅํ์ต๋๋ค.
์์ถ ํ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ ๋ฐ์ผ๋ก ์ค์์ต๋๋ค. (1481 bytes → 764 bytes ์ฝ 50% ๊ฐ์)


๐์ฑ๊ณผ
Redis ๊ธฐ๋ฐ ํ ํฐ ์ ์ฅ์ ๋์ ์ดํ ๊ฐ์ฅ ํฐ ๋ณํ๋ ํ ํฐ ๊ด๋ฆฌ์ ๋ณต์ก๋๊ฐ ํฌ๊ฒ ์ค์๋ค๋ ์ ์ ๋๋ค. ๊ธฐ์กด์๋ ํ ํฐ์ DB์ ์ ์ฅํ ๋ค ์กฐํ, ๋ง๋ฃ ํ๋จ, ๊ฐฑ์ ์ฒ๋ฆฌ ํ ์ ์ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ง์ ์ํํด์ผ ํ์ง๋ง, TTL ๊ตฌ์กฐ๋ก ์ ํ๋๋ฉด์ ๋ง๋ฃ ๊ด๋ฆฌ ์ฑ ์์ด Redis๋ก ์ด๋ํ์ต๋๋ค.
3.0/5.0 ๊ณต์กด ํ๊ฒฝ์์ ํ ํฐ์ด ์ฌ๋ฌ ํ ์ด๋ธ์ ์ค๋ณต ์ ์ฅ๋๋ ๋ฌธ์ ๋ ํด์๋์๊ณ , ํ ํฐ์ ์์ฒญ ๋ฉ์์ง์ ํ์ ์ ๋ฌํ ํ์๋ ์ฌ๋ผ์ก์ต๋๋ค.
์กฐํ ์ฑ๋ฅ ์ญ์ ์ฆ์ ๊ฐ์ ๋์ด, ๋ฐ๋ณต์ ์ธ ์ธ์ฆ ์์ฒญ์์ μs~ms ๋จ์์ ๋น ๋ฅธ ์กฐํ๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค. ์ธ์ฆ ํ ํฐ์ด ๋ ์ด์ ์๋น์ค ๋ก์ง์ ๋ถ๋ด์ด ์๋๋ผ ์ธํ๋ผ ๋ ๋ฒจ์์ ์์ ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ์์์ด ๋์๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ์ฑ๊ณผ์์ต๋๋ค.
๊ทธ ์ค ๊ฐ์ฅ ํฐ ์ฑ๊ณผ๋ ์ ์ฅ ๊ณต๊ฐ์ ํ๊ธฐ์ ์ธ ๋จ์ถ์ ๋๋ค. Redis์ ์ ์ฅ๋ ๊ฐ๋ณ ์ธ์ฆ ํ ํฐ์ ํฌ๊ธฐ๋ ํ๊ท ์ ์ผ๋ก ์ฝ 200B ๋ด์ธ์ ๋ถ๊ณผํด, ๋ถํ์ํ ์ ์ฅ ๊ณต๊ฐ์ ํฌ๊ฒ ์ค์์ต๋๋ค.
ํนํ ํตํฉ ์ผํ๋ชฐ(1๊ฐ ํ๋งค์ ๊ณ์ / 9๊ฐ ์คํ๋ง์ผ)์ ๊ฒฝ์ฐ๋ฅผ ์์๋ก ๋ณด๋ฉด ๊ทธ ์ฐจ์ด๋ ๋์ฑ ๊ทน๋ช ํฉ๋๋ค.

๋์ผ ๋ฐ์ดํฐ๋ฅผ RDB์ ์ ์ฅํ ๊ฒฝ์ฐ, ํ ๋ ์ฝ๋์ ์ค์ ๋ฐ์ดํฐ ์์ฒด(Heap)๋ ์ฝ 2.8KB์ด๊ณ , ์ฌ๊ธฐ์ ์ปฌ๋ผ ์ ์ฅ ์ค๋ฒํค๋·TOAST ์์ญ·์ธ๋ฑ์ค·ํ์ด์ง ๋จ์ ์ ์ฅ ๋ฑ RDBMS ํน์ฑ์ ๋ฐ์ํ๋ ์ถ๊ฐ ๋น์ฉ๊น์ง ํฌํจํ๋ฉด ์ฝ 4.1KB์ ์ ์ฅ ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๋ค.
๊ฒ๋ค๊ฐ 3.0/5.0 ์๋น์ค๊ฐ ๊ณต์กดํ๋ ๊ธฐ๊ฐ ๋์ ๋์ผํ ํ ํฐ์ด ๋ ๊ฐ์ ํ ์ด๋ธ์ ์ค๋ณต ์ ์ฅ๋๋ฏ๋ก, ์ค์ง์ ์ผ๋ก๋ ์ต์ 5.6KB๊ฐ ํ์ํฉ๋๋ค.

๋ฐ๋ฉด Redis์์ ๋์ผํ ํตํฉ ์ผํ๋ชฐ ํ ํฐ์ ์กฐํํด ๋ณด๋ฉด, ์ฌ๋ฌ ์คํ๋ง์ผ ์ ๋ณด๋ฅผ ํฌํจํ ํ๋์ ๋ฌธ์์ด์์๋ ์ค์ ์ ์ฅ ํฌ๊ธฐ๊ฐ ์ฝ 768B ์์ค์ ๋๋ค. ์ฌ๊ธฐ์ ๋ฆฌํ๋ ์ ํ ํฐ์ ๋์ผ ๊ตฌ์กฐ๋ก ์ ์ฅํ๋๋ผ๋ ์ด ์ฌ์ฉ ๊ณต๊ฐ์ ์ฝ 1.5KB์ ๋ถ๊ณผํฉ๋๋ค.
์ฆ, 1๊ฐ์ ํตํฉ ๊ณ์ ํ ํฐ ์ ์ฅ ๊ณต๊ฐ ๊ธฐ์ค์ผ๋ก 5.6KB → 1.5KB, ์ฝ 73%์ ์ ์ฅ ๊ณต๊ฐ ์ ๊ฐ ํจ๊ณผ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.
์ด ์์น๋ ๋จ์ํ “RDB ๋์ Redis๊ฐ ๋น ๋ฅด๋ค”๋ ์์ค์ ๋์ด, ์ธ์ฆ ์์คํ ์ด ์ฅ๊ธฐ๊ฐ ๋์ ๋ ์๋ก ๋น์ฉ·์ฑ๋ฅ·์ ์ง๋ณด์ ์ธก๋ฉด์์ ๊ตฌ์กฐ์ ์ผ๋ก ์ ๋ฆฌํ ๋ชจ๋ธ์ด๋ผ๋ ์ ์ ๋ณด์ฌ์ค๋๋ค.
๋๊ธ