Skip to content

freedrawing/99jeoljeol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

62 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“– ๋ชฉ์ฐจ

  1. ์†Œ๊ฐœ
  2. Architecture + ๊ธฐ์ˆ  ์Šคํƒ
  3. ๋ฌธ์ œ ํ•ด๊ฒฐ
  4. Members

๐Ÿ“ ์†Œ๊ฐœ

์ด ํ”„๋กœ์ ํŠธ๋Š” ํ•˜๋‚˜์˜ ์˜จ์ „ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ํ•ต์‹ฌ ๊ธฐ์ˆ ์„ ์ง‘์ค‘์ ์œผ๋กœ ํ•™์Šตํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๐Ÿ”‘ Core Technologies

1. ๋™์‹œ์„ฑ ์ œ์–ด
2. ์ธ๋ฑ์‹ฑ
3. ์บ์‹ฑ



๐Ÿ—๏ธ Architecture & ๊ธฐ์ˆ  ์Šคํƒ

image
ย  ย  ย  ย  ย  ย  ย  ย  ย 
ย  ย  ย 

๐Ÿง  ๋ฌธ์ œ ํ•ด๊ฒฐ

1. ๐Ÿ”’ ๋™์‹œ์„ฑ ์ œ์–ด - ์‡ผํ•‘๋ชฐ ์กฐํšŒ์ˆ˜ ๋™์‹œ์„ฑ ์ œ์–ด (Lock ์ ์šฉ)

์‡ผํ•‘๋ชฐ ์กฐํšŒ์ˆ˜ ๋™์‹œ์„ฑ ์ œ์–ด (Lock ์ ์šฉ)

์‡ผํ•‘๋ชฐ ์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Synchronized -> DB Lock(Pessimistic, Optimistic) -> Redis ๋ถ„์‚ฐ Lock (Lettuce, Redisson) ๋ชจ๋‘ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ณ  ๋น„๊ต ๋ถ„์„ํ•œ ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


1๏ธโƒฃ Synchronized ์‚ฌ์šฉ (๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ)

  • ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์Œ
  • ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ (๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ œํ•œ)

2๏ธโƒฃ DB Lock ํ™œ์šฉ (Pessimistic vs. Optimistic)

๋ฐฉ์‹ ํŠน์ง• ์žฅ์  ๋‹จ์ 
๋น„๊ด€์  ๋ฝ (Pessimistic Lock) DB ์ž์ฒด์—์„œ ํŠธ๋žœ์žญ์…˜ ๋ฝ ์‚ฌ์šฉ (SELECT ... FOR UPDATE) ์ถฉ๋Œ ๋ฐฉ์ง€ ํšจ๊ณผ์  ๋ฝ์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ
๋‚™๊ด€์  ๋ฝ (Optimistic Lock) @Version ํ•„๋“œ ํ™œ์šฉ (์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์žฌ์‹œ๋„) ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ์ถฉ๋Œ์ด ์žฆ์œผ๋ฉด ์žฌ์‹œ๋„ ๋น„์šฉ ๋ฐœ์ƒ

3๏ธโƒฃ Redis ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ๋ฝ (Lettuce vs. Redisson)

๋ฐฉ์‹ ํŠน์ง• ์žฅ์  ๋‹จ์ 
Lettuce SET NX ๋ฐฉ์‹ ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„ Spin Lock ๋ฐฉ์‹์œผ๋กœ Redis ๋ถ€ํ•˜ ๊ฐ€๋Šฅ
Redisson Pub-Sub ๊ธฐ๋ฐ˜ ํšจ์œจ์ ์ธ ๋ฝ ํ•ด์ œ ๊ฐ์ง€ ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•„์š”

