๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ์ตœ์ข…ํ”„๋กœ์ ํŠธ/โœ๏ธ TIL

[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 19

by carrot0911 2025. 3. 1.

์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง 

๊ฐœ์ธ ๋ฐœํ‘œ ์˜์ƒ ๋ฌธ์„œ ์ค€๋น„ํ•˜๊ธฐ

1. ์˜์‚ฌ๊ฒฐ์ •_์ „์ฒด ์ฑ„์šฉ ๊ณต๊ณ  ์กฐํšŒ API (ํ•„ํ„ฐ๋ง, ๊ฒ€์ƒ‰์–ด ํฌํ•จ)์— Elasticsearch ์ ์šฉ

[ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ ]

์‚ฌ์šฉ์ž๊ฐ€ ์กฐ๊ฑด ์„ ํƒ ๋ฐ ๊ฒ€์ƒ‰์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•˜๋Š” API๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

[ ์ฃผ์š” ๋กœ์ง ]

์ฃผ์š” ๋กœ์ง์€ ์ด ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์ง‘๋‹ˆ๋‹ค.

์ฒซ์งธ, ์ง€์—ญ, ๊ฒฝ๋ ฅ ๋“ฑ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๊ฐ€ ์—†๋‹ค๋ฉด ์ „์ฒด ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๋‘˜์งธ, ์ง€์—ญ, ํ•™๋ ฅ, ๊ฒฝ๋ ฅ, ์ฑ„์šฉ ๊ธฐ๊ฐ„ ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ์„ ํƒํ•˜์—ฌ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์…‹์งธ, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๊ฒ€์ƒ‰์–ด๊ฐ€ ํฌํ•จ๋œ ์ฑ„์šฉ ๊ณต๊ณ  ์ œ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ จ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[ ๋ฐฐ๊ฒฝ ]

๊ธฐ์กด์—๋Š” ๊ฒ€์ƒ‰์–ด๋ฅผ ์ด์šฉํ•œ ์ฑ„์šฉ ๊ณต๊ณ  ์กฐํšŒ ์‹œ LIKE๋ฌธ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ LIKE ๊ฒ€์ƒ‰์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์บ”ํ•˜๋Š” Full Table Scan ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ฑ„์šฉ ๊ณต๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ์กฐํšŒ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์—ญ, ํ•™๋ ฅ, ๊ฒฝ๋ ฅ ๋“ฑ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธธ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ๊ณต๊ณ  ๋ฐ์ดํ„ฐ๋Š” ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€๋˜์ง€๋งŒ ์‚ฌ์šฉ์ž๋“ค์€ ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ด์œ ๋กœ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

[ ์š”๊ตฌ ์‚ฌํ•ญ ]

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด ์ฑ„์šฉ ๊ณต๊ณ  ๋ชฉ๋ก์„ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์—ญ, ๊ฒฝ๋ ฅ, ํ•™๋ ฅ ๋“ฑ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด๋„ ์›ํ•˜๋Š” ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฒ€์ƒ‰์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ๋œ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[ ์„ ํƒ์ง€ ]

1. ์ธ๋ฑ์Šค ์ตœ์ ํ™”

  • ์ž์ฃผ ์กฐํšŒํ•˜๋Š” ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ ์šฉํ•˜์—ฌ ์กฐํšŒ ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • WHERE ์กฐ๊ฑด ๊ธฐ๋ฐ˜์˜ ์กฐํšŒ ์„ฑ๋Šฅ์€ ํ–ฅ์ƒ๋˜์ง€๋งŒ, LIKE ๊ฒ€์ƒ‰์€ ์ธ๋ฑ์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•ด์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

2. Elasticsearch ์ ์šฉ

  • ์—ญ์ƒ‰์ธ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅธ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • LIKE ๊ฒ€์ƒ‰์ด ์•„๋‹Œ ํ† ํฐํ™”๋œ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•˜์—ฌ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ ฌ์ด ๋น ๋ฅด๊ณ  ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์ˆ˜ํ‰ ํ™•์žฅ์œผ๋กœ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[ ์˜์‚ฌ๊ฒฐ์ •/์‚ฌ์œ  ]

์ตœ์ข…์ ์œผ๋กœ Elasticsearch๋ฅผ ์ ์šฉํ•˜์—ฌ ์กฐํšŒ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

[ ์„ ํƒํ•œ ์ด์œ  ]

  • ์—ญ์ƒ‰์ธ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ LIKE ๊ฒ€์ƒ‰๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด๋„ ํ•„ํ„ฐ๋ง๊ณผ ์ •๋ ฌ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒค๋”ฉ๊ณผ ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•ด๋„ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”ํ›„ ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ๋•Œ Elasticsearch ๊ฐ€ ๋” ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ ํ™”๋„ ๊ณ ๋ คํ–ˆ์ง€๋งŒ ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ฑ„์šฉ ๊ณต๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๋ฉด ์ธ๋ฑ์Šค ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•ด์„œ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[ ํšŒ๊ณ  ]

๊ธฐ์ˆ ์˜ ์žฅ๋‹จ์ 

[ ์žฅ์  ]

  • ์—ญ์ƒ‰์ธ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์—์„œ๋„ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์กฐํ•ฉํ•ด๋„ ์ •ํ™•ํ•œ ์กฐํšŒ ๋ฐ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜์„œ ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

[ ๋‹จ์  ]

  • ์ถ”๊ฐ€์ ์ธ ์ธํ”„๋ผ๊ฐ€ ํ•„์š”ํ•ด์„œ ์šด์˜ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜์—ฌ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ์‹œ๋„ํ•œ๋‹ค๋ฉด?

๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ํฌ์ง€ ์•Š๋‹ค๋ฉด ์ธ๋ฑ์Šค ์ตœ์ ํ™”๋กœ ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์ ์šฉํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฒ€ํ†  ํ•˜๊ณ  Elasticsearch ๋„์ž…์„ ๊ฒฐ์ • ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ–ˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

2. ์˜์‚ฌ๊ฒฐ์ •_์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ API์— Redis ๋„์ž…

[ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ ]

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ €์žฅํ•˜๊ณ , ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ž…๋ ฅ๋œ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ตœ๋Œ€ 10๊ฐœ ์กฐํšŒํ•˜๋Š” API๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Redis๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒ ์†๋„๋ฅผ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

30๋ถ„๋งˆ๋‹ค MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

[ ์ฃผ์š” ๋กœ์ง ]

์ฃผ์š” ๋กœ์ง์€ ์ด ๋„ค ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์ง‘๋‹ˆ๋‹ค.

์ฒซ์งธ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๋ฅผ Redis์˜ ZSET ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์–ด๊ฐ€ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‘˜์งธ, Redis์—์„œ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒ€์ƒ‰์–ด ์ค‘ ์ตœ๋Œ€ 10๊ฐœ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์…‹์งธ, 30๋ถ„๋งˆ๋‹ค Redis์˜ ๊ฒ€์ƒ‰์–ด ๋ฐ์ดํ„ฐ๋ฅผ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™๊ธฐํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณด์กด์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๋„ท์งธ, 1์‹œ๊ฐ„ ๋™์•ˆ ์ƒˆ๋กœ์šด ๊ฒ€์ƒ‰์–ด๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ Redis์—์„œ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

[ ๋ฐฐ๊ฒฝ ]

๊ธฐ์กด์—๋Š” ๊ฒ€์ƒ‰์–ด๋ฅผ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค INSERT ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฒ€์ƒ‰์–ด๋ฅผ ์กฐํšŒํ•  ๋•Œ๋งˆ๋‹ค ORDER BY ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜๋ฉด์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰์–ด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

[ ์š”๊ตฌ ์‚ฌํ•ญ ]

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๋ฅผ Redis์— ์šฐ์„  ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ €์žฅ๋œ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฒ€์ƒ‰์–ด ๋ฐ์ดํ„ฐ๋Š” 30๋ถ„๋งˆ๋‹ค MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. 1์‹œ๊ฐ„ ๋™์•ˆ ์ƒˆ๋กœ์šด ๊ฒ€์ƒ‰์–ด๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[ ์„ ํƒ์ง€ ]

1. ์ธ๋ฑ์Šค ์ตœ์ ํ™”

  • ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ์ €์žฅ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ ์šฉํ•˜์—ฌ ์กฐํšŒ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ INSERT ์—ฐ์‚ฐ์ด ๋งŽ์•„์ง€๋ฉด, ์ธ๋ฑ์Šค ์œ ์ง€ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•ด์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ตœ์‹  ๊ฒ€์ƒ‰์–ด๋ฅผ ์กฐํšŒํ•˜๋ฉด ORDER BY ์—ฐ์‚ฐ์ด ํ•„์š”ํ•ด์„œ ๊ฒ€์ƒ‰๋Ÿ‰์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์กฐํšŒ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Redis ์ ์šฉ

  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰์–ด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ZSET ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ž๋™ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ ๋ฐ ์กฐํšŒ๋ฅผ Redis์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 1์‹œ๊ฐ„ ๋™์•ˆ ์ƒˆ๋กœ์šด ๊ฒ€์ƒ‰์–ด๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ์‚ญ์ œํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[ ์˜์‚ฌ๊ฒฐ์ •/์‚ฌ์œ  ]

Redis๋ฅผ ๋„์ž…ํ•˜์—ฌ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ  DB์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

< ์„ ํƒํ•œ ์ด์œ  >

  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ์ด๋ฏ€๋กœ ์กฐํšŒ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ์ง€์›ํ•˜๋Š” ZSET ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž๋™ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•ด์„œ ์ตœ์‹  ๊ฒ€์ƒ‰์–ด ์กฐํšŒ๊ฐ€ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰์–ด ๋ฐ์ดํ„ฐ๋ฅผ Redis์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ ํšจ ์‹œ๊ฐ„์ธ 1์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๊ฒ€์ƒ‰์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ์‚ญ์ œํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ ํ™”๋„ ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ, ๊ฒ€์ƒ‰์–ด ๋ฐ์ดํ„ฐ๋Š” ์ง€์†์ ์œผ๋กœ INSERT๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ตœ์‹  ๊ฒ€์ƒ‰์–ด ์กฐํšŒ ์‹œ ๋น ๋ฅธ ์กฐํšŒ ์†๋„๊ฐ€ ํ•ต์‹ฌ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ Redis๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

[ ํšŒ๊ณ  ]

๊ธฐ์ˆ ์˜ ์žฅ๋‹จ์ 

[ ์žฅ์  ]

  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ์ด๋ฏ€๋กœ ๊ฒ€์ƒ‰์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰์–ด ๋ฐ์ดํ„ฐ๋ฅผ Redis์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๊ฐ€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.
  • ZSET ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[ ๋‹จ์  ]

  • Redis๋ฅผ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„์˜ ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ์ธํ”„๋ผ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Redis์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐํ™” ๋กœ์ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ์‹œ๋„ํ•œ๋‹ค๋ฉด?

๊ฒ€์ƒ‰์–ด ์ €์žฅ ๋นˆ๋„๊ฐ€ ๋‚ฎ๋‹ค๋ฉด ์ธ๋ฑ์Šค ์ตœ์ ํ™”๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰์–ด ์ €์žฅ์ด ๋งŽ๊ณ  ๋น ๋ฅธ ์กฐํšŒ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Redis ๋„์ž…์„ ๊ฒฐ์ • ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ฃผ๋ง ๊ณ„ํš โฐ

  • ๊ฐœ์ธ ๋ฐœํ‘œ ์˜์ƒ ์ค€๋น„ ๋ฐ ์ดฌ์˜
  • ์ค‘๊ฐ„ ๋ฐœํ‘œ ์ค€๋น„
  • ๊ธฐํš์„œ ์ž‘์„ฑ

+ ์ถ”๊ฐ€ ๊ณ„ํš์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!