๊ณ ์ ์ ์ธ ๋ฉ์์ง ํ๋ ๋จ์ํ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ ์๋นํ๋ ํํ์์ง๋ง ํ๋ ๋ฉ์์ง ํ๋ EDA(Event Driven Architecture) ๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ฉ์์ง๋ฅผ ์๊ตฌ ์ ์ฅํ์ฌ ๋ฐ๋ณต ์๋นํ๋ ํํ๋ก ๋ณํํ๊ณ ์๋ค. ์ด์ ๊ฐ์ด ๋ฉ์์ง๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ๋ฉ์์ง ์๋ฒ๋ฅผ event broker ๋ผ ๋ถ๋ฅธ๋ค. ๊ฐ์ฅ ๋์ค์ ์ผ๋ก ์ฌ์ฉํ๋ ํ๋ซํผ์ผ๋ก๋ kafka ์ด๋ฉฐ ๊ณ ์ ์ ์ธ Message Queue ๋ค๋ ๋ฉ์์ง๋ฅผ ์ ์ฅ, ์ฌ์๋นํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์๋ค. (RabbitMQ ๋ ๋ฉ์์ง๋ฅผ ์ ์ฅํด ์ฌ์์ํ ๋ ๋ฉ์์ง ์ ์ค์ ๋ฐฉ์งํ์ง๋ง ์์ง์ ์๊ตฌ ์ ์ฅ์ด ๋์ง๋ ์๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ค.)
Message Queue ์ ์ฅ์
๋ฉ์์ง ํ์ ๊ณตํต์ ์ธ ์ฅ์ ์ fan-out(ํฌ-์์), asynchronous processing(๋น๋๊ธฐ ์ฒ๋ฆฌ), decoupling(๊ฒฐํฉ๋ ์ํ) ์ธ ๊ฒ ๊ฐ๋ค.
fan-out ๋ ๋ ผ๋ฆฌ ํ๋ก์์ ํ๋์ ๋ ผ๋ฆฌ ๊ฒ์ดํธ์ ์ถ๋ ฅ์ด ์ผ๋ง๋ ๋ง์ ๋ ผ๋ฆฌ ๊ฒ์ดํธ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉ๋๋์ง ์์ ํ ๋ ์ฐ์ธ๋ค๊ณ ํ๋ค. ์ฆ, ์์ฐ์๊ฐ ๋ฉ์์ง๋ฅผ ๋๊ธฐ์ด์ ๋ฐํํ๋ฉด ์ฌ๋ฌ ์๋น์๋ ๊ฐ๊ฐ์ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ์๋ฅผ ๋ค์ด, ๊ฒฐ์ ์๋น์ค๋ ๊ฒฐ์ , ์๋ฆผ, ๋ถ์์ ๋ค์ด์คํธ๋ฆผ ์๋น์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.

asynchronous processing ๋ ๋ก์ง์ ๋๊ธฐํ ํ์๊ฐ ์๋ค๋ ์๋ฏธ์ด๋ค. ๋ง์ฝ, Tomcat ๊ธฐ๋ฐ์ WAS ์์ ์ธ๋ถ API call ์ ์ฌ์ฉํ๋ค๋ฉด ์๋ต ์ฌ ๋๊น์ง ํด๋น ์ค๋ ๋๊ฐ ๋ธ๋กํน ๋์ด์ผ ํ์ง๋ง ๋ฉ์์ง ํ๋ฅผ ํ์ฉํ๋ค๋ฉด ๋๊ธฐ์ด์ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ ๋๊ธฐ์ด์ ๊ตฌ๋ ํ์ฌ ๋ก์ง์ ์ฒ๋ฆฌํ๋ค๋ฉด ์ค๋ ๋๋ฅผ ๋ธ๋กํนํ์ง ์์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค. ์๋ก ๊ฒฐ์ ์ง์๊ฐ ๋๊ธฐ์ด์ ๋ฐฐ์น๋๊ณ ๊ฒฐ์ ๊ฐ ์๋ฃ๋๋ฉด ๊ณ ๊ฐ์๊ฒ ์๋ฆผ์ ์ ์กํ๋ ๋ฐฉ์์ ๋ค ์ ์๋ค.
decoupling ์ ์๋ฏธ๋ ๊ฐ ์๋ฒ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์์ , ๋ฐฐํฌ ๊ฐ๋ฅํ ๊ตฌ์กฐ๊ฐ ๋ ์ ์๋ค๋ ์ ์ด๋ค. ์๋น์ค๋ ์๋ก ๊ธด๋ฐํ๊ฒ ์์กดํ์ง ์๊ณ ์ ์ ์๋ ๋ฉ์์ง ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด ์๋ก ์ํธ ์์ฉํ๋ฉฐ ์ํคํ ์ฒ ์ค๊ณ์ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ค. horizontal scalability, availability ์ decoupling ์ผ๋ก ์ธํ ๋ถ์ ํจ๊ณผ์ด๋ค. ์์์ ๋ฐ๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ์๋น์ค๋ฅผ ํ์ฅ ๊ฐ๋ฅํด ๋ค์ ์์ฒญ์ ๋ํ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ๊ณ ์๋ฒ์ ์์ ์ฑ์ ๊ธฐ์ฌํ ์ ์๋ค.
ํน์ ์๋น์ค๋ฅผ API server ๋ก ๋ถ๋ฆฌ๋๋ ๊ฒ ๋ํ decoupling(๊ฒฐํฉ๋ ์ํ) ์ผ๋ก ๋ณผ ์ ์์ ๊ฒ์ธ๊ฐ?? YES (๋น์ฐํ ์ด์ผ๊ธฐ์ง๋ง ๋ด๋ถ ์ฝ๋ ๋ํ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฌ์ผ ํ ๊ฒ์ด๋ค.)
RabbitMQ vs Kafka