๐Ÿง ๊ฒฐ๋ก 

  • Synchronized๋Š” ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐ ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฏ€๋กœ ๊ฐ€๊ธ‰์  ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

  • DB ์„œ๋ฒ„๊ฐ€ ํ•œ ๋Œ€๋ผ๋ฉด ๋น„๊ด€์  ๋ฝ(Pessimistic Lock)์ด ์ ์ ˆํ•˜์ง€๋งŒ, ๋ฐ๋“œ๋ฝ ๋ฐ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

    • ๋‚™๊ด€์  ๋ฝ(Optimistic Lock)์€ ์ถ”๊ฐ€ ์„ค์ •์ด ๋งŽ์•„ ๋ณต์žกํ•˜๊ณ , ๋นˆ๋ฒˆํ•œ ์ถฉ๋Œ์ด ์˜ˆ์ƒ๋œ๋‹ค๋ฉด ๋น„๊ด€์  ๋ฝ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
  • DB ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋Œ€๋ผ๋ฉด ๋ถ„์‚ฐ ๋ฝ์ด ํ•„์š”ํ•˜๋ฉฐ, Redisson์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋‹ค.

    • Lettuce๋Š” Spin Lock ๋ฐฉ์‹์œผ๋กœ Redis ๋ถ€ํ•˜๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ์–ด ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๐Ÿ”— ๋” ์ž์„ธํ•œ ๋‚ด์šฉ ๋ณด๊ธฐ

๐Ÿ“Œ ์ƒ์„ธํ•œ ๊ตฌํ˜„ ๊ณผ์ •๊ณผ ์ฝ”๋“œ ์„ค๋ช…์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?


2. ๐Ÿ“€ ์ธ๋ฑ์‹ฑ - ์‡ผํ•‘๋ชฐ ๋ถ€๋ถ„ ์ผ์น˜ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”: ์†๋„ 7๋ฐฐ ๊ฐœ์„ 

๋ฌธ์ œ์ : QueryDSL์—์„œ MATCH ... AGAINST ๊ตฌ๋ฌธ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
๊ฐœ์„ : CustomFunction + NGRAM ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค ์‚ฌ์šฉ

Before
After

๊ฐœ์„  ๊ฒฐ๊ณผ : 137 ms -> 20 ms ์•ฝ 7๋ฐฐ ์†๋„ ๊ฐœ์„ 

๐Ÿ”— ๋” ์ž์„ธํ•œ ๋‚ด์šฉ ๋ณด๊ธฐ

๐Ÿ“Œ ์กฐ๊ธˆ ๋” ์ƒ์„ธํ•œ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?


3. ๐Ÿ’พ ์บ์‹ฑ - ๐Ÿ† ์‡ผํ•‘๋ชฐ ๋žญํ‚น ์ตœ์ ํ™”: DB์—์„œ Redis๊นŒ์ง€

๐Ÿ† ์‡ผํ•‘๋ชฐ ๋žญํ‚น ์ตœ์ ํ™”: DB์—์„œ Redis๊นŒ์ง€

์‡ผํ•‘๋ชฐ ์ˆœ์œ„๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด DB ์กฐํšŒ โ†’ ์บ์‹ฑ ์ ์šฉ โ†’ Redis ์ตœ์ ํ™”๊นŒ์ง€ ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ๋ฒ•์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์กฐํšŒ ์†๋„, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ, ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Ž ๊ฐœ์š”

์‡ผํ•‘๋ชฐ ๋žญํ‚น์„ ์กฐํšŒํ•˜๋Š” API์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์—์„œ ์บ์‹ฑ๊ณผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐ ๋ฐฉ์‹: ๋‹จ์ˆœํžˆ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
  • ๋ฌธ์ œ์ : ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ DB ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง€๊ณ  ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ์ฑ…: Spring Cache, Redis๋ฅผ ๋„์ž…ํ•˜์—ฌ ์กฐํšŒ ์†๋„๋ฅผ ๊ฐœ์„ 
  • ์ตœ์ ํ™”: Redis Sorted Set + Hash๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ & ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ

๐“Š ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹

โœ… V0. ๊ธฐ๋ณธ DB ์กฐํšŒ

  • DB์—์„œ ORDER BY viewCount DESC LIMIT 100์„ ์‚ฌ์šฉํ•ด ๋žญํ‚น ์กฐํšŒ
  • ์žฅ์ : ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‹จ์ : ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ DB ๋ถ€ํ•˜ ์‹ฌํ™” โ†’ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ

