✨ new ✨
-
[MQTT] presence detection 에서 qos 와 retain 설정
최근 진행한 것 중에 유용하게 잘 사용한 paho-mqtt option이 있어서 기록한다. 아래와 같은 mqtt 를 개발하고 있었다mqtt 통신의 신뢰성을 높이기 위해서 main client 에서 sub client 의 연결 상태(online/offline)를 실시간으로 확인하고 싶었다. ✨ 여기서 새로 알게된 용어 : presence detection→ IoT, MQTT, 채팅 시스템에 많이 쓰이는 개념이다.→ 현재 누가 연결되었는지(online), 누가 연결이 끊어졌는지(offline)에 대한 상태를 시스템이 실시간으로 파악하는 기능이다.→ "클라이언트의 접속 상태 감지" 라고 생각하면 될 듯 ! 우선, sub client에서는 {"client1": "online"} 이런 형식으로 publish ..
2025.05.08
-
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.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" 간단한 코드 구..
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 사용했다. 연결 잘됨 ~
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..
2025.02.20
-
[Celery] 간단하게 성능 체크
실행 후 CPU 사용량 및 Celery Worker 상태를 모니터링하려 한다. ✔ Celery Worker 프로세스 확인ps aux | grep "celery worker" ✔ CPU & 메모리 사용량 체크htop ✔ Redis에 대기 중인 작업 확인redis-cli llen celery → 만약 대기 중인 작업 개수 확인하고 적절한 concurrency 조정→ 메모리 사용량도 고려해서 concurrency 조정
2025.02.19
🔥 hot 🔥
-
[python] 네이버 카페 크롤링
네이버 카페 게시글을 크롤링 하려 한다. python requests를 이용해서 가지고 오려고 했으나 회원님의 안전한 서비스 이용을 위해 비밀번호를 확인해 주세요. IP가 자주 변경되는 네트워크 환경에서 로그인하는 경우 IP보안을 해제 후 이용하시기 바랍니다. 다시 한번 비밀번호 확인 하시면 이용중인 화면으로 돌아가며, 작성 중이던 내용을 정상적으로 전송 또는 등록하실 수 있습니다. 이렇게 접근할 수 없음을 알 수 있다. 이렇게 되면 selenium을 이용해서 동적으로 접근하기로 한다. 로그인 id 와 password를 입력해서 아래의 코드를 실행하면 로그인이 진행됨을 알 수 있다. import time from selenium import webdriver import csv import pandas ..
2024.01.30
-
[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
-
[gRPC] gRPC과 websocket 비교 정리
기존에 개발했던 서비스에서 클라이언트와 서버 통신을 websocket 으로 구현했다.다 끝내고나서 클라이언트, 서버 통신하는 방법을 좀 더 서치해보고 싶었다그렇게 알게된 gRPC. 정리해보자 ✅ gRPC와 WebSocketgRPC와 WebSocket은 둘 다 네트워크 통신 프로토콜로, 실시간 데이터 전송과 클라이언트-서버 간 상호작용을 가능하게 함gRPCGoogle이 개발한 RPC(Remote Procedure Call) 프레임워크HTTP/2 기반으로 동작하며, 프로토콜 버퍼(Protocol Buffers, Protobuf)를 사용하여 데이터 직렬화를 수행클라이언트는 서버의 메서드를 호출하듯이 원격으로 기능을 실행WebSocketHTML5 표준으로, TCP 소켓 연결을 통해 양방향 통신을 가능하게 함프로..
2024.11.25
-
[Airflow] local에서 간단하게 시작하기
개요airflow 관련해서 간단하게 테스트하기 위해서 로컬해서 실행하는 방법을 정리하려한다진행Step 1. 가상 환경필수 사항은 아니지만 pip 버전으로 크게 골치 아프고 싶지 않기에 무조건적으로 set up 해준다# Create a virtual environmentpython3 -m venv airflow-venv# Activate the virtual environmentsource airflow-venv/bin/activate Step 2. Apache Airflow 설치pip을 이용해서 설치해준다.AIRFLOW_VERSION=2.5.1PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"CONSTRAINT_URL="..
2024.07.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
-
[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
-
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
-
[MQTT] message를 안보내는데 계속 message가 쌓이는 issue
사실 이건 문제까지는 아니고, 좀 더 자세하게 알고 싶었다.저번 포스팅에서는 mqtt explorer 에 연결을 했다. [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.bonory.tistory.com 연결을 하고 보니,나 연결만 하고 아무 것도 안했는데 ?! 자꾸 몇초 간격으로 message가 쌓이는 것 처럼 숫자가 계속 늘어났다.뭐지 ??????? 한번 확인해보..
2024.03.07
-
[linux] E: Package 'python3-pip' has no installation candidate
AWS에서 ec2 instance를 생성하고 pip을 설치하려고 하니까 다음과 같은 에러가 발생했다. $ sudo apt install python3-pip E: Package 'python3-pip' has no installation candidate pip이 후보군에 없다는 것이다. 이렇게 되면 apt update를 진행한다. sudo apt update sudo apt install python3-pip 이젠 pip이 잘 설치된다. 설치가 다 될때 쯤에 처음보는 게 나왔다. 개발인생 중에 처음 보는 광경 default로 지정하고 넘어감
2024.02.28