๐[Django] RabbitMQ๋ฅผ ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ๋ Celery!
RabbitMQ๋ฅผ ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ๋ Celery!
Django์์ Celery๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์์ ๋ฅผ ์์ฑํ ๋ฐ ์๋ค.
๐ย ๐[Django] ์ง์ง ๊ฐ๋จํ Celery ์คํ
๊ธฐ์กด์๋ ๋ฉ์์ง ๋ธ๋ก์ปค๋ก Redis ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๋ฒ์ RabbitMQ ๋ฅผ ์ฌ์ฉํด๋ณด๋ ค ํ๋ค.
RabbitMQ?
RabbitMQ
๋, AMQP(Advanced Message Queuing Protocol)
๋ฅผ ๊ตฌํํ ์คํ์์ค Message Broker
์ด๋ค.
AMQP(Advanced Message Queuing Protocol)
: ์ ๋ขฐ์ฑ ์๋ ๋ฉ์์ง ์ ๋ฌ, ๋ผ์ฐํ , ๋ณด์ ๋ฑ์ ์ง์ํ๋ ํ์ค ํ๋กํ ์ฝ
RabbitMQ
๋ producer โ consumer ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ๋, ์ด ์ค๊ฐ ๊ณผ์ ์์ ๋ธ๋ก์ปค ์ญํ ์ ํ๋ ๋
์์ด๋ค.
์ด ๊ณผ์ ์์ ๋ฉ์์ง๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๊ณ , Queue
์ ์์๋๋ฉฐ, ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ ๋ฌํ ์ ์๋ค.
์ธ์ ์ฌ์ฉํ์ง?
- ์์ฒญ์ ๋ง์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ ๋
- ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ์๊ฐ์ด ๊ธธ ๋
- ๋ง์ ์์ ์ด ์์ฒญ๋์ด ์ฒ๋ฆฌ๋ฅผ ํด์ผํ ๋
๊ตฌ์ฑ
Producer
- ์์ฒญ์ ๋ณด๋ด๋ ์ฃผ์ฒด
- ๋ณด๋ด๊ณ ์ ํ๋ ๋ฉ์์ง๋ฅผ exchange์ publishํจ
Consumer
- Producer๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ ์ฃผ์ฒด
Exchange
- Producer๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ด๋ค queue๋ก ๋ณด๋ผ์ง ๊ฒฐ์ ํ๋ ๊ณต๊ฐ
- 4๊ฐ์ง ํ์
์ด ์กด์ฌํจ (๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์)
- Direct
- Fanout
- Topic
- Headers
Queue
- ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
- ๋ฉ์์ง๋ ํ์ ์์๋ค๊ฐ
์๋น์(Consumer)
๊ฐ ์ด๋ฅผ ๊บผ๋ด ์ฒ๋ฆฌํ ๋๊น์ง ๋๊ธฐ ์ํ๋ฅผ ์ ์ง
Binding
- Exchange์ Queue ์ฌ์ด์ ์ฐ๊ฒฐ์ ์ ์
- ๋ชจ๋ ๋ฉ์์ง๋
Exchange
๊ฐ ๊ฐ์ฅ ๋จผ์ ์์ ํ๊ณ ,Exchange
ํ์ ๊ณผBinding
๊ท์น์ ๋ฐ๋ผ ์ ์ ํQueue
๋ก ์ ๋ฌ - ๋ณดํต ์ฌ์ฉ์๊ฐ ํน์
Exchange
๊ฐ ํน์ Queue
๋ฅผBinding
ํ๋๋ก ์ ์ํจ (fanout์ ์์ธ)
[ChatGPT] RabbitMQ์ ์ฅ์
์ ๋ขฐ์ฑ
RabbitMQ
๋ ๋ฉ์์ง์ ์์ ํ ์ ๋ฌ์ ๋ณด์ฅํ๋ฉฐ, ๋ฉ์์ง ์์ค์ ๋ฐฉ์งํ๋ ๋ค์ํ ์ต์ ์ ์ ๊ณตํจ
์ ์ฐ์ฑ
- ๋ค์ํ ๋ผ์ฐํ ์ต์ ๊ณผ ํ๋ฌ๊ทธ์ธ ์์คํ ์ ํตํด ์ ์ฐํ ๋ฉ์์ง ํ๋ฆ ์ ์ด๊ฐ ๊ฐ๋ฅํจ
์ฑ๋ฅ
- ๋์ ์ฒ๋ฆฌ๋์ ์ง์ํ๊ณ ,
ํด๋ฌ์คํฐ๋ง
์ ํตํด ์ฑ๋ฅ์ ํ์ฅํ ์ ์์
์ปค๋ฎค๋ํฐ ๋ฐ ์ง์
- ์คํ ์์ค์ธ ๋งํผ ๋ค์ํ๊ณ ํ๋ฐํ ์ปค๋ฎค๋ํฐ๊ฐ ์กด์ฌํ๊ณ , ๋ค์ํ ๋ฌธ์์ ์์ ๋ฑ์ ์ฐพ์ ์ ์์
[ChatGPT] RabbitMQ์ ๋จ์
๋ณต์ก์ฑ
- ์ด๊ธฐ ์ค์ ๋ฐ ๊ด๋ฆฌ๊ฐ ๋ณต์กํ ์ ์์
- ๊ณ ๊ธ ๊ธฐ๋ฅ ์ฌ์ฉ ์, ๊น์ ์ดํด๊ฐ ํ์ํ ์ ์์ โ ๋ฌ๋ ์ปค๋ธ
๋๊ท๋ชจ ์์คํ ์์์ ํ๊ณ
- ๋งค์ฐ ํฐ ๊ท๋ชจ์ ์์คํ
์์๋
RabbitMQ
์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ - ๋์์ผ๋ก
Reids
,Kafka
๋ฑ์ ์ฌ์ฉํ ์ ์์
Django + Celery + RabbitMQ ์ธํ
RabbitMQ ์ค์น
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install rabbitmq-server
RabbitMQ ์ธํ
# user ์์ฑ
rabbitmqctl add_user [user_name] [password]
# vhost ์์ฑ
rabbitmqctl add_vhost [vhost_name]
# user tag ์์ฑ
rabbitmqctl set_user_tags [user_name] [user_tag_name]
# user ๊ถํ ์ค์ - ".*" ".*" ".*" ๋ configure, write, read
rabbitmqctl set_permissions -p [vhost_name] [user_name] ".*" ".*" ".*"
# ์์
rabbitmqctl add_user kyungtaeklee 123456
rabbitmqctl add_vhost playr_host
rabbitmqctl set_user_tags kyungtaeklee kyungtaeklee_tag
rabbitmqctl set_permissions -p playr_host kyungtaeklee ".*" ".*" ".*"๏ปฟ
Celery ์ค์น
#Celery ์ค์น
pip install celery
#celery ๋ฐฑ์๋ ์ค์น
pip install -U django-celery-results
python manage.py migrate django_celery_results
Celery ์ธํ
INSTALLED_APPS = [
...
'django_celery_results',
]
CELERY_BROKER_URL = 'amqp://[user_name]:[password]@localhost/[vhost_name]'
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TAST_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Seoul'
DJANGO_CELERY_RESULTS_TASK_ID_MAX_LENGTH = 191
์ฌ๊ธฐ๊น์ง ์ธํ ์ ์๋ฃ ํ๋ค๋ฉด, [๐[Django] ์ง์ง ๊ฐ๋จํ Celery ์คํ](https://hellojunho.github.io/django/DJANGO-%EC%A7%84%EC%A7%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-Celery-%EC%8B%A4%ED%97%98/) ์์ ์งํํ ๊ฒ ์ฒ๋ผ Celery task์ ์ธํ ์ ์งํํด์ฃผ๋ฉด ๋๋ค.
- CELERY_RESULT_BACKEND: ํ์คํฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์์น
- CELERY_CACHE_BACKEND: ํ์คํฌ ๊ฒฐ๊ณผ๋ ๊ธฐํ ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์์น
์๋ฒ ์คํ
Django
์์ Celery
๋ฅผ ์ฌ์ฉํด ๋น๋๊ธฐ ์์
์ ์งํํ๋ ค๋ฉด Django
, Celery
, Message Broker
์ ์๋ฒ 3๊ฐ๊ฐ ๋ชจ๋ ์คํ๋์ด์ผ ํ๋ค.
Docker-Compose
๋ฅผ ์ฌ์ฉํด ํ ๋ฒ์ ์๋ฒ๋ฅผ ๋ชจ๋ ์คํํ๋ ๊ฒ์ ์ ํธํ๋ ํธ์ด๋ค.
์ด๋ฒ์๋ Message Broker
๋ก Redis๊ฐ ์๋ RabbitMQ
์ด๋ฏ๋ก ์๋์ ๊ฐ์ด ์คํ์ํค๋ฉด ๋๋ค.
# RabbitMQ
sudo rabbitmq-server
# Celery
celery -A config worker -l info
# Django
python manage.py runserver
์ฐธ๊ณ ์๋ฃ
[Django + Celery + RabbitMQ] ๋ถ์ฐ ๋น๋๊ธฐ ์์ ์ํ์ ์ํ Celery
๋๊ธ๋จ๊ธฐ๊ธฐ