Product Service - Genie-Uss/genieus GitHub Wiki
๋์์ฑ์ด ๋์ ์ด์ปค๋จธ์ค ํ๊ฒฝ์์ ์ํ ๊ด๋ฆฌ์ ์ฌ๊ณ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ์์คํ ์ ์ค๊ณํ์ต๋๋ค.
๋์ ์ฃผ๋ฌธ ์์ฒญ์์์ ์ฌ๊ณ ์ด๊ณผ ํ๋งค ๋ฐฉ์ง
๋ถ์ฐ ํ๊ฒฝ์์์ ์ฌ๊ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ
์ฃผ๋ฌธ ์ทจ์/๋ง๋ฃ ์ ์ ํํ ์ฌ๊ณ ๋ณต๊ตฌ
๋์ฉ๋ ์ฌ๊ณ ์ด๋ฒคํธ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ
"๋์์ฑ ํ๊ฒฝ์์ ์ฌ๊ณ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์ด๋ป๊ฒ ๋ณด์ฅํ ๊ฒ์ธ๊ฐ?"
๋จ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ๋ง์ผ๋ก๋ ๋์ ๋์์ฑ ์ํฉ์์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ํ ๋ถ์ฐ๋ ์ฃผ๋ฌธ ์์คํ ์์ ์ฌ๊ณ ๊ด๋ จ ์ด๋ฒคํธ๋ค์ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด์๋ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ ์งํด์ผ ํ์ต๋๋ค.
๋ฐ๋ผ์ Redis ๊ธฐ๋ฐ ์์์ ์ฐ์ฐ๊ณผ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ, ์ฑ๋ฅ๊ณผ ์ ํฉ์ฑ์ ๋ชจ๋ ํ๋ณดํ๋ ๋ฐฉํฅ์ผ๋ก ์ค๊ณํ์ต๋๋ค.
๋์์ฑ ์ ์ด๊ฐ ์ค์ํ ์ฌ๊ณ ์ฐจ๊ฐ ๋ฐ ๊ฒ์ฆ์ ๋ด๋นํฉ๋๋ค.
- Redis Lua Script๋ก ์ฌ๊ณ ๊ฒ์ฆ๊ณผ ์ฐจ๊ฐ์ ์์์ ์ผ๋ก ์ฒ๋ฆฌ
- ์ํ ์ํ๋ณ ์บ์ฑ ์ ๋ต ๊ตฌํ (๋ฉํ์ ๋ณด, ์ด์ฌ๊ณ , ์ฌ์ฉ์ฌ๊ณ ๋ถ๋ฆฌ)
- ์ค๋ณต ์์ฒญ ๋ฐฉ์ง๋ฅผ ์ํ ๋ฉฑ๋ฑ์ฑ ์ฒ๋ฆฌ
- ์ํ ์ํ ๊ธฐ๋ฐ ์ฌ๊ณ ๊ด๋ฆฌ (ํ๋งค์ค/ํ์ ์๋ ์ ํ)
๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ํจ์จ์ ์ธ ์ฌ๊ณ ๋ณต๊ตฌ ๋ฐ ํ์คํ ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
- Kafka Consumer ๊ตฌํ: ์ฃผ๋ฌธ ์ทจ์/๋ง๋ฃ ์ด๋ฒคํธ ์์ ๋ฐ ์ฒ๋ฆฌ
- Redis ZSet ์ด๋ฒคํธ ํ: ์์ ๋ณด์ฅ๋ ์ฌ๊ณ ์ด๋ฒคํธ ์ ์ฌ ์์คํ
- Spring Batch ์ฌ๊ณ ํ์คํ ๋ฆฌ: ์ด๋ฒคํธ ์ผ๊ด ์ฒ๋ฆฌ ๋ฐ ์์ํ
- StockEventProcessingService: Score ๊ธฐ๋ฐ ์์ ๋ณด์ฅ ๋ฐ ์ค๋ณต ์ฒ๋ฆฌ ๋ฐฉ์ง
- ProductEventMapper: ์ด๋ฒคํธ ๋ฐ์ดํฐ ๋ณํ ๋ฐ ๋๋ฉ์ธ ๊ฐ์ฒด ๋งคํ
- ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ: ์ค๋ณต ํค ๊ธฐ๋ฐ ์ฌ์ฒ๋ฆฌ ๋ฐฉ์ง ์์คํ
ํ์ฅ์ฑ๊ณผ ์์ ์ฑ์ ์ํ ์์คํ ์ต์ ํ๋ฅผ ๊ตฌํํ์ต๋๋ค.
- ์บ์ ์ ๋ต: ์ํ ์ ๋ณด์ ์ฌ๊ณ ์ ๋ณด์ ๋ถ๋ฆฌ๋ TTL ๊ด๋ฆฌ
- ๋ฐฐ์น ์ฒ๋ฆฌ: ๋์ฉ๋ ์ฌ๊ณ ์ด๋ฒคํธ์ ํจ์จ์ ์ธ ์ผ๊ด ์ฒ๋ฆฌ
- ๋ถ์ฐ ์ถ์ : Kafka ๋ฉ์์ง ์ฒ๋ฆฌ ๊ณผ์ ์ ์ถ์ ๊ฐ๋ฅ์ฑ ํ๋ณด
-- Redis Lua Script ์์
-- ๋ชจ๋ ์ํ์ ์ฌ๊ณ ๋ฅผ ๊ฒ์ฆํ ํ, ์์์ ์ผ๋ก ์ฐจ๊ฐ ์ฒ๋ฆฌ
for i = 1, #KEYS do
-- ์ฌ๊ณ ๊ฒ์ฆ ๋ก์ง
-- ์์์ ์ฐจ๊ฐ ์คํ
end
-
Score ๊ธฐ๋ฐ ์ ๋ ฌ:
timestamp * 1000 + productId
๋ก ๊ณ ์ ์์ ์์ฑ - ๋ฐฐ์น ์ฒ๋ฆฌ: ๋ง์ง๋ง ์ฒ๋ฆฌ ์์น ์ถ์ ์ผ๋ก ์ฐ์์ฑ ๋ณด์ฅ
-
์ค๋ณต ํค ์์ฑ:
orderId:timestamp
๊ธฐ๋ฐ ์ค๋ณต ์ฒ๋ฆฌ ๋ฐฉ์ง - Redis Set ํ์ฉ: 24์๊ฐ TTL๋ก ํจ์จ์ ์ธ ์ค๋ณต ๊ฒ์ฌ