본문 바로가기

전체 글

(923)
[ SSH ] SSH 터널링을 이용해 원격 컴퓨터의 서비스 연결하기 이때는 SSH의 Local Port Forwarding (-L) 기능을 사용하면 됩니다.1. 네트워크 구성예를 들어 다음과 같은 환경이라고 가정하겠습니다.[내 컴퓨터]192.168.0.10 | | 인터넷 | ▼[원격 공유기]공인 IP: 123.123.123.123포트포워딩:2222 → 192.168.1.100:22 | ▼[원격 컴퓨터]192.168.1.100SSH: 22HTTP: 3000 (예: Grafana)목표는 내 컴퓨터에서 다음 주소로 접속하는 것입니다.http://localhost:3000그러면 SSH 터널을 통해 원격 컴퓨터의 3000 포트로 연결됩니다.2. SSH 터널링 명령어내 컴퓨터의 터미널에서 실행합니다.ssh -L 3000:127.0.0.1:..
[ Grafana ] Grafana 완벽 가이드: 개념부터 설치, 모니터링, 알림까지 **Grafana**는 서버, 데이터베이스, 애플리케이션, IoT 장비 등에서 발생하는 데이터를 실시간으로 시각화하고 모니터링하는 오픈소스 플랫폼입니다.특히 Prometheus, PostgreSQL, Docker, Python 기반 시스템 운영에 유용합니다.Grafana는 단순히 그래프를 그리는 프로그램이 아닙니다. 시스템 상태 관찰, 성능 분석, 장애 감지, 알림, 운영 대시보드를 통합적으로 제공하는 도구입니다.1. Grafana는 어떤 프로그램인가?예를 들어 다음과 같은 시스템을 운영한다고 가정하겠습니다.PostgreSQL 16 데이터베이스Apache Airflow 2.9 데이터 처리 작업Python FastAPI 서버Docker 컨테이너Linux 서버 여러 대Grafana를 사용하면 이 모든 시스템..
[ Modbus ] TamidaS Simulator + ModbusTool로 Modbus TCP 테스트 환경 구축하기 Modbus를 이용하는 프로그램을 개발할 때 실제 PLC, 전력계, 센서 등의 장비가 없어도 통신을 테스트할 수 있습니다.이번 글에서는 다음과 같은 테스트 환경을 구성합니다.┌──────────────────────────────┐│ Windows PC ││ ││ QModMaster ││ Modbus Master / Client ││ │ ││ │ Modbus TCP ││ │ 127.0.0.1 ││ ▼ ││ TamidaS Si..
[ Airflow ] Manual Trigge 시 Dropbox(드롭다운) 형태로 선택 예를 들어 Airflow 2.9 기준으로:from airflow import DAGfrom airflow.models.param import Paramfrom airflow.operators.python import PythonOperatorfrom datetime import datetimedef run_job(**context): mode = context["params"]["mode"] print(f"선택된 mode = {mode}")with DAG( dag_id="manual_dropdown_test", start_date=datetime(2024, 1, 1), schedule=None, # Manual 실행 catchup=False, params=..
[ Modbus ] TamidaS Simulator + QModbus로 Modbus TCP 테스트 환경 구축하기 Modbus를 이용하는 프로그램을 개발할 때 실제 PLC, 전력계, 센서 등의 장비가 없어도 통신을 테스트할 수 있습니다.이번 글에서는 다음과 같은 테스트 환경을 구성합니다.┌──────────────────────────────┐│ Windows PC ││ ││ QModMaster ││ Modbus Master / Client ││ │ ││ │ Modbus TCP ││ │ 127.0.0.1 ││ ▼ ││ TamidaS Si..
[ DB ] unnest로 데이터 insert시 중복 제거하기 별도의 dedup dict를 먼저 만들지 않고, unnest용 dict를 만드는 루프에서 바로 중복 제거한다.예를 들어:params = {"a": [], "b": [], "value": [],}seen = set()for row in rows: key = (row["a"], row["b"]) if key in seen: continue seen.add(key) params["a"].append(row["a"]) params["b"].append(row["b"]) params["value"].append(row["value"])이렇게 하면 별도의:dedup = {}단계를 만들지 않고 한 번의 루프로 처리할 수 있습니다.다만 이 방식은 첫 번째 데이터가..
[ Modbus ] Modbus 데이터 읽기 Modbus는 PLC, 계측기, 인버터, 전력계, 센서 같은 산업 장비끼리 데이터를 주고받기 위한 아주 오래되고 단순한 통신 프로토콜입니다.핵심은 “장비 내부의 특정 주소에 있는 값을 읽거나 쓰는 방식”입니다. 예를 들어 전력계에서 전압이 40001, 전류가 40002 같은 레지스터에 있다고 가정하면, Modbus Master가 해당 주소를 읽어서 값을 가져옵니다.주로 다음 두 가지 형태를 많이 씁니다.Modbus RTU: RS-485/RS-232 같은 시리얼 통신 사용Modbus TCP: Ethernet/TCP/IP 사용, 기본 포트는 502Modbus의 통신 구조는 전통적으로 Master / Slave라고 불렀고, 최근 문서에서는 Client / Server라고 표현하기도 합니다. Master(Cli..
[ Tailscale ] 설치하고 사용하는 법 (Rocky Linux) Tailscale 공식 문서도 RHEL/CentOS/Fedora 계열과 그 파생 배포판을 지원 대상으로 안내합니다. Tailscale가장 간단한 방법은 공식 설치 스크립트입니다.curl -fsSL https://tailscale.com/install.sh | sh설치 후 서비스를 확인하고 Tailscale에 접속합니다.sudo systemctl enable --now tailscaledsudo tailscale uptailscale up을 실행하면 인증 URL이 나옵니다. 브라우저에서 로그인하면 해당 Rocky Linux 서버가 자신의 Tailscale 네트워크에 등록됩니다. Tailscale확인은 다음처럼 하면 됩니다.tailscale statustailscale ip -4예를 들어:100.80.10...