Database

RDB์—์„œ Redis๋กœ๐Ÿช„ ์ธ์ฆ ํ† ํฐ ์ €์žฅ์†Œ ๊ตฌ์กฐ ๊ฐœ์„ ๊ณผ 73% ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ๊ฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2025. 11. 16.

 

ํ˜„์žฌ ์‚ฌ๋‚ด์˜ ๋‹ค์–‘ํ•œ ์—…๋ฌด ์‹œ์Šคํ…œ์ด 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 ๊ธฐ๋ฐ˜ ํ† ํฐ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

  1. ์ธ์ฆ ์ •๋ณด ์ „๋‹ฌ ๋กœ์ง์ด ๋‹จ์ˆœํ•ด์ง€๊ณ  (ํ† ํฐ์„ ๋“ค๊ณ  ๋‹ค๋‹ˆ์ง€ ์•Š์Œ)
  2. 3.0 / 5.0 ๊ณต์กด ๊ตฌ์กฐ์—์„œ๋„ ์ €์žฅ์†Œ๊ฐ€ ํ•˜๋‚˜๋กœ ์ผ์›ํ™”๋˜๋ฉฐ
  3. ํ†ตํ•ฉ ์‡ผํ•‘๋ชฐ ๊ตฌ์กฐ์—์„œ๋„ ์žฌ์ธ์ฆ ์‹œ ๋ณต์žกํ•œ ๋ถ„๊ธฐ/์‚ญ์ œ ๋กœ์ง ์—†์ด “์ƒํƒœ ์Šค๋ƒ…์ƒท ๊ฐฑ์‹ ” ํŒจํ„ด์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ 
  4. 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 ์ €์žฅ์‹œ

 

 

๋™์ผ ๋ฐ์ดํ„ฐ๋ฅผ RDB์— ์ €์žฅํ•  ๊ฒฝ์šฐ, ํ•œ ๋ ˆ์ฝ”๋“œ์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ž์ฒด(Heap)๋Š” ์•ฝ 2.8KB์ด๊ณ , ์—ฌ๊ธฐ์— ์ปฌ๋Ÿผ ์ €์žฅ ์˜ค๋ฒ„ํ—ค๋“œ·TOAST ์˜์—ญ·์ธ๋ฑ์Šค·ํŽ˜์ด์ง€ ๋‹จ์œ„ ์ €์žฅ ๋“ฑ RDBMS ํŠน์„ฑ์ƒ ๋ฐœ์ƒํ•˜๋Š” ์ถ”๊ฐ€ ๋น„์šฉ๊นŒ์ง€ ํฌํ•จํ•˜๋ฉด ์•ฝ 4.1KB์˜ ์ €์žฅ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.

 

๊ฒŒ๋‹ค๊ฐ€ 3.0/5.0 ์„œ๋น„์Šค๊ฐ€ ๊ณต์กดํ•˜๋Š” ๊ธฐ๊ฐ„ ๋™์•ˆ ๋™์ผํ•œ ํ† ํฐ์ด ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์— ์ค‘๋ณต ์ €์žฅ๋˜๋ฏ€๋กœ, ์‹ค์งˆ์ ์œผ๋กœ๋Š” ์ตœ์†Œ 5.6KB๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

Redis ์ €์žฅ์‹œ

 

 

 

๋ฐ˜๋ฉด Redis์—์„œ ๋™์ผํ•œ ํ†ตํ•ฉ ์‡ผํ•‘๋ชฐ ํ† ํฐ์„ ์กฐํšŒํ•ด ๋ณด๋ฉด, ์—ฌ๋Ÿฌ ์˜คํ”ˆ๋งˆ์ผ“ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด์ž„์—๋„ ์‹ค์ œ ์ €์žฅ ํฌ๊ธฐ๊ฐ€ ์•ฝ 768B ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ๋™์ผ ๊ตฌ์กฐ๋กœ ์ €์žฅํ•˜๋”๋ผ๋„ ์ด ์‚ฌ์šฉ ๊ณต๊ฐ„์€ ์•ฝ 1.5KB์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.

 

์ฆ‰, 1๊ฐœ์˜ ํ†ตํ•ฉ ๊ณ„์ • ํ† ํฐ ์ €์žฅ ๊ณต๊ฐ„ ๊ธฐ์ค€์œผ๋กœ 5.6KB → 1.5KB, ์•ฝ 73%์˜ ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์ˆ˜์น˜๋Š” ๋‹จ์ˆœํžˆ “RDB ๋Œ€์‹  Redis๊ฐ€ ๋น ๋ฅด๋‹ค”๋Š” ์ˆ˜์ค€์„ ๋„˜์–ด, ์ธ์ฆ ์‹œ์Šคํ…œ์ด ์žฅ๊ธฐ๊ฐ„ ๋ˆ„์ ๋ ์ˆ˜๋ก ๋น„์šฉ·์„ฑ๋Šฅ·์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ๊ตฌ์กฐ์ ์œผ๋กœ ์œ ๋ฆฌํ•œ ๋ชจ๋ธ์ด๋ผ๋Š” ์ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋Œ“๊ธ€