๊ฐ์
Redis์ Celery์ ๊ด๊ณ๋ฅผ ์ข ๋ ์์ธํ๊ฒ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
์ ๋ฆฌ
Redis์ Celery๋ ๋น๋๊ธฐ ํ์คํฌ ํ ์์คํ ์ ๊ตฌ์ถํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๊ฐ ๋ฉ์์ง ๋ธ๋ก์ปค์ ๋ฐฑ์๋ ์ ์ฅ์ ์ญํ ์ ํ๋ค.
Celery
๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ถ์ฐ ํ์คํธ ํ ์์คํ ์ผ๋ก, ๋ฉ์์ง ๋ธ๋ก์ปค(Message Broker)๋ฅผ ํตํด ์์ ๊ด๋ฆฌ
- Producer (Client)
- ์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋
- Celery๊ฐ ์์ฒญ์ ๋ฐ์ Redis์ ์์ ์ ๋ฑ๋ก(Queue)ํจ
- Broker (Redis)
- Celery๊ฐ ์คํํด์ผ ํ ์์ ์ ํ(Queue) ํํ๋ก ์ ์ฅ
- Worker๊ฐ ๋๊ธฐํ๋ค๊ฐ ์์ ์ ๊ฐ์ ธ๊ฐ์ ์คํ
- Worker (Celery Worker)
- Redis์์ ์์ ์ ๊บผ๋ด ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ
- ์ฌ๋ฌ ๊ฐ์ Worker๊ฐ ๋์์ ์คํ ๊ฐ๋ฅ (๋ณ๋ ฌ ์ฒ๋ฆฌ)
- Backend (Redis)
- Celery๊ฐ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๊ณณ
- AsyncResult(task_id).result๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์
Redis + Celery ๋์ ํ๋ฆ
1๏ธโฃ ์ฌ์ฉ์๊ฐ FastAPI ์๋ํฌ์ธํธ ํธ์ถ
- Celery๊ฐ ์์ ์ ์์ฑํ๊ณ Redis์ ๋ฑ๋ก (Producer → Broker)
- Redis ๋ด๋ถ์ ๋๊ธฐ ์ค์ธ Task Queue๊ฐ ์๊น (task id๋ฅผ celery-task-id-12345๋ผ๊ณ ๊ฐ์ ํ์)
2๏ธโฃ Celery Worker๊ฐ Redis์์ ์์ ์ ๊ฐ์ ธ์ ์คํ
- Celery Worker๊ฐ Redis์์ celery-task-id-12345๋ฅผ ๊บผ๋ด์ด ์คํ
- Redis์์ ์คํ ์ค์ธ ์์ ์ํ๋ฅผ ์ ๋ฐ์ดํธ
3๏ธโฃ ์์ ์คํ ์๋ฃ ํ ๊ฒฐ๊ณผ๋ฅผ Redis์ ์ ์ฅ
ํฌ๋กค๋ง ์์ ์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ๋ฅผ Redis์ ์ ์ฅํจ
→ ์ด์ AsyncResult(task_id).result๋ฅผ ํตํด FastAPI์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค
Redis + Celery ์ค์
Celery์ Redis๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ค๋ฉด broker์ backend๋ฅผ Redis๋ก ์ค์ ํด์ผ ํ๋ค.
celery_app = Celery(
"tasks",
broker="redis://localhost:6379/0", # Redis๋ฅผ ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ์ฌ์ฉ
backend="redis://localhost:6379/0" # Redis๋ฅผ ๋ฐฑ์๋๋ก ์ฌ์ฉ (๊ฒฐ๊ณผ ์ ์ฅ)
)
โ Redis๋ Celery์ ๋ฉ์์ง ๋ธ๋ก์ปค + ๊ฒฐ๊ณผ ๋ฐฑ์๋ ์ญํ
โ Celery๋ Redis๋ฅผ ์ด์ฉํด ๋น๋๊ธฐ ํ์คํฌ๋ฅผ ๊ด๋ฆฌ
โ FastAPI → Celery → Redis → Worker → Redis → FastAPI ํ๋ฆ์ผ๋ก ์คํ๋๋ค.
'๐ฉ๐ปโ๐ป > python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MQTT Keep Alive (0) | 2025.03.12 |
---|---|
Redis ์ค์๊ฐ ๋ชจ๋ํฐ๋ง (0) | 2025.02.13 |
Celery๋ฅผ ์ด์ฉํ ํฌ๋กค๋ง ์์ (1) | 2025.02.05 |
[python] gRPC ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด๊ธฐ (0) | 2025.01.02 |
[python] PySide6๋ก ์ฌ๋ฆฐ gui๋ก ์๊ฒฉ ์๋ฒ์ ํ์ผ ๋ค์ด๋ก๋ํ๊ธฐ (1) | 2024.12.31 |