๐ŸŒ Infra

[MQ] Pub/Sub ๊ตฌ์กฐ - RabbitMQ, Kafka, Redis

jcowwk 2025. 1. 13. 15:13

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