RabbiqMQ ์ Kafka ๋ ์ฑ๋ฅ(performance) ์ ํ์ฅ์ฑ(scalability) ์์ ์ฐจ์ด๊ฐ ์๋ค. RabbitMQ ๋ ์ด๋น ์๋ง ๊ฐ์ ๋ฉ์์ง(tens of thousands/sec)๋ฅผ ์ฒ๋ฆฌํ์ง๋ง scale-up ์ ํ๋๋ผ๋ ์ฒ๋ฆฌ๋์ ๊ฐ์ ์ ํฌ๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๊ณ ํ๋ค. ๋ฐ๋ฉด kafka ๋ ๋์ ํ์ฅ์ฑ์ผ๋ก ์ด๋น ์๋ฐฑ๋ง ๊ฐ์ ๋ฉ์์ง(million/sec)๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
Kafka ๋ ecosystem ์ง์์ด ์ ๋์ด ์๋ค. Kafka ๋ ๋์ฉ๋ ๋ก๊ทธ ์ฒ๋ฆฌ๋ฅผ ์ํด ๊ตฌ์ถ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ต์ ๋น ๋ฐ์ดํฐ์ ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํตํฉํ ์ ์๋ค. RabbitMQ ๋ Kafka ๋งํผ์ ecosystem ์ง์์ ์ํ์ง ์๋๋ค.
RabbitMQ ์ Kafka ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ค ํ๋๋ ๋ฉ์์ง๋ฅผ ์๋นํ๋ ํํ์ด๋ค. RabbitMQ ๋ ๋ฉ์์ง๋ฅผ ๋ฐํ์๊ฐ ๋ณด๋ด๋ ์ฆ์ ์๋น์์๊ฒ ์ ๋ฌํ๋ ํธ์ ๋ชจ๋ธ(push model) ์ด๋ค. ์๋น์์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ฉด ๋ฉ์์ง๋ฅผ ์ญ์ ํ๋ค. ํธ์ ๋ชจ๋ธ์ ์ฆ์ ์๋น์์๊ฒ ๋ฐ๋ก ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์ง์ฐ์ด ๋ฎ์ ์ฅ์ ์ด ์์ง๋ง, ๋ฐํ์์ ๋ฉ์์ง ์ ์ก๋์ด ์ข์ฐ๋๋ฏ๋ก ์๋น์๊ฐ ๊ทธ์ ๋ง๋ ์ฒ๋ฆฌ๋์ ๋ํ ์์ ์คํ์ ๋ง์ถฐ์ผ ํ๋ค.
Kafka ๋ ํ ๋ชจ๋ธ(pull model) ์ด๋ค. RabbitMQ ์ ๋ฐ๋๋ก ๋ฉ์์ง ์๋น ์๋๋ฅผ ์๋น์๊ฐ ๊ฒฐ์ ํ๋ค. ํ ๋ชจ๋ธ์ ์๋น์๊ฐ ๋ฉ์์ง๊ฐ ๋ง๋ฃ๋ ๋๊น์ง ๋ฉ์์ง๋ฅผ ๋ณด๊ดํ๊ณ ์๋น์๊ฐ ์์ ์ ์๋์ ๋ง์ถฐ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด ์ผ๊ด ์ฒ๋ฆฌ์ ์ ํฉํ๋ค. ๋ฐ๋ฉด, broker ์ ๋ฉ์์ง๊ฐ ์์ด๋ ์๋น์์๊ฒ ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ค๊ณ ์๋ํด ์๋น์์ ์์์ ๋ญ๋นํ ์ ์๋ค.


์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋น๊ตํด๋ณด์. Kafka ๋ ๋ก๊ทธ ์ฒ๋ฆฌ ๋ฐ ๋ถ์, ์ถ์ฒ์ ์ํ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ, ์์คํ ๋ชจ๋ํฐ๋ง + ์๋, ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์บก์ฒ(CDC), ์ ํ๋ฆฌ์ผ์ด์ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ ๊ฐ์ ๋์ฉ๋ ๋ฉ์์ง ์ฒ๋ฆฌํ๋๋ฐ ํ์ฉ๋๊ณ ์๋ค. ์์ธํ ๋ด์ฉ์ ํด๋น ๋งํฌ์์ ํ์ธํด๋ณผ ์ ์๋ค. RabbiMQ ๋ ๋ฉ์์ง ์ง์ฐ๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํด ๋ฐํ์๊ฐ ๋ฉ์์ง ์ฒ๋ฆฌ ์ง์ฐ ์๊ฐ์ ํค๋(x-delay) ๋ฅผ ํตํด ๊ฒฐ์ ํ ์ ์๋ค.


Reference
'๐ infra > message-queue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Kafka CLI ๋ช ๋ น์ด ์ดํด๋ณด๊ธฐ (0) | 2024.12.04 |
|---|---|
| Kafka ๊ตฌ์กฐ ์ดํด๋ณด๊ธฐ (0) | 2024.12.03 |