โœ… V1. ์บ์‹ฑ ์ ์šฉ (Spring Cache & Redis)

  • V1-1: Spring Cache (๋กœ์ปฌ ์บ์‹œ) ์ ์šฉ โ†’ ์†๋„ ๊ฐœ์„ , ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๊ฐ€๋Šฅ
  • V1-2: Redis ์ ์šฉ โ†’ ๋ถ„์‚ฐ ์บ์‹œ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ. TTL์„ ํ™œ์šฉํ•ด ์ตœ์‹  ๋ฐ์ดํ„ฐ ์œ ์ง€
  • V1-3: @Cacheable & @CachePut ํ™œ์šฉ โ†’ ์กฐํšŒ์ˆ˜ ์–ด๋ทฐ์ง• ๋ฐฉ์ง€

โš ๏ธ ๋ฌธ์ œ์ :

  • ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ตœ์‹  ์ƒํƒœ๊ฐ€ ์•„๋‹ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ
  • ์กฐํšŒ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•  ๋•Œ ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

โœ… V2. Redis ๊ธฐ๋ฐ˜ ์ตœ์ ํ™” (Sorted Set + Hash)

  • ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์บ์‹ฑ์˜ ๋ฌธ์ œ: ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ยท์‚ญ์ œ ์‹œ ์ˆœ์„œ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ ๋น„์šฉ ์ฆ๊ฐ€ (O(N))
  • ํ•ด๊ฒฐ์ฑ…: Redis Sorted Set(ZSet) + Hash ์‚ฌ์šฉ
  • Sorted Set: ์กฐํšŒ์ˆ˜๋ฅผ ์ ์ˆ˜(score)๋กœ ์ €์žฅํ•˜์—ฌ ์ž๋™ ์ •๋ ฌ
  • Hash: ์‡ผํ•‘๋ชฐ ์ •๋ณด๋ฅผ Key-Value ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜์—ฌ ๋น ๋ฅธ ์กฐํšŒ ๊ฐ€๋Šฅ
  • ์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€ ๋กœ์ง ์ตœ์ ํ™” โ†’ incrementScore() ์‚ฌ์šฉ
  • ์ •๋ ฌ ๋น„์šฉ ๊ฐ์†Œ (O(log N))

๐Ÿงฉ ์ถ”๊ฐ€ ํ•ด๊ฒฐ ์‚ฌํ•ญ:

  • ํŠธ๋žœ์žญ์…˜ ์ ์šฉ (MULTI/EXEC):
    • Redis๊ฐ€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ชจ๋ธ์ด๊ธฐ์— ๋ณตํ•ฉ ์—ฐ์‚ฐ์‹œ ํŠธ๋žœ์žญ์…˜์„ ํ™œ์šฉํ•˜๋ฉด ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
  • ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ (CASE-WHEN ํ™œ์šฉ) โ†’ 10๋ถ„ ๋‹จ์œ„๋กœ DB์— ์ผ๊ด„ ๋ฐ˜์˜

๐Ÿ› ๏ธ ์ฃผ์š” ๊ธฐ์ˆ  & ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต

๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
DB ๋ถ€ํ•˜ ์ฆ๊ฐ€ Redis ์บ์‹ฑ ๋„์ž… (Spring Cache & Redis)
๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ €์žฅ์˜ ๋น„ํšจ์œจ์„ฑ Sorted Set + Hash ์กฐํ•ฉ์œผ๋กœ ๊ฐœ์„ 
์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€ ์‹œ ๋™์‹œ์„ฑ ๋ฌธ์ œ Sorted Set ํ™œ์šฉ ๋ฐ Redis ์ž์ฒด Atomic ์—ฐ์‚ฐ ํ™œ์šฉ
์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ TTL ์„ค์ • ๋ฐ 10๋ถ„ ๋‹จ์œ„ ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ

๐Ÿ”— ๋” ์ž์„ธํ•œ ๋‚ด์šฉ ๋ณด๊ธฐ

๐Ÿ“Œ ์ƒ์„ธํ•œ ๊ตฌํ˜„ ๊ณผ์ •๊ณผ ์ฝ”๋“œ ์„ค๋ช…์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?


๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Members

๐Ÿ‘‘ ํŒ€์žฅ ํŒ€์› ํŒ€์› ํŒ€์›
์ž„์˜๋นˆ ๊ฐ•์„ฑ์šฑ ๊น€์‹ ์šฐ ์œค์ฃผ์˜

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages