본문 바로가기

전체 글

(920)
[ 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...
[ Tailscale ] 설치하고 사용하는 법 (RHEL) Red Hat Enterprise Linux(RHEL)에서도 Tailscale은 바로 설치해서 사용할 수 있습니다. 현재 공식적으로 RHEL 7, 8, 9, 10 설치 방법이 제공됩니다. Tailscale가장 간단한 방법은 공식 설치 스크립트를 사용하는 것입니다.curl -fsSL https://tailscale.com/install.sh | sh설치 후:sudo tailscale up명령을 실행하면 로그인용 URL이 표시됩니다. 브라우저에서 로그인하면 해당 RHEL 서버가 자신의 Tailscale 네트워크(tailnet)에 등록됩니다. Tailscale서버 운영 환경이라면 저는 아래처럼 저장소를 직접 등록하는 방식을 권합니다.예를 들어 RHEL 9라면:sudo dnf config-manager --ad..
[ Network ] Tailscale + NAT로 특정 서버 트래픽을 고정 공인 IP로 보내는 방법 가능합니다. 목적이 Tailscale에 연결된 내부 서버가 Fixed Public IP 서버를 경유해서 외부 인터넷 서버로 요청을 보내고, 외부 서버에서는 Fixed Public IP로 접속한 것으로 보이게 하는 것이라면 아래 구조가 적합합니다.[Heracles / Client]Tailscale IP: 100.x.x.x | | Tailscale v[Fixed IP Server]Tailscale IP: 100.y.y.yPublic IP: 1.2.3.4 | | NAT / SNAT v[Internet Target Server]203.0.113.50핵심은 Fixed IP Server가 Router + NAT Gateway 역할을 하는 것입니다.가장..
[ Network ] WireGuard + NAT로 특정 서버 트래픽을 고정 공인 IP로 보내는 방법 외부 서버가 보안상의 이유로 등록된 공인 IP에서 들어오는 요청만 허용하는 경우가 있습니다.예를 들어 외부 서버의 방화벽이나 ACL에 다음과 같이 특정 IP만 등록되어 있다고 가정해보겠습니다.허용 IP: 211.xxx.xxx.xxx그런데 실제 애플리케이션이 실행되는 서버의 공인 IP가 유동 IP이거나, 여러 장소에서 해당 서버에 접근해야 한다면 문제가 발생합니다.이 경우 고정 공인 IP를 가진 Linux 서버를 중간 Gateway로 사용할 수 있습니다.구성은 다음과 같습니다.Application Server | | WireGuard vFixed Public IP Linux | | NAT vInternet | ..