๐ ์ค๋์ ์ด๋ค ํ๋ฃจ์์ง..
ํ๋ฃจ ์ข ์ผ ๋ฐฐ์ก์ด๋ ์ํ ์ฌ๊ณ ๊ฐ์ ๋ก์ง์ ์๊ฐํ๋ค๊ฐ ํ๋ฃจ๊ฐ ๋๋ ๊ฑฐ ๊ฐ๋ค.
๋ถ๋ช ์๊ฐํ ๊ฒ์ด ๋ณ๋ก ์์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋๋ฐ, ๋ง์ ๋ ธํธ์ ์ ๋ฆฌํ๋ฉด์ ํ๋๊น ์๊ฐํ ๊ฒ๋ ๋ง๊ณ ๋ก์ง ์์ฒด๋ ๋ณต์กํ ๊ฒ ๊ฐ๋ค๋ ๋๋์ด ๋ฝ์ ์๋ค.. ๊ทธ๋์ ํ๋ํ๋ ์๊ฐํ๋ฉด์ ๋ ธํธ์ ์ ๋ฆฌํ๊ณ ์ด ์ ๋๋ฉด ๋๊ฒ ์ง?!๋ผ๊ณ ์๊ฐํ๋๋ฐ ์ถ๊ฐ์ ์ผ๋ก ์๊ฐํ ๊ฒ์ด ์๊ฒจ๋ฒ๋ ธ๋ค ใ ..
Kafka์ Redis๋ฅผ ์ฌ์ฉํด์ ์ํ ๊ด๋ จ ์์ฒญ๊ณผ ๋ฐฐ์ก ๊ด๋ จ ์์ฒญ์ ํ ํฝ์ ๋ถ๋ฆฌํ๊ณ , ๋ฉ์์ง ๋ถ๊ธฐ ์ฒ๋ฆฌ์ ๋์์ฑ ์ ์ด ๋ฑ๋ฑ์ ๋ ์๊ฐํด์ผ ํ๋ค. ์์ง Kafak์ ๋ํ ์ดํด๋๊ฐ ๋ฎ์์ ๋ก์ง์ ๊ตฌํํ๋ ค๋ฉด ์๊ฐ์ด ๊ฝค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์ง๋ง, ํ๋ฒ ๊ตฌํํด๋๊ณ ๋๋ฉด ํ์คํ ๋์๊ฒ ๋์์ด ๋ง์ด ๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ด๋ ต๋ค๋ ์๊ฐ๋ณด๋ค๋ ์ฐจ๊ทผ์ฐจ๊ทผ ํ๋์ฉ ํด๊ฒฐํด๋๊ฐ์๋ ์๊ฐ๋ง ๊ฐ์ง๊ณ ๋ด๊ฐ ๋งก์ ๋ถ๋ถ์ ์๋ฒฝํ๊ฒ ํด๊ฒฐํ ์ ์๋๋ก ๊พธ์คํ ์๊ฐํ๊ณ ๊ตฌํํด์ผ ํ ๊ฒ ๊ฐ๋ค!
๐ก ์๋กญ๊ฒ ์๊ฒ ๋ ๋ด์ฉ์ ๋ญ๊ฐ ์๋๋ผ..?!
๋ฐฐ์ก๊ณผ ์ฌ๊ณ ๊ฐ์ ๋ถ๋ฆฌ ์ค๊ณ
์ ๋ฐฐ์ก๊ณผ ์ฌ๊ณ ๋ก์ง์ ๋ถ๋ฆฌํด์ผ ํ ๊น?
- ๋ฐฐ์ก ์์ฑ ์ ์ฌ๊ณ ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ฐจ๊ฐํ๋ฉด ๋ฐฐ์ก ์๋ต์ด ์ง์ฐ๋ ์ ์๋ค.
- ์ฌ๊ณ ๊ฐ์๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ I/O ์์ ์ด๋ฏ๋ก, ๋ณ๋ Kafka ํ ํฝ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค.
- ๋ฐ๋ผ์ ๋ฐฐ์ก ์์ฑ ๋ก์ง๊ณผ ์ฌ๊ณ ๊ฐ์ ๋ก์ง์ ๋ถ๋ฆฌํ๊ณ , Kafka ๋ฉ์์ง๋ฅผ ํตํด ์ฌ๊ณ ๊ฐ์๋ฅผ ์์ฒญํ๋๋ก ๊ตฌ์กฐ ์ค๊ณ๋ฅผ ์งํํด์ผ ํ๋ค.
๐งฑ ๊ตฌ์กฐ ์ค๊ณ ๋ชฉํ
- Kafka๋ก ์ฌ๊ณ ๊ด๋ จ ์์ฒญ์ ๋ฉ์์ง๋ก ์ ๋ฌ
- ์ฌ๊ณ ๊ด๋ฆฌ ์๋น์ค(Consumer)๊ฐ ๋ฉ์์ง๋ฅผ ์์ ํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ
- ์ฒ๋ฆฌ ์๋ฃ ์ฌ๋ถ๋ Redis๋ฅผ ํตํด ์ถ์
- ๋ฐฐ์ก ์์ฑ์ ์ฌ๊ณ ์ฐจ๊ฐ ์์ฒญ๋ง ๋ฐํํ๊ณ ์ฆ์ ์๋ต
→ ๊ฒฐ๊ณผ ํ์ธ์ Redis or ์ถ๊ฐ ์๋ฆผ์ผ๋ก ํ์ ์ฒ๋ฆฌ
๐งฉ Kafka + Redis ๊ธฐ๋ฐ ๊ตฌ์ฑ ์์ ์ ๋ฆฌ
1. ์ฌ๊ณ ๊ด๋ฆฌ์ฉ Kafka ํ ํฝ ๋ถ๋ฆฌ
- ๋ชฉ์ : ์ฌ๊ณ ๊ด๋ฆฌ ์์ฒญ์ ์ํ/์ฃผ๋ฌธ/๊ฒฐ์ ๋ฑ ๋ค์ํ ๊ณณ์์ ๋ฐ์ํ๋ฏ๋ก, ๋ฐฐ์ก ์๋ฆผ ํ ํฝ๊ณผ ๋ถ๋ฆฌํด์ผ ํ๋ค.
- ์์
- stock-management-topic
- delivery-created-topic (๋ณ๋)
2. Kafka Consumer ์ค๊ณ – ๋ฉ์์ง ํ์ ๋ถ๊ธฐ
- Switch-case or if-else ๋ก ๋ฉ์์ง ํ์ (messageType)์ ๋ฐ๋ผ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค.
- ์์ ๋ฉ์์ง ํ์
- STOCK_DECREASE
- PRICE_UPDATE
- STOCK_CORRECTION
switch (message.getType()) {
case STOCK_DECREASE:
handleStockDecrease(message);
break;
case PRICE_UPDATE:
handlePriceUpdate(message);
break;
...
}
3. ์ฌ๊ณ ๊ฐ์ ๋ก์ง (๋์์ฑ ์ ์ด ํฌํจ)
- STOCK_DECREASE ๋ฉ์์ง๋ฅผ ์์ ํ Consumer๋ DB ๋๋ Redis ๋ฝ์ ํ์ฉํด ๋์์ฑ ์ ์ด
- ์ฌ๊ณ ๊ฐ ์ถฉ๋ถํ์ง ์์ผ๋ฉด ์ฒ๋ฆฌ ์คํจ → ๋ณ๋ ์์ธ ์ฒ๋ฆฌ ํ ๋๋ ๋ณด๋ฅ ์ํ ์ ์ฅ
4. Redis๋ฅผ ํตํ ์ํ ์ ์ฅ ๋ฐ ์กฐํ
- ์: ๊ฐ๊ฒฉ ๋ณ๊ฒฝ ์์ฒญ์ด ์๋ฃ๋๋ฉด Redis์ ์๋ฃ ์ฌ๋ถ ์ ์ฅ
- Redis Key ์์:
product:price:update:12345 → true
stock:decrease:orderId:111 → success
- Value๋ Boolean ํ์ ์ผ๋ก ์ ์ฅํ ์์ ์ด๋ค.
๐งฉ ์์ ํ๋ฆ – ๊ฐ๊ฒฉ ๋ณ๊ฒฝ ์์ฒญ
- ๊ด๋ฆฌ์๊ฐ ์ํ ๊ฐ๊ฒฉ ๋ณ๊ฒฝ ์์ฒญ
- Kafka์ PRICE_UPDATE ๋ฉ์์ง ์ ์ก
- Consumer๊ฐ ๋ฉ์์ง ์์ → ์ฒ๋ฆฌ ์๋ฃ ํ
- Redis์ "product:price:update:12345" → true ์ ์ฅ
- ํ๋งค์ ํ๋ฉด์์ Redis ๊ฐ ํ์ธ ํ ์ต์ข ์๋ต ์ ์ก
โ ์ ๋ฆฌ: ๋ด๊ฐ ํด์ผ ํ ์์ (์ฐ์ ์์)
- Kafka ํ ํฝ ๋ถ๋ฆฌ → stock-management-topic ๋ฐ๋ก ์์ฑ
- ๋ฉ์์ง ํ์ ์ ์ → ์ฌ๊ณ ๊ฐ์, ๊ฐ๊ฒฉ ๋ณ๋ ๋ฑ ๊ตฌ๋ถ
- Consumer ์ค๊ณ → switch๋ก ํ์ ๋ณ ๋ถ๊ธฐ ์ฒ๋ฆฌ
- Redis ์ ์ฅ ๊ตฌํ → ์๋ฃ ์ฌ๋ถ๋ฅผ ํค๋ก ์ ์ฅ(Boolean)
- ์ฌ๊ณ ๊ฐ์ ๋ก์ง์ ๋ฝ + ์คํจ ์ฒ๋ฆฌ ํฌํจ → ๋น๊ด์ ๋ฝ or Redis ๋ฝ ์ฌ์ฉ ๊ฐ๋ฅ
๐๏ธ ๋ด์ผ์ ๋ญ ํ์ง?!
โ๏ธ Kafka + Redis ๋ก์ง ์๊ฐํ๊ณ ๊ตฌํ ์์ํ๊ธฐ
โ๏ธ API ๋ช
์ธ์ ์์
โ๏ธ TIL ์์ฑ
'๐ฅ๏ธ ๋ญ๊ฐ๋ญ๊ฐํ๋ก์ ํธ > โ๏ธ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ํ๋ก์ ํธ 11์ผ์ฐจ.. ๋๋์ด ์ฌ๊ณ ๊ฐ์๋ ๋ฐฐ์ก ์์ฑ์ด๋ ์ฐ๊ฒฐ์?! (1) | 2025.05.29 |
---|---|
[TIL] ํ๋ก์ ํธ 9์ผ์ฐจ.. ์ฌ๊ณ ๊ฐ์ ๋ก์ง ๊ตฌํ ๋๋ด๊ธฐ!! (0) | 2025.05.27 |
[TIL] ํ๋ก์ ํธ 5์ผ์ฐจ.. ๋ฐฐ์ก ๊ด๋ จ ๋ก์ง ๋ ์๊ฐํด๋ณด๊ธฐ.. (0) | 2025.05.23 |
[TIL] ํ๋ก์ ํธ 3์ผ์ฐจ!! (0) | 2025.05.22 |
[TIL] ํ๋ก์ ํธ 2์ผ์ฐจ!! (0) | 2025.05.22 |