Pub/Sub ๊ตฌ์กฐ - RabbitMQ, Kafka, Redis
1. Pub/Sub ๊ตฌ์กฐ
2. RabbitMQ
3. Kafka
4. Redis
1. Pub/Sub ๊ตฌ์กฐ
Pub/Sub์ ๋ฐํ/๊ตฌ๋ ๋ชจ๋ธ๋ก ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ๊ตฌํํ๋ ๊ตฌ์กฐ์ ๋๋ค.
๋ฐํ์(Publisher)์ ๊ตฌ๋ ์(Subscriber) ๊ฐ์ ์ง์ ์ ์ธ ์ฐ๊ฒฐ์ ์์ ๊ณ , ๋ฉ์์ง ๋ธ๋ก์ปค(Message Broker)๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.

- ๋์ ๋ฐฉ์
1. ๋ฐํ
๋ฐํ์๋ ๋ฉ์์ง๋ฅผ ํน์ ์ฃผ์ (Topic)๋ก ๋ณด๋ ๋๋ค.
๋ฉ์์ง ๋ธ๋ก์ปค๋ ์ด ๋ฉ์์ง๋ฅผ ํด๋น ์ฃผ์ ๋ฅผ ๊ตฌ๋ ํ ๊ตฌ๋ ์๋ค์๊ฒ ์ ๋ฌํฉ๋๋ค.
2. ๊ตฌ๋
๊ตฌ๋ ์๋ ๊ด์ฌ ์๋ ์ฃผ์ (Topic)๋ฅผ ๊ตฌ๋ ํฉ๋๋ค.
๊ตฌ๋ ํ ์ฃผ์ ์์ ๋ฐํ๋ ๋ฉ์์ง๋ฅผ ๋ฉ์์ง ๋ธ๋ก์ปค๋ก๋ถํฐ ์์ ํฉ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ RabbitMQ, Kafka, Redis๊ฐ ์์ต๋๋ค.
Producer/Consumer(Publisher/Subscriber) ๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ณ , ๊ฐ ์๋น์ค์์ Pub/Sub ๋ฐฉ์์ด ๋ค๋ฆ ๋๋ค.
2. RabbitMQ
RabbitMQ๋ AMQP(Advanced Message Queuing Protocol)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํต์ ํ๋ ๋ฉ์์ง ๋ธ๋ก์ปค(Message Broker)์ ๋๋ค.
๋จ์ํ ๋ฉ์์ง ํ ์ด์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ฉ์์ง์ ์ก์ ์์ ์์ ์ ๊ฐ์ ์ค๊ฐ ๊ด๋ฆฌ์ ์ญํ ์ ํฉ๋๋ค.
๋ฉ์์ง๋ฅผ ๋ง์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๊ฑฐ๋ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธธ ๋ ๋ฑ ์ฌ์ฉํฉ๋๋ค.
๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ธ๋ถ ๋ธ๋ก์ปค์ ๋น๊ตํ์ฌ ์ค์น์ ์ค์ ์ด ๊ฐ๋จํ RabbitMQ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋ํ, Producer/Consumer(Publisher/Subscriber), Queue, Exchange, Binding ๊ฐ๋ ์ด ์กด์ฌํฉ๋๋ค.
Producer๋ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ๋ฐ์กํ๋ ์ฃผ์ฒด์ ๋๋ค. ๋ฉ์์ง๋ Exchange๋ฅผ ํตํด Queue์ ์ ๊ทผํ ์ ์์ต๋๋ค.
Consumer๋ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ์ฃผ์ฒด์ ๋๋ค. ๋ฉ์์ง์ ์ง์ ์ ๊ทผํ์ฌ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
Queue๋ Producer์์ ๋ฐ์กํ ๋ฉ์์ง๋ฅผ ๋ณด๊ดํ๋ ์ฅ์์ ๋๋ค.
Binding์ Exchange์๊ฒ ๋ฉ์์ง๋ฅผ ๋ผ์ฐํ ํ ๊ท์น์ ์ง์ ํ๋ ํ์์ ๋๋ค.
Exchange๋ Producer์๊ฒ ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ด๋ค Queue์๊ฒ ๋ฐ์กํ ์ง ๊ฒฐ์ ํ๋ ๊ฐ์ฒด์ ๋๋ค.
์ฌ๊ธฐ์๋ Direct, Topic, Headers, Fanout 4๊ฐ์ ํ์ ์ด ์กด์ฌํฉ๋๋ค.
- ๋์ ๋ฐฉ์
1. ๋ฐํ
Producer๊ฐ Exchange์ ๋ฉ์์ง ๋ฐํํฉ๋๋ค.
2. ๋ผ์ฐํ
Exchange๊ฐ Fanout, Direct, Topic, Header์ ๋ค ๊ฐ์ง ๋ผ์ฐํ ํ์ ์ค ํ๋๋ฅผ ์ ํํ์ฌ Binding ๊ท์น์ ๋ฐ๋ผ ํน์ Queue๋ก ๋ผ์ฐํ ํฉ๋๋ค. ์์ํ๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ, ๋ฉ์์ง๋ ํ์ ์ ์ฅ๋๋ฏ๋ก Consumer๊ฐ ์ฐ๊ฒฐ๋์ง ์์๋ ๋ฉ์์ง๊ฐ ์ ์ค๋์ง ์์ต๋๋ค.
3. ๊ตฌ๋
Consumer๊ฐ Queue๋ฅผ ๊ตฌ๋ ํ์ฌ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ๊ฐ๋๋ค.
3. Kafka
Kafka์์ Pub/Sub ๊ตฌ์กฐ๋ Topic์ Partition์ ์กฐํฉ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค.
๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์คํธ๋ฆฌ๋ฐ ํ์ดํ๋ผ์ธ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋์ ๋ฐฉ์
1. ๋ฐํ
์ด๋ฒคํธ๋ฅผ ๋ฐํํ๋ Producer๊ฐ ์กด์ฌํ๋ฉฐ, Producer๋ ํน์ Topic์ ์ด๋ฒคํธ๋ฅผ ์ ์กํฉ๋๋ค.
์ด ์ด๋ฒคํธ๋ Topic์ ๊ฐ Partition์ ๋ถ์ฐ๋์ด ์ ์ฅ๋ฉ๋๋ค.
๋ฉ์์ง๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ฉฐ, ๋ฉ์์ง ์ ์ค์์ด ํน์ ๊ธฐ๊ฐ ๋์ ์ ์งํ ์ ์์ต๋๋ค.
2. ๊ตฌ๋
ํน์ Topic์ ๊ตฌ๋ ํ๊ณ ์๋ Consumer group ๋ด์ Consumer๋ ๊ฐ๊ฐ 1๊ฐ ์ด์์ partition์ผ๋ก๋ถํฐ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์คํ์ (offset)์ ํตํด ๋ฉ์์ง๋ฅผ ์ฌ์ฒ๋ฆฌํ๊ฑฐ๋ ์ํ๋ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
4. Redis
Redis์์ Pub/Sub ๊ตฌ์กฐ๋ ๋จ์ Channel ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค.
๊ฐ๋ฒผ์ด ๋ฉ์์ง์ด ํ์ํ๊ฑฐ๋ ๋ฉ์์ง ์์ค์ด ํฌ๊ฒ ๋ฌธ์ ๋์ง ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋์ ๋ฐฉ์
1. ๋ฐํ
Publisher๊ฐ ํน์ Channel์ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฉ์์ง๊ฐ Channel์๋ง ์กด์ฌํ๋ฉฐ ์์์ฑ์ ์ง์ํ์ง ์๊ณ , Subscriber๊ฐ ์ฐ๊ฒฐ๋์ง ์์ ์ํ์์ ๋ฐํ๋ ๋ฉ์์ง๋ ์ ์ค๋ฉ๋๋ค.
2. ๊ตฌ๋
Subscriber๋ Channel์ ๊ตฌ๋ ํ๋ฉฐ, ๋ฉ์์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ์์ ํฉ๋๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
[PUB/SUB] PUB/SUB์ ํํค์ณ๋ณด์
์งํํ๊ณ ์๋ ํ๋ก์ ํธ๊ฐ MSA ์ํคํ ์ณ๋ก ๋์ด์๋ค. Lambda์์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ API ์๋ฒ๋ก ์ด๋ป๊ฒ ์ ์กํ ์ง ๊ณ ๋ฏผํ๋ ์ค์ PUB/SUB์ ๊ณต๋ถํ๊ฒ ๋์๋ค.GCP PubSub์์๋ ๋ด๊ฐ subscribe์ ๋ํด์
velog.io
๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ !
ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค <3
'๐ Infra' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Cloud] Spring Cloud (0) | 2025.02.11 |
---|---|
[CI/CD] Github Actions, Jenkins (0) | 2025.01.15 |
[Docker] Docker, Docker Compose, Kubernetes (0) | 2025.01.13 |
[MQ] Springboot STOMP ํ๋กํ ์ฝ์ผ๋ก Web Socket ํต์ ํ๊ธฐ (0) | 2025.01.12 |
[Nginx] Nginx๋ก ๋ก๋๋ฐธ๋ฐ์ฑ ํ๊ธฐ (0) | 2025.01.11 |