✨ new ✨ 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.. 댓글 0 2025.03.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" 간단한 코드 구.. 댓글 0 2025.02.25 [MQTT] Mac mosquitto 설치 / 실행 / 중지 1. mosquitto 설치brew install mosquitto 2. mosquitto 서비스 실행brew services start mosquitto 3. mosquitto 서비스 중지brew services stop mosquitto 메세지 확인은 MQTT Explorer 사용했다. 연결 잘됨 ~ 댓글 0 2025.02.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.. 댓글 0 2025.02.20 [Celery] 간단하게 성능 체크 실행 후 CPU 사용량 및 Celery Worker 상태를 모니터링하려 한다. ✔ Celery Worker 프로세스 확인ps aux | grep "celery worker" ✔ CPU & 메모리 사용량 체크htop ✔ Redis에 대기 중인 작업 확인redis-cli llen celery → 만약 대기 중인 작업 개수 확인하고 적절한 concurrency 조정→ 메모리 사용량도 고려해서 concurrency 조정 댓글 0 2025.02.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~.. 댓글 0 2025.02.19 이전다음 🔥 hot 🔥 [python] TypeError: 'type' object is not subscriptable ✅ 개요 python3.8 환경에서 코드를 실행시키니 아래와 같은 에러와 함께 실행이 안되었다TypeError: 'type' object is not subscriptable 오류가 발생하는 지점을 보니def test_function1() -> list[str]: ... def test_function2() -> dict: 타입 힌트를 지정할 때 생기는 오류원인을 확인해보니, typing 힌트는 python3.9부터 지원하고 있다 ✅ 방법 1사용하는 python 을 3.9로 업데이트하는 방법이 있고 ✅ 방법2python typing 라이브러리를 사용하여 지정해주면 된다.python 버전 업은 큰 맘 먹고해야하니 이 방법을 강추한다.from typing import List, Dictdef test_.. 2024.05.02 [python] 네이버 카페 크롤링 네이버 카페 게시글을 크롤링 하려 한다. python requests를 이용해서 가지고 오려고 했으나 회원님의 안전한 서비스 이용을 위해 비밀번호를 확인해 주세요. IP가 자주 변경되는 네트워크 환경에서 로그인하는 경우 IP보안을 해제 후 이용하시기 바랍니다. 다시 한번 비밀번호 확인 하시면 이용중인 화면으로 돌아가며, 작성 중이던 내용을 정상적으로 전송 또는 등록하실 수 있습니다. 이렇게 접근할 수 없음을 알 수 있다. 이렇게 되면 selenium을 이용해서 동적으로 접근하기로 한다. 로그인 id 와 password를 입력해서 아래의 코드를 실행하면 로그인이 진행됨을 알 수 있다. import time from selenium import webdriver import csv import pandas .. 2024.01.30 [Safari] http 요청을 https로 강제 전환해버리는 문제 | fastapi, uvicorn 기존에 진행되어서 배포된 프로젝트에서 safari로 접속시 버그가 있다는 제보에 local에서 실행시키고 localhost로 접속을 시도했다. WARNING: Invalid HTTP request received. Traceback (most recent call last): File "/Users/{myname}/Desktop/project/{projectname}/venv/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 131, in data_received self.parser.feed_data(data) File "httptools/parser/parser.pyx", line 212, in httptools.p.. 2024.03.27 [gRPC] gRPC과 websocket 비교 정리 기존에 개발했던 서비스에서 클라이언트와 서버 통신을 websocket 으로 구현했다.다 끝내고나서 클라이언트, 서버 통신하는 방법을 좀 더 서치해보고 싶었다그렇게 알게된 gRPC. 정리해보자 ✅ gRPC와 WebSocketgRPC와 WebSocket은 둘 다 네트워크 통신 프로토콜로, 실시간 데이터 전송과 클라이언트-서버 간 상호작용을 가능하게 함gRPCGoogle이 개발한 RPC(Remote Procedure Call) 프레임워크HTTP/2 기반으로 동작하며, 프로토콜 버퍼(Protocol Buffers, Protobuf)를 사용하여 데이터 직렬화를 수행클라이언트는 서버의 메서드를 호출하듯이 원격으로 기능을 실행WebSocketHTML5 표준으로, TCP 소켓 연결을 통해 양방향 통신을 가능하게 함프로.. 2024.11.25 [Airflow] The scheduler does not appear to be running. Last heartbeat was received 7 hours ago.The DAGs list may not update, and new tasks will not be scheduled. 잘 운영되던 Airflow가 갑자기 멈춘것 같다는 얘기를 듣고 봤더니 엥 ~ ?? 내 DAG 들 다 오디감 ?The scheduler does not appear to be running. Last heartbeat was received 7 hours ago.The DAGs list may not update, and new tasks will not be scheduled. >> 해석스케줄러가 실행 중이 아닌 것 같음. 마지막은 7시간 전에 수신되었음.DAG 목록이 업데이트되지 않을 수 있으며 새 작업이 예약되지 않음. Airflow 기능 중에 health 확인할 수 있는 방법이 있어서 한번 사용해보았당/health health 한지 unhealthy 한지 확인할 수 있다. 진짜 이유는 memory .. 2024.03.08 [Airflow] airflow ui에서 arguments 전달하기 개요Airflow의 Task들은 스케줄링으로 관리하고 있다.하지만 단발성으로 실행되어야하는 Task들도 존재한다.초기 데이터 적재 혹은 재적재 이슈로 인해..이러한 경우에 Arguments을 전달하고 싶을 때 어떻게 해야할까 찾아보았다.진행BashOperator, PythonOperator 두가지 방법으로 테스트해보았다.from datetime import datetime, timedeltafrom airflow import DAGfrom pendulum.tz.timezone import Timezonefrom airflow.operators.bash import BashOperatorfrom airflow.operators.python import PythonOperatorfrom airflow.ope.. 2024.07.11 정보처리기사 필기 핵심 요약 | 1과목 : 소프트웨어 설계 ✨ 소프트웨어 생명 주기 Software Life Cycle소프트웨어 개발 단계와 각 단계별 주요 활동, 그리고 활동의 결과에 대한 산출물로 표현한다. ✨ 폭포수 모형 Waterfall Model소프트웨어 개발은 이전 단계로 돌아갈 수 없다.각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행 (선형 순차적)전통적, 고전적 ✨ 나선형 모형 Spiral Model, 점진적 모형보헴Boehm이 제안한 것나선을 따라 돌듯이 여러번의 소프트웨어 개발 과정을 거쳐 점진적으로 완벽한 최종 소프트웨어를 개발 ✨ 애자일 모형 Agile Model고객 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주리를 반복하는 개발과정좋은 것을 빠르고 낭비 없게 만들기 위해 고객과의 소통.. 2025.01.11 [Docker] Dockerfile COPY와 Mount 비교 개요file과 directory를 image build할 때 Dockerfile에서 COPY하는 것과 Docker container를 생성할 때 Mount하는 것을 비교하고 구분해 보려고 한다.Dockerfile에서 COPYCOPY는 build 시점에 host file/directory를 container image 안으로 복사한다.container 실행 시, Mount와 달리 파일이 컨테이너 이미지의 일부가 된다.container가 독립적으로 실행되거나 배포되는 경우 유용하다container 실행 시 항상 동일한 파일이 필요할 때공유 directory 없이 container 단독으로 실행되도록 하고 싶을 때예시)COPY ./app /app MountMount는 host 시스템의 파일/디렉토리를 cont.. 2024.11.20 nginx에 mTLS 인증서 발급하고 검증하기 mTLS 란?mTLS는 "Mutual Transport Layer Security"의 약자로, 클라이언트와 서버 간의 상호 인증을 위한 TLS(Transport Layer Security) 프로토콜의 확장이다. 일반적인 TLS는 서버만 인증하는 반면, mTLS는 클라이언트와 서버 모두가 서로를 인증하는 방식이다. 이를 통해 더 높은 수준의 보안이 제공된다. mTLS의 작동 방식은 서버 인증, 클라이언트 인증, 상호 인증 완료 로 진행되어야 한다. 1. 서버 인증 : 클라이언트 서버의 SSL/TLS 인증서를 확인하여 서버의 신원을 검증한다. 이는 일반적인 TLS 연결에서 이루어지는 단계이다.2. 클라이언트 인증 : 서버 또한 클라이언트로부터 인증서를 요청한다. 클라이언트는 자신의 인증서를 서버에 제출하여 .. 2024.08.16 [MQTT] mqtt client에 connect 안되는 문제 ec2 instance를 생성하고 mosquitto를 실행시켰다. 그리고 mqtt connection tool를 사용하여 연결을 시도하니, 연결이 불가능했다 Starting in local only mode. Connections will only possible from clients running on this machine. 로컬 모드에서만 가능하며 Create a configuration file which defines a listener to allow remote access. 원격 엑세스를 config를 create 하라고 하는 것 같다 첫번째, mosquitto config를 수정한다. linux라면 /etc/mosquitto/mosquitto.conf 에 위치한다. 이렇게 설정되어있는데.. 2024.03.06 more