๋ฏธ๋ค์จ์ด
๋ฏธ๋ค์จ์ด๋ ์ ์ชฝ์ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ์ค๊ฐ์์ ๋งค๊ฐ ์ญํ ์ ํ๋ ์ํํธ์จ์ด, ๋คํธ์ํฌ๋ฅผ ํตํด์ ์ฐ๊ฒฐ๋ ์ฌ๋ฌ ๊ฐ์ ์ปดํจํฐ์ ์๋ ๋ง์ ํ๋ก์ธ์ค๋ค์๊ฒ ์ด๋ค ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ฐ๊ฒฐํด ์ฃผ๋ ์ํํธ์จ์ด๋ฅผ ๋งํ๋ค. 3๊ณ์ธต ํด๋ผ์ด์ธํธ/์๋ฒ ๊ตฌ์กฐ์์ ๋ฏธ๋ค์จ์ด๊ฐ ์กด์ฌํ๋ค. ์น ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ฝ์ด์ฌ ์ ์๊ฒ ์ค๊ฐ์ ๋ฏธ๋ค์จ์ด๊ฐ ์กด์ฌํ๊ฒ ๋๋ค.
๋ฉ์ธ์ง ์งํฅ ๋ฏธ๋ค์จ์ด
๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด(Message-oriented middleware, MOM)๋ ์์ฉ ์ํํธ์จ์ด ๊ฐ์ ๋ฐ์ดํฐ ํต์ ์ ์ํ ์ํํธ์จ์ด์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋น๋๊ธฐ ๋ฉ์์ง ์ ๋ฌ์ ๊ธฐ์ดํ ๊ฒ์ ๊ฐ๋ฆฌํจ๋ค. ๋ง์ ๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด๋ ๋ฉ์์ง ํ ์์คํ ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง, ๊ทธ ๋ฐ์๋ ๋ธ๋ก๋์บ์คํธ ํ์ ๋ฉ์์ง ์์คํ ๊ณผ ๋ฉํฐ ์บ์คํธ ํ์์ ๋ฉ์์ง ์์คํ ์ ์ธ ๋ด์ฉ๋ ์๋ค. ์ฅ์ ์ผ๋ก๋ ์ ์ฅ(๋ฏธ๋ค์จ์ด์์ ๋ฉ์ธ์ง๋ฅผ ๋ฐฑ์ ), ๋ผ์ฐํ (๋ฏธ๋ค์จ์ด์์ ๋ฐฐํฌ ๊ฐ๋ฅ), ๋ณํ(์ก/์์ ์์ ๋ง์ถฐ ํ์ ๋ณํ ๊ฐ๋ฅ) ๋จ์ ์ผ๋ก๋ ๋ฉ์ธ์ง ์ ์ก ์์ด์ ํธ ํ์, ํ์ค์ด๋ผ๊ณ ๋ถ๋ฅผ ๊ท๊ฒฉ์ด ์กด์ฌํ์ง ์์
๋ฉ์์ง ํ ์์คํ
๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด๋ฅผ ๊ตฌํํ ๊ฒ, ๋ฉ์์ง ๊ณต๊ธ์ ์์น์ ์ผ์ข ์ ๋ฒํผ(Queue)๋ฅผ ๋๋ค. ํด๋ผ์ด์ธํธ์ ๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ง์ ๋ฐ์ดํฐ ํต์ ์ ํ๊ฒ ๋๋ฉด ๋ณ๋ชฉํ์์ด ๋ฐ์ํด ์๋ฒ์ ์ฑ๋ฅ์ด ์ ํ๋๋ค. ๋ฏธ๋ค์จ์ด์ ๋ฉ์์ง๋ฅผ ์์ํด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ํด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ํ์ค์ด ์์ด ๊ตฌํํ๋ ์ฌ๋๋ง๋ค ์ฌ์ฉ๋ฒ์ด๋ ๊ตฌํ๋ฐฉ์์ด ๋ชจ๋ ๋ค๋ฅด๋ค.
AMQP
AMQP(Advanced Message Queueing Protocol)๋ ๋ฉ์ธ์ง ํ์ ํ์ค์ ์ ์ํ ๊ฒ์ด๋ค. ๋ง์ ๋ธ๋ก๊ทธ์์ ์กฐ๊ธ ํท๊ฐ๋ฆฌ๊ฒ ์ ์ํ๊ณ ์๋๋ฐ, ์ด ํ์ค์ AMQP(ํ๋กํ ์ฝ)๊ณผ AMQM(๋ชจ๋ธ ์ค๊ณ ๋ฐฉ์)์ ํฌํจํ๊ณ ์๋ค.
AMQP์ ํ๋กํ ์ฝ์ ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต, ๋คํธ์ํฌ ๊ณ์ธต์์ ์ ์๋๋ค. ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ด์ผ๊ธฐํ๊ณ ์ํธ์์ฉํ ์ ์๋ ๊ท์น์, ๋คํธ์ํฌ ๊ณ์ธต์์๋ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ๋ฌด์ฌํ ์ง๋๊ฐ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ํ ์ ์๋ ๊ท์น์ ์ ์ํ๋ค.
AMQP๋ ๋ฏธ๋ค์จ์ด์ ํด๋ผ์ด์ธํธ์ ๋์์ ๋ํด ๊ฐ๊ธฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์ํธ ์ด์ฉ๋ ์ ์๋ ์ ๋๋ก๊น์ง ๊ถํ์ ์ฃผ๋ฉฐ, SMTP, HTTP, FTP ๋ฑ๋ ์ํธ ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค. (API + ๋ฉ์์ง ์ก์ ์๊ฐ ํด์ผ ํ๋ ํ์)๋ฅผ ์ ์ํ๋ JMS์๋ ๋ค๋ฅด๊ฒ, AMQP๋ ๋ฐ์ดํฐ ํ์์ ์ ์ํ๊ณ ๊ทธ๊ฒ์ ๋ฐ๋ฅด๋ ๋ฉ์์ง๋ฅผ ๋ง๋ค๊ณ ํด์ํ ์ ์๋ ๋๊ตฌ๋ผ๋ฉด ๊ตฌํ ์ธ์ด์ ๊ด๊ณ ์์ด ๋ค๋ฅธ ํธํ ๋๊ตฌ์ ์ํธ ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค.
AMQM
์ด๊ฒ์ด AMQP์ ๋ชจ๋ธ์ด๋ค. ์์ธํ ์ค๋ช ์ ์ด ๋ชจ๋ธ์ ๋ฐ๋ฅด๋ RabbitMQ์ ๋ชจ๋ธ์ ๋ณด๋ฉฐ ๋ ์์ธํ ์์๋ณด์.
RabbitMQ ๋์
AMQP๋ฅผ ๋ฐ๋ฅด๋ ๋ฉ์์ง ๋ธ๋ก์ปค์ด๋ค. ์๋ ๋งํฌ ์ค๋ช ์ด ์ข์ผ๋ ์ฒจ๋ถํ๋ค.
RabbitMQ ํํ ๋ฆฌ์ผ
0. Docker ์ค์น(์ค์น ๋งํฌ)
์ค์น ์ค WSL์ ์ ๋ฐ์ดํธ ํ๋ผ๋ ์ฐฝ์ด ๋์ฌ ์ ์๋ค. ๋งํฌ๋ฅผ ์ซ์๊ฐ ์ค์นํ๊ณ Restart ๋ฒํผ์ ๋๋ฅด๋ฉด ๋๋ค.
1. RabbitMQ ์ค์น(์ฐธ๊ณ ๋งํฌ)
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
2. ๊ฐ์ ์ฌ์ฉํ ์ธ์ด์ ๋ง๊ฒ ์ถ๊ฐ ์ค์น
๋ณธ์ธ์ ํ์ด์ฌ์ ์ฌ์ฉ(Pycharm, Anaconda, pika ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น)
3. ํํ ๋ฆฌ์ผ ๋ฐ๋ผํ๊ธฐ
๋ฒ์ญ๋ณธ(๋งํฌ)
4. ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ๊ณต๋ถํ๋ ๊ฒ๋ค
- Vhost(virutal host)
- Virtual Host๋ฅผ ํตํด์ ํ๋์ RabbitMQ ์ธ์คํด์ค ์์ ์ฌ์ฉํ๊ณ ์๋ Application์ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
- Connection
- ๋ฌผ๋ฆฌ์ ์ธ TCP Connection, HTTPS -> TLS(SSL) Connection์ ์ฌ์ฉ
- Channel
- ํ๋์ ๋ฌผ๋ฆฌ์ ์ธ Connection ๋ด์ ์์ฑ๋๋ ๊ฐ์์ Connection
- Consumer์ process๋ thread๋ ๊ฐ์ Channel์ ํตํด Queue์ ์ฐ๊ฒฐ ๋ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋งํฌ:
์ํค๋ฐฑ๊ณผ 'AMQP' : https://ko.wikipedia.org/wiki/AMQP
CloudAMQP 'What is AMQP and why is it used in RabbitMQ?' : https://www.cloudamqp.com/blog/what-is-amqp-and-why-is-it-used-in-rabbitmq.html
CloudAMQP 'Microservices - why use RabbitMQ?' : https://www.cloudamqp.com/blog/why-use-rabbitmq-in-a-microservice-architecture.html
ํฐ์คํ ๋ฆฌ 'RabbitMQ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ' ; https://kamang-it.tistory.com/entry/AMQPRabbitMQRabbitMQ%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EC%99%80-%EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95-1
ํฐ์คํ ๋ฆฌ 'RabbitMQ์ ๊ธฐ๋ณธ ๊ฐ๋ ': https://ram2ram2.tistory.com/3
'RabbitMQ ๊ณ์ ์ค์ ' : http://abh0518.net/tok/?p=384
http://gjchoi.github.io/rabbit/rabbit-mq-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/
https://blog.ashon.dev/blog/2018/10/14/rabbitmq-message-mirroring-using-shovel.html
https://m.blog.naver.com/tmondev/221051503100
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=zltmwnffldpt&logNo=220914409334
'๐ป > ์ธํ๋ผ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ๋ช ๋ น์ด ๋ชจ์ (0) | 2021.07.30 |
---|---|
[Linux] There are stopped jobs (0) | 2021.07.30 |
[Linux] ๋๋ ํ ๋ฆฌ ํ์ผ ์์คํ (0) | 2021.07.28 |
[์ฐธ๊ณ ] RabbitMQ ์กฐ์ฌ ์ ์ฉ์ด์ ๋ฆฌ (0) | 2021.07.09 |
[๋ฆฌ๋ ์ค] ๋ ธํธ๋ถ์ Ubuntu ํํฐ์ ๋ถํ ์ค์น (1) | 2020.12.30 |