๐ ์ค๋์ ์ด๋ค ํ๋ฃจ์์ง..
์ค๋์ ๋๋์ด ์ฌ๊ณ ๊ฐ์ ๋ก์ง์ด๋ ๋ฐฐ์ก ์์ฑ ๋ก์ง์ Kafka๋ฅผ ํ์ฉํด์ ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ค!
๊ทผ๋ฐ ๋ง์ ์ฐ๊ฒฐํ๋ ค๊ณ ์ค๊ณ๋ฅผ ํ๋ค ๋ณด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค..
๋ฐฐ์ก์ ์์ฑํ ๋ ํ์ํ ๋ฐ์ดํฐ๋ค์ ์ ๋ถ ๋ฐ์์ฌ ์ ์๋ ๊ฒ์ด์๋ค..
๋ฐฐ์ก์ ์์ฑํ๊ธฐ ์ํด์๋ orderId, sellerId, senderId, addressId, deliveryRequest ๊ฐ ํ์ํ๋ค.
ํ์ง๋ง ์ง๊ธ ๋น์ฅ ๋ฐ์์ฌ ์ ์๋ ๊ฒ์ orderId์ sellerId์ด๊ณ ๋๋จธ์ง๋ ๋ฐ์์ฌ ์ ์๋ ๊ฒ์ด์๋ค..
๊ทธ๋์ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ด ์งํํ๋ ํ์๋ค๊ณผ ์๊ธฐํด๋ณธ ๊ฒฐ๊ณผ Sender(์ถ๊ณ ์ง(๋ฌผ๋ฅ์ผํฐ))์ Seller(ํ๋งค์) ์ฌ์ด์๋ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ถ๊ฐํ์ฌ ํ๋งค์๊ฐ ์ด๋ ์ถ๊ณ ์ง(๋ฌผ๋ฅ์ผํฐ)๋ก ์ํ์ ๋ณด๋ด์ ๊ด๋ฆฌํด์ผ ํ๋์ง ํ์ธํด์ผ ํ๋ค.
๋ ์ฟ ํก์ ์ดํด๋ณด๋ ์ฃผ๋ฌธ ํ์ด์ง์์ ๋ฐฐ์ก์ง๋ฅผ ํจ๊ป ํ์ํด์ฃผ๊ณ ์์ด์ ์ฃผ๋ฌธ๊ณผ ์ฃผ์ ์ฌ์ด์๋ ์ฐ๊ด๊ด๊ณ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ก ์์ฒญ์ฌํญ์ ๊ฐ ํ์๋ง๋ค ๋ฐฐ์ก์ง๋ฅผ ์ ์ฅํ ๋ ํจ๊ป ์ ์ฅํ๊ณ ์๋ ์์คํ ์ด์๋ค.
์ด ๋ด์ฉ๋ค์ ์ข
ํฉํด์ ํ๊ณ ์๊ฐ์ ๊ฐ๊ฐ ๋ด๋นํ๋ ํ์๋ค์๊ฒ ๋ด์ฉ๋ค ์ค๋ช
ํด ์ฃผ๊ณ ํฉ์์ ์ ์ฐพ๊ฒ ๋์๋ค.
์ด๋ฏธ ์ฃผ๋ฌธ์ ์์ฑํ ๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ฐ์์ ๋๊ธฐ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ฌธ ํํธ์์๋ ๋ฌธ์ ๊ฐ ์์๊ณ , ์ฃผ์์ ๋ฐฐ์ก ์์ฒญ์ฌํญ์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ์ถ๊ณ ์ง(๋ฌผ๋ฅ์ผํฐ)์ ํ๋งค์ ์ฌ์ด์ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ. ์ด ๋ ๊ฐ์ง๋ง ํด๊ฒฐํ๋ค๋ฉด ์ฌ๊ณ ๊ฐ์ ๋ก์ง๊ณผ ๋ฐฐ์ก ์์ฑ ๋ก์ง์ ์ฐ๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋๋ถํฐ ์ฝ ์ผ์ฃผ์ผ์ ๋ ๋ด๊ฐ ํ๋ก์ ํธ๋ฅผ ๋ฆฌ๋ฉํ๊ฒ ๋์๋๋ฐ, ๊ฐ์๊ธฐ ์ฐพ์์จ ์ํฉ์ด๋ผ ๋นํฉ์ค๋ฝ๊ธฐ๋ ํ์ง๋ง ์ด ์ํฉ์ ์ ํด๊ฒฐํด ๋๊ฐ๋ค๋ฉด ๋์๊ฒ ๋ ์ฑ์ฅํ ์ ์๋ ์๊ฐ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํ๋ก์ ํธ๋ฅผ ๋ฆฌ๋ฉํ๋ ๋์ ๋ ์ด์ฌํ ํด์ ์ ์งํ๋ ์ ์๋๋ก ์ด๋์ด์ผ๊ฒ ๋ค!
๐ก ์๋กญ๊ฒ ์๊ฒ ๋ ๋ด์ฉ์ ๋ญ๊ฐ ์๋๋ผ..?!
Kafka Consumer์์ ๋ค๋ฅธ Producer ํธ์ถํ๊ธฐ
Kafka ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ๋ฉด์, ํ๋์ Consumer๊ฐ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ํ ๋ ๋ค๋ฅธ Producer๋ฅผ ํธ์ถํด ๋ค์ ๋จ๊ณ์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ๊ตฌ์กฐ๋ฅผ ์ฒ์์ผ๋ก ์ ์ฉํด๋ดค๋ค.
- ๊ตฌ์กฐ → Kafka Consumer ๋ด๋ถ์์ ๋น์ฆ๋์ค ๋ก์ง ์ํ ํ, ๋ค๋ฅธ Kafka Producer๋ฅผ ํธ์ถ
- ๋ชฉ์ → ๋ฉ์์ง๋ฅผ ํตํ ๋จ๊ณ์ ํ๋ฆ ์ฒ๋ฆฌ (ex. ์ฌ๊ณ ๊ฐ์ → ๋ฐฐ์ก ์์ฑ)
- ์ฅ์ → ์์คํ ๊ฐ ๊ฒฐํฉ๋ ์์ด ์ด๋ฒคํธ ํ๋ฆ์ ์ด์ด๊ฐ ์ ์๋ค.
๐งฉ ์ค์ ์ ์ฉํ ๊ตฌ์กฐ
[TestController] → ProductProducer → Kafka (stock-topic)
↓
ProductConsumer (์ฌ๊ณ ์ฐจ๊ฐ)
↓
๐ DeliveryProducer (๋ฐฐ์ก ๋ฉ์์ง ์ ์ก)
↓
DeliveryConsumer → ๋ฐฐ์ก ์์ฑ
๐งช ์ ์ฉ ํฌ์ธํธ
Consumer์์ ๋ค๋ฅธ Producer๋ฅผ ์ฃผ์ ๋ฐ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
@RequiredArgsConstructor
@Component
public class ProductConsumer {
private final DeliveryProducer deliveryProducer;
@KafkaListener(topics = "stock-topic", ...)
public void listen(...) {
...
deliveryProducer.sendCreateDeliveryMessage(...);
}
}
๋ค์ ๋จ๊ณ๋ก ์ด๋ฒคํธ๋ฅผ ๋๊ธฐ๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ธ์ค ํ๋ฆ์ ์ ์ฐ์ฑ์ ํ๋ณดํ ์ ์๋ค.
๋๊ธฐ ํธ์ถ์ด ์๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์์ด๋ผ ํ์ฅ์ฑ์ ์ ๋ฆฌํ๋ค.
โ ๏ธ ์ ์์ฌํญ
- ์์ธ ์ฒ๋ฆฌ → ๋ฉ์์ง ์ฒ๋ฆฌ ์ค ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ฌ์ฒ๋ฆฌ ์ ์ฑ ๋๋ DLQ ํ์ ์ฌ๋ถ ๊ฒํ ๊ฐ ํ์ํ๋ค.
- ๋ฉ์์ง ์ ํจ์ฑ → ์ ๋ฌํ DTO๋ ์ง๋ ฌํ ๊ฐ๋ฅํ ํํ๋ก ์ค๊ณํด์ผ ํ๋ค.
- ์์ ๋ณด์ฅ → Kafka ํํฐ์ ํค ์ค์ ์ด ์์ผ๋ฉด ๋ฉ์์ง ์์ ๋ณด์ฅ์ ๋ถ๊ฐํ ์ ์๋ค.
๐ ์ค๋์ ์ธ์ฌ์ดํธ
Kafka ๋ฉ์์ง ๊ธฐ๋ฐ ์ฒ๋ฆฌ์์ ์ด๋ฒคํธ ๊ฐ ํ๋ฆ์ ์ด์ด์ฃผ๊ธฐ ์ํด Consumer → ๋ค๋ฅธ Producer ํธ์ถ ๊ตฌ์กฐ๊ฐ ์ ์ฉํ๋ค๋ ๊ฑธ ์ฒ์ ์ฒด๊ฐํ๋ค.
์ด ๊ตฌ์กฐ๋ ํฅํ ๋ค์ํ ๋น์ฆ๋์ค ์๋๋ฆฌ์ค์์ ์ ์ฉํ ์ ์๋ ์ค์ํ ๋ฉ์์ง ํจํด์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
๐๏ธ ๋ด์ผ์ ๋ญ ํ์ง?!
โ๏ธ ์ฌ๊ณ ๊ฐ์ ๋ก์ง๊ณผ ๋ฐฐ์ก ์์ฑ ๋ก์ง ์ฐ๊ฒฐ ๋ง๋ฌด๋ฆฌํ๊ธฐ
โ๏ธ API ๋ช
์ธ์ ์์
โ๏ธ TIL ์์ฑ
'๐ฅ๏ธ ๋ญ๊ฐ๋ญ๊ฐํ๋ก์ ํธ > โ๏ธ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ํ๋ก์ ํธ 9์ผ์ฐจ.. ์ฌ๊ณ ๊ฐ์ ๋ก์ง ๊ตฌํ ๋๋ด๊ธฐ!! (0) | 2025.05.27 |
---|---|
[TIL] ํ๋ก์ ํธ 8์ผ์ฐจ.. ์ถ๊ฐ ๋ก์ง ์๊ฐํ๋ค ๋จธ๋ฆฌ๊ฐ ํฐ์ ธ๋ฒ๋ ค.. (1) | 2025.05.26 |
[TIL] ํ๋ก์ ํธ 5์ผ์ฐจ.. ๋ฐฐ์ก ๊ด๋ จ ๋ก์ง ๋ ์๊ฐํด๋ณด๊ธฐ.. (0) | 2025.05.23 |
[TIL] ํ๋ก์ ํธ 3์ผ์ฐจ!! (0) | 2025.05.22 |
[TIL] ํ๋ก์ ํธ 2์ผ์ฐจ!! (0) | 2025.05.22 |