๐ฉ๐ป๐ป32 MQTT Keep Alive ์ต๊ทผ์ MQTT ํต์ ๊ฐ๋ฐ์ ์งํํ๋ฉด์ Keep Alive ์ค์ ์ ๊ด๋ จํ ๋ฌธ์ ๋ฅผ ๊ฒช์๋ค. Status Update ํ๋ mqtt ํด๋ผ์ด์ธํธ๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํ๊ณ send_status ๋ผ๋ ํจ์๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค. import paho.mqtt.client as mqttimport uuidimport timeclass RobotStatusUpdater: def __init__(self, broker_ip, topic="robot/status"): self.client = mqtt.Client(f"Robot_Status_Updater_{uuid.uuid4()}") self.client.connect(broker_ip, 1883) self.topic = to.. 2025. 3. 12. [MQTT] pc 2๊ฐ ํต์ (python, ์๋ฐฉํฅ ํต์ ) ๊ฐ์PC 2๊ฐ๊ฐ ์๋ค.ํ๋๋ User๊ฐ ์ ๋ฌด๋ฅผ ์์ฒญํ๊ณ , ๋๋จธ์ง ํ๋๋ Robot์ด ๊ทธ ์ ๋ฌด๋ฅผ ๋ฐ์์ ์ค์๊ฐ ์ํ๋ฅผ User๊ฐ ์ ์ ์๋๋ก ์ ๋ฐ์ดํธ๋ฅผ ํด์ค ๊ฒ์ด๋ค.์ ํ๋ก์ ํธ์์๋ Robot์ด ํ๋ ๋ฟ์ด๋ผ์ socket์ผ๋ก ์ฐ๊ฒฐ์ ํ๋ค.์ด๋ฒ์๋ Robot์ด ์ถ๊ฐ๋ก ๋ ๋์ด๋ ๊ฐ๋ฅ์ฑ์ ์ผ๋ํด์ MQTT๋ฅผ ํ์ฉํ๋ ค๊ณ ํ๋ค. ํธํ PC, Robot์ด๋ผ๊ณ ์นญํ๊ฒ ๋ค.PC → Robot : ์ํํ ์์ (ํ ์คํธ ํ์) ์ ๋ฌRobot → PC : ์์ ์ํ (์ค์๊ฐ ์ ๋ฐ์ดํธ) ์ ๋ฌ ๊ตฌ์กฐPC๋ ์์ ์ง์๋ฅผ ๋ฐํํ๊ณ , ๋ก๋ด์ ์ด๋ฅผ ๊ตฌ๋ ๋ก๋ด์ ์ํ๋ฅผ ๋ฐํํ๊ณ , PC๋ ์ด๋ฅผ ๊ตฌ๋ ํ์ฌ ์ค์๊ฐ์ผ๋ก ์ํ๋ฅผ ํ์ธTopic ์ค๊ณPC → Robot: "robot/task"Robot → PC: "robot/status" ๊ฐ๋จํ ์ฝ๋ ๊ตฌ.. 2025. 2. 25. [MQTT] Mac mosquitto ์ค์น / ์คํ / ์ค์ง 1. mosquitto ์ค์นbrew install mosquitto 2. mosquitto ์๋น์ค ์คํbrew services start mosquitto 3. mosquitto ์๋น์ค ์ค์งbrew services stop mosquitto ๋ฉ์ธ์ง ํ์ธ์ MQTT Explorer ์ฌ์ฉํ๋ค. ์ฐ๊ฒฐ ์๋จ ~ 2025. 2. 25. ์ฝ๋ ํ์ง ๊ด๋ฆฌ ์ฝ๋ ํ์ง์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ ์ฌ๋ฌ ๊ฐ์ง ๋๊ตฌ์ ๋ํด์ ์ ๋ฆฌํ๋ค.์ฌ์ฉํ ์ฝ๋ ํ์ง ๋๊ตฌSonar : ์ฝ๋ ํ์ง ๋ถ์, ๋ณด์ ์ทจ์ฝ์ ํ์งBlack : ์ฝ๋ ์คํ์ผ ์๋ ํฌ๋งทํ Flake8 : ์ ์ ์ฝ๋ ๋ถ์ (PEP 8, ๋ฌธ๋ฒ ์ค๋ฅ ๊ฒ์ฌ)isort : import ๋ฌธ ์๋ ์ ๋ ฌpytest : Python ํ ์คํธ ํ๋ ์ ์ํฌ 1๏ธโฃ Sonar (SonarQube / SonarCloud)Sonar๋ ์ฝ๋ ํ์ง์ ๋ถ์ํ๋ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌSonarQube, SonarCloud ๋ ๊ฐ์ง ํํ๋ก ์ ๊ณตโ ์ฌ์ฉ ๋ฐฉ๋ฒ๋ก์ปฌ์์ SonarQube๋ฅผ ์ค์นํ๊ณ ์คํ (sonarqube + sonar-scanner ์ฌ์ฉ)CI/CD ํ๊ฒฝ์์๋ SonarCloud๋ฅผ ์ด์ฉํ์ฌ ๋ถ์sonar-scanner \ -Dsonar.pr.. 2025. 2. 20. [Celery] ๊ฐ๋จํ๊ฒ ์ฑ๋ฅ ์ฒดํฌ ์คํ ํ CPU ์ฌ์ฉ๋ ๋ฐ Celery Worker ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ค ํ๋ค. โ Celery Worker ํ๋ก์ธ์ค ํ์ธps aux | grep "celery worker" โ CPU & ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฒดํฌhtop โ Redis์ ๋๊ธฐ ์ค์ธ ์์ ํ์ธredis-cli llen celery → ๋ง์ฝ ๋๊ธฐ ์ค์ธ ์์ ๊ฐ์ ํ์ธํ๊ณ ์ ์ ํ concurrency ์กฐ์ → ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๋ ๊ณ ๋ คํด์ concurrency ์กฐ์ 2025. 2. 19. [Celery] ์ ์ ํ concurrency ๊ฐ ์ค์ ํ๊ธฐ ๊ฐ์Celery์์ concurrency ๊ฐ์ ํ ๋ฒ์ ๋ช๊ฐ์ ์์ ์ ๋์์ ์คํํ ์ง ๊ฒฐ์ ํ๋ ์ค์ํ ์ค์ ์ด๋ค.์ ์ ํ concurrency ๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ ๊น .. (ํ๋์จ์ด, ์ํฌ๋ก๋, ์์ ํน์ฑ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค!)ํ์ธconcurrencyCelery๋ ๊ธฐ๋ณธ์ ์ผ๋ก Prefork (multiprocessing) ๋ชจ๋๋ฅผ ์ฌ์ฉconcurrency๋ ๊ฐ worker๊ฐ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.worker๋ ์ค์ ๋ก Task๋ฅผ ์คํํ๋ ํ๋ก์ธ์ค(์์ ๋จ์)๋ฅผ ์๋ฏธํ๋ค.1๏ธโฃ CPU ์ฝ์ด ์Celery๊ฐ CPU ์ฐ์ฐ์ ๋ง์ด ์ฌ์ฉํ๋ ์์ (์: ๋จธ์ ๋ฌ๋, ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฑ)์ ์คํํ๋ค๋ฉด, CPU ์ฝ์ด ์ ๊ธฐ์ค์ผ๋ก ์ค์ CPU ์ฝ์ด ๊ฐ์์ ์ ํ concurrency ๊ฐ2 ์ฝ์ด2~44 ์ฝ์ด4~88 ์ฝ์ด8~.. 2025. 2. 19. Redis ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๊ฐ์ํ ์คํธ ์งํํ๋๋ฐ redis๋ฅผ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ํ๋ ค๊ณ ํจ์งํRedis ์ค์๊ฐ ๋ก๊ทธRedis์ ๋ชจ๋ ์์ฒญ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ๋ ๋ช ๋ น์ด:redis-cli monitor → Redis์ ๋ชจ๋ ์์ ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ๋ค. ๋๋ฌด ๋ง์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๊ณ ์์ด์ ๊ฐ๋ ์ฑ์ด ์ข์ง ์๋ค. Celery ์์ฒด ๋ชจ๋ํฐ๋งRedis์ ๋ก๊ทธ ์ค์์ ๋ด๊ฐ ๋ฑ๋กํ celery app์ ๋ํ ๋ก๊ทธ๋ง ์ถ๋ ฅํ๊ณ ์ถ์ด์ ์ฐพ์๋ดค๋๋ฐ, Celery์์ ์คํ๋๋ ์์ ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ celery ์์ฒด ๋ชจ๋ํฐ๋ง์ด ์์๋ค.โ celery worker ์คํํ ๋ -E ์ต์ ์ถ๊ฐํด์ ์ด๋ฒคํธ ๋ก๊น ํ์ฑํํ๊ธฐ (์๋๋ฉด ์๋ฌด๊ฒ๋ ์๋ธ)pkill -9 -f "celery worker" # ๊ธฐ์กด ์์ปค ์ข ๋ฃcelery -A celery_tasks.c.. 2025. 2. 13. Redis and Celery ๊ฐ์Redis์ Celery์ ๊ด๊ณ๋ฅผ ์ข ๋ ์์ธํ๊ฒ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.์ ๋ฆฌRedis์ Celery๋ ๋น๋๊ธฐ ํ์คํฌ ํ ์์คํ ์ ๊ตฌ์ถํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๊ฐ ๋ฉ์์ง ๋ธ๋ก์ปค์ ๋ฐฑ์๋ ์ ์ฅ์ ์ญํ ์ ํ๋ค.Celery๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ถ์ฐ ํ์คํธ ํ ์์คํ ์ผ๋ก, ๋ฉ์์ง ๋ธ๋ก์ปค(Message Broker)๋ฅผ ํตํด ์์ ๊ด๋ฆฌProducer (Client)์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋Celery๊ฐ ์์ฒญ์ ๋ฐ์ Redis์ ์์ ์ ๋ฑ๋ก(Queue)ํจBroker (Redis)Celery๊ฐ ์คํํด์ผ ํ ์์ ์ ํ(Queue) ํํ๋ก ์ ์ฅWorker๊ฐ ๋๊ธฐํ๋ค๊ฐ ์์ ์ ๊ฐ์ ธ๊ฐ์ ์คํWorker (Celery Worker)Redis์์ ์์ ์ ๊บผ๋ด ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ์ฌ๋ฌ ๊ฐ์ Worker๊ฐ ๋์์ ์คํ ๊ฐ๋ฅ (๋ณ๋ ฌ ์ฒ๋ฆฌ)Bac.. 2025. 2. 12. Celery๋ฅผ ์ด์ฉํ ํฌ๋กค๋ง ์์ ๊ฐ์Airflow์ Celery๋ฅผ ๋น๊ตํ๋ค. ํฌ๋กค๋ง ๊ด๋ฆฌ Airflow vs Celery๊ฐ์๊ธฐ์กด ํ๋ก์ ํธ์ ํฌ๋กค๋ง ์์คํ ์ Airflow๋ก ๊ด๋ฆฌํ๋ค.Airflow ์ด์ ์ค์ด๋ ์๋ฒ์ ๋ฌธ์ ๊ฐ ๋ง์๋ ๋ฐ, ๊ทธ ์ค์์ ์ ์ผ ํฐ ๋ฌธ์ ๋ cpu ์ ์ ์จ์ด 100์ผ๋ก ์น์์ ๋๊ฐ ๋ง์๋ค๋ ๊ฒ์ด๋ค.Airflow๋ก ์ด์bonory.tistory.com ํฌ๋กค๋ง ์งํ ์, Celery๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ ์ ํฉํ๋ค๋ ํ๋จ๊ณผ ํจ๊ป ์์ ๋ฅผ ์์ฑํ๋ค. FastAPI + Celery + requests + BeautifulSoup ๋ฅผ ํ์ฉํ ํฌ๋กค๋ง ์์ ์ ์ํํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ์์ ํฌ๋กค๋ง์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋๋ก ์งํ๊ธฐ๋ณธ ๊ตฌ์กฐFastAPI: ์ฌ์ฉ์๊ฐ API๋ฅผ ํตํด ํฌ๋กค๋ง ์์ฒญ์ ๋ณด๋Celery: ์์ฒญ์ ํ์ ๋ฃ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋์์ .. 2025. 2. 5. ์ด์ 1 2 3 4 ๋ค์