RabbitMQ๋?
๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด(MOM)๋ก์, ๋ถ์ฐ ์์คํ
์์ ์ ํ๋ฆฌ์ผ์ด์
์ปดํฌ๋ํธ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์์ ์ ์ด๊ณ ํ์คํ๊ฒ ์ ์กํ๊ธฐ ์ํด ์ค๊ณ๋ ์คํ์์ค ์ํํธ์จ์ด์ด๋ค. RabbitMQ๋ ๋ค์ํ ํ๋กํ ์ฝ์ ์ง์ํ๋ฉฐ, ์ฃผ๋ก AMQP(Advanced Message Queuing Protocol) ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค. AMQP๋ ๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด ์์คํ
์์ ์์ ์ ์ธ ๋ฉ์์ง ์ ์ก์ ์ํ ํ์ค ํ๋กํ ์ฝ๋ก, RabbitMQ๋ ์ด ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
RabbitMQ๋ ํ(Queue)์ ๊ตํ๊ธฐ(Exchange)๋ฅผ ์ค์ฌ์ผ๋ก ๋์ํ๋๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ํ์ ๋ณด๋ด๋ ๊ฒ์ '๋ฉ์์ง ๋ฐํ(Publish)'์ด๋ผ๊ณ ํ๋ฉฐ, ํ๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ '๋ฉ์์ง ๊ตฌ๋
(Subscribe)'์ด๋ผ๊ณ ํ๋ค. RabbitMQ๋ ์ด๋ฌํ ๋ฐํ-๊ตฌ๋
๋ชจ๋ธ์ ํตํด ๋ฉ์์ง๋ฅผ ์์ ์ ์ผ๋ก ์ ์กํ๊ฒ ๋๋ค๊ณ ํ ์ ์๋ค.
RabbitMQ๋ ์ด๋ฌํ ๋ฉ์์ง ์ ์ก ์์คํ
์ ํตํด, ๋ถ์ฐ ์์คํ
์์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋น๋๊ธฐ ์ฒ๋ฆฌ, ์ ํ๋ฆฌ์ผ์ด์
๊ฐ ์ฐ๋ ๋ฑ์ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
RabbitMq๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ / ํ์ํ ๊ฒฝ์ฐ
๊ทผ๋ณธ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํ์ฌ ์ฌ์ฉํ๋ค.
๐ ์์ฒญ์ ๋ง์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ ๋
๐ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ์๊ฐ์ด ๊ธธ ๋
๐ ๋ง์ ์์ ์ด ์์ฒญ๋์ด ์ฒ๋ฆฌ๋ฅผ ํด์ผํ ๋
๐ ํด๋นํ๋ ์์ฒญ์ ๋ค๋ฅธ API์๊ฒ ์์ํ๊ณ ๋น ๋ฅธ ์๋ต์ ํ ๋
Message Broker
rabbitMq์ ๋ํ ์ค๋ช ์ ํ ๋
message broker ๋ผ๋ ๋ง์ ๋นผ๊ณ ๋งํ ์ ์๋ค.
Message Broker๊ฐ ๋๋์ฒด ๋ญ๊น?
๋ฉ์์ง ๋ธ๋ก์ปค๋ ๋ถ์ฐ ์์คํ ์์ ์๋ก ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ํต์ ์ ์ค๊ฐํ๋ ๋ฏธ๋ค์จ์ด์ด๋ค. ๋ฉ์์ง ๋ธ๋ก์ปค๋ ๋ฐ์ ์๊ฐ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ์์ ์๊ฐ ๊ตฌ๋ ํ ์ ์๋๋ก ์ค๊ฐํ๋ ์ญํ ์ ํ๋ค. ๋ฐ์ ์๋ ๋ฉ์์ง ๋ธ๋ก์ปค์๊ฒ ๋ฉ์์ง๋ฅผ ์ ์กํ๊ณ , ์์ ์๋ ๋ฉ์์ง ๋ธ๋ก์ปค์๊ฒ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ํ๋ฉด ๋๋ค. ์ด๋ ๊ฒ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ํต์ ์ ๋์จํ๊ฒ ๊ฒฐํฉ์ํค๊ณ , ๋ฉ์์ง์ ์ ์ก๊ณผ ์ฒ๋ฆฌ๋ฅผ ์์ ์ ์ผ๋ก ๋ณด์ฅํ ์ ์๋ค. ๋ฉ์์ง ๋ธ๋ก์ปค๋ RabbitMQ, Apache Kafka, ActiveMQ ๋ฑ ๋ค์ํ ์ํํธ์จ์ด๋ก ๊ตฌํ๋ ์ ์๋ค.
RabbitMq ํน์ง
๋ฉ์์ง ์งํฅ(Message-oriented)
RabbitMQ๋ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
๋๊ธฐ ๋ฐ ๋น๋๊ธฐ ๋ฉ์์ง ์ฒ๋ฆฌ ์ง์
RabbitMQ๋ ํ์ ๊ตํ๊ธฐ๋ฅผ ์ด์ฉํด ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ค.
ํ๋ก๋์์ ์ปจ์๋จธ๋ฅผ ์ํ API ์ ๊ณต
RabbitMQ๋ Java, .NET, Python, Ruby, PHP ๋ฑ ๋ค์ํ ์ธ์ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ API๋ฅผ ์ ๊ณตํ๋ค.
๋ฉํฐํ๋กํ ์ฝ ์ง์
RabbitMQ๋ AMQP, STOMP, MQTT ๋ฑ ๋ค์ํ ํ๋กํ ์ฝ์ ์ง์ํ๋ค.
ํด๋ฌ์คํฐ๋ง ์ง์
RabbitMQ๋ ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๋ฅผ ํด๋ฌ์คํฐ๋งํ์ฌ ํ์ฅ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํ๋ค.
RabbitMq ์ค์๊ฐ๋
์๋ ๋ด์ฉ์ rabbitMq manager UI ๋ก, ์ถํ ํฌ์คํ ๋ ๋ด์ฉ์ด๋ฏ๋ก ์ง๊ธ์ rabbitMq์ ๋ํ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ํ ์ฉ๋๋ก๋ง ์ดํดํ๊ณ ์ ํ๋ค.
1) Producer
๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ RabbitMQ์ ๋ณด๋ด๋ ์ ํ๋ฆฌ์ผ์ด์
๋๋ ์์คํ
์ ๋งํ๋ค.
2) Consumer
RabbitMQ์์ ๋ฉ์์ง๋ฅผ ์๋นํ๊ณ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
๋๋ ์์คํ
์ ๋งํ๋ค.
3) Queue
๋ฉ์์ง๋ฅผ ๋ณด๊ดํ๋ ๋ฒํผ๋ก, Producer์์ ๋ณด๋ธ ๋ฉ์์ง๋ Queue์ ์ ์ฅ๋์ด Consumer์์ ์ฒ๋ฆฌ๋๋ค.
Queue ์์ฑ
- Name
ํ์ ์ด๋ฆ์ ๋ํ๋ด๋ฉฐ, ํ๋ฅผ ์๋ณํ๋๋ฐ ์ฌ์ฉ๋๋ค. - Durable
ํ๊ฐ ์๊ตฌ์ ์ผ๋ก ์ง์๋์ด์ผ ํ๋ ๊ฒฝ์ฐ true๋ก ์ค์ ๋๋ค. ์ด ๊ฒฝ์ฐ, RabbitMQ๊ฐ ์ค๋จ๋๋๋ผ๋ ํ๋ ์ญ์ ๋์ง ์๋๋ค. - Auto-Delete
์๋น์๊ฐ ๋ชจ๋ ์ฐ๊ฒฐ์ ํด์ ํ๋ฉด, ํ๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ ค๋ฉด true๋ก ์ค์ ํ๋ค. - Exclusive
ํ๊ฐ ํ์ฌ ์ฐ๊ฒฐ์ ๋ํด์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ true๋ก ์ค์ ํ๋ค. ๋ค๋ฅธ ์ฐ๊ฒฐ์์ ํ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด, ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. - Arguments
ํด๋ผ์ด์ธํธ์์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋งค๊ฐ๋ณ์์ด๋ค. ์๋ฅผ ๋ค์ด, x-message-ttl ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๊ฐ ํ์ ์์ ์ ์๋ ์ต๋ ์๊ฐ์ ์ง์ ํ ์ ์๋ค. - Maximum priority
ํ์ ์ ์ฅํ ์ ์๋ ๋ฉ์์ง์ ์ต๋ ์ฐ์ ์์ ์๋ฅผ ๋ํ๋ธ๋ค. - Maximum length
ํ๊ฐ ํฌํ ์ํ์ ๋น ์ง ๊ฒฝ์ฐ ํ์ ์ ์ฅํ ์ ์๋ ์ต๋ ๋ฉ์์ง ์๋ฅผ ์ ํํ๋ ์์ฑ์ด๋ค. - Overflow behavior
ํ์ ์ฉ๋ ํ๊ณ์ ๋๋ฌํ๋ฉด ๋ฉ์์ง๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง์ ๋ํ ์ค์ ์ด๋ค. ์๋ฅผ ๋ค์ด, drop-head ๋๋ reject-publish ๋ฑ์ ์ต์ ์ด ์๋ค.
4) Exchange
Producer์์ ์์ฑํ ๋ฉ์์ง๋ฅผ ์์ ํ๊ณ ํด๋น ๋ฉ์์ง๋ฅผ Queue๋ก ๋ผ์ฐํ
ํ๋ ๋ฃฐ์ ์ ์ํ๋ ์ปดํฌ๋ํธ๋ก RabbitMQ์๋ Direct, Fanout, Topic, Headers ๋ฑ์ ์ฌ๋ฌ Exchange ์ ํ์ด ์๋ค. rabbitMq ์๋ฒ๋ฅผ ์คํํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋๋ Exchange๋ (AMQP default), amq.* ๋ก ์์ํ๋ exchange๋ค์ด๋ค.
Exchange Type
- Direct Exchange
Routing Key์ Binding Key๊ฐ ์ ํํ๊ฒ ์ผ์นํ๋ ํ๋ก ๋ฉ์์ง๋ฅผ ํ๋ฉฐ, ํ๋์ ๋ฉ์์ง๋ ํ๋์ ํ๋ก ์ ๋ฌ๋๋ค. - Fanout Exchange
๋ชจ๋ ๋ฐ์ธ๋ฉ๋ ํ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ณ ํ๋์ ๋ฉ์์ง๊ฐ ์ฌ๋ฌ ํ๋ก ์ ๋ฌ๋๋ค. - Topic Exchange
Binding Key์ Routing Key๊ฐ ํจํด ๋งค์นญ๋๋ ๋ชจ๋ ํ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํฉ๋๋ค.
Binding Key๋ '.'์ผ๋ก ๊ตฌ๋ถ๋ ๋จ์ด๋ค์ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, Routing Key๋ Binding Key์ ๋์ผํ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. - Headers Exchange
ํค๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ผ์นํ๋ ํค๋๋ฅผ ๊ฐ์ง ํ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํฉ๋๋ค.
Exchange ์์ฑ
- Name
Exchange์ ์ด๋ฆ์ด๋ฉฐ, ์ ์ผํด์ผ ํ๋ค. - Type
Exchange์ ์ข ๋ฅ๋ก์ Direct, Fanout, Topic, Headers ์ค ํ๋์ฌ์ผ ํฉ๋๋ค. - Durability
Exchange์ ์ง์์ฑ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ฉฐ, true๋ก ์ค์ ํ๋ฉด RabbitMQ๊ฐ ์ฌ์์ํ๋๋ผ๋ Exchange๊ฐ ์ ์ง๋๋ค. - Auto-delete
Exchange์ ์๋ ์ญ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค. true๋ก ์ค์ ํ๋ฉด Exchange์ ๋ฐ์ธ๋ฉ๋ ํ๊ฐ ์์ ๋ Exchange๊ฐ ์ญ์ ๋๋ค. - Arguments
Exchange์ ์ถ๊ฐ์ ์ธ ์ธ์์ด๊ณ , ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ์ง ์์ต๋๋ค.
5) Binding
Exchange์ Queue ๊ฐ์ ์ฐ๊ฒฐ์ ๋งบ์ด์ฃผ๋ ๊ตฌ์ฑ ์์์ด๋ค. Binding์๋ Exchange ์ ํ, ๋ผ์ฐํ
ํค ๋ฐ Queue๊ฐ ํฌํจ๋๋ค. Exchange๋ ๋ฉ์์ง๊ฐ ๋ฐํ๋๋ ์ฅ์์ด๊ณ , Queue๋ ๋ฉ์์ง๋ฅผ ๋ฐ์๋ค์ด๋ ์ฅ์์
๋๋ค. ์ฆ, Binding์ Exchange์์ ๋ฐํ๋ ๋ฉ์์ง๊ฐ ์ด๋ค Queue์ ์ ๋ฌ๋์ด์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ๋ค์์ Binding์ ํฌํจ๋๋ ์ ๋ณด์ด๋ค.
- Exchange name: Binding์ด ์ ์ฉ๋๋ Exchange์ ์ด๋ฆ
- Exchange Type : Exchange์ ํ์
- Routing key: ๋ฉ์์ง๊ฐ ์ ๋ฌ๋ Queue๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ
- Queue name: Binding์ด ์ ์ฉ๋๋ Queue์ ์ด๋ฆ
6) Virtual Host
RabbitMQ์๋ ์ฌ๋ฌ ๊ฐ์ Virtual Host๋ฅผ ์์ฑํ ์ ์๋ค. Virtual Host๋ Queue, Exchange, Binding ๋ฐ ์ฌ์ฉ์๋ฅผ ๊ฒฉ๋ฆฌ์ํค๋ ๋
ผ๋ฆฌ์ ์ธ ๊ฐ๋
์ด๋ค.
7) Connection
Producer ๋๋ Consumer๊ฐ RabbitMQ์ ํต์ ํ๋ TCP ์ฐ๊ฒฐ์ด๋ค.
8) Channel
TCP ์ฐ๊ฒฐ ๋ด์์ ๋ง๋ค์ด์ง๋ ๊ฐ์ ์ฐ๊ฒฐ๋ก, ๋ฉ์์ง๋ฅผ ์ ์กํ๊ณ ๋ฐ์ ์ ์๋ค. ํ๋์ Connection ๋ด์ ์ฌ๋ฌ ๊ฐ์ Channel์ ์์ฑํ ์ ์๊ณ , ์ด๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ฐ๊ฒฐ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๋ค.
์ง๊ธ๊น์ง rabbitMq๊ฐ ์ด๋ค ๊ฒ์ธ์ง์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ ์์๋ณด์๋ค. ์ด์ ๋ถํด ์ํ๋ ๋ชฉํ์ ๋ง์ถ์ด rabbitMq๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํด์ผํ๋ ์ง ํฌ์คํ ํด๋ณด๋ ค๊ณ ํ๋ค.