MQTT(Message Queuing Telemetry Transport) 프로토콜은 ISO/IEC 20922로 등재된 표준 프로토콜로 현재는 5.0까지 나왔다. TCP/IP 기반에서 동작하는 발행/구독(publish/subscribe ) 방식의 프로토콜이다. 프로토콜 구현을 위한 코드가 짧고, 메시지의 최대 길이도 64MB 정도 이므로 IoT 기기들의 메시지 전달에 적절하다고 할 수 있다. 위의 그림에서 보듯이 각 클라이언트는 짧은 정보를 브로커(Broker)에 던지고 특정 정보를 구독하는 클라이언트에게 해당 정보과 전달되는 방식이다. 클라이언트 B를 온도 센서라 한다면 클라이언트 A는 모바일기기 일수도 있고 정보를 수집하는 서버일 수도 있다. 동일한 토픽(topic, 그림에서는 temperature/..
여름철 무더위에 사람도 힘들어 하지만 노트북도 데스크톱도 서버도 올라가는 온도에 힘들어하기는 마찬가지이다. 에어컨이 빵빵한 곳에서는 문제가 되지 않지만 그렇지 않은 곳에서는 시스템이 죽는 원인 중의 하나가 바로 온도이다. 시스템을 느리게 만드는 원인이기도 하다. 먼지가 쌓여서 문제가 생기기도 하고, 온도를 식히는 팬이 망가져서 생기기도 한다. 그렇다면 마더보드의 온도를 미리 검사하는 방법은 무엇일까? 물론 시스템을 구동시키지 않은 상태라면 BIOS에서 여러 센서에서 올라오는 정보를 바탕으로 온도를 확인하고 대처할 수 있다. 그렇지만, 지금 필요로 하는 것은 정상 동작 중인 시스템에 문제가 없도록 하거나 시스템의 온도를 확인하고 싶은 것이므로 이를 수행하는 도구를 찾아야 한다. 운영체제 자체에서는 이러한 ..
리눅스 시스템이 조금 이상하다고 생각이 될 때 디스크를 검사하는 과정을 메모해 두고자 한다. sudo apt-get install smartmontools sudo systemctl start smartd 일단 "df -h"로 디스크 상황을 조회하고 위와 같은 명령으로 smartmontools를 설치하고 서비스를 가동한다. 위의 그림처럼 "systemctl status smartd" 명령을 사용하면 서비스 상태를 확인할 수 있다. "sudo smartctl -i /dev/sda1" 명령으로 위의 그림처럼 디스크의 세부 정보를 확인할 수 있다. ubuntu@ubuntu:~$ sudo smartctl -t short /dev/sda1 smartctl 6.6 2016-05-31 r4324 [i686-linux..
가상 머신에서 리눅스를 설치하거나, USB 부팅이 가능한 환경이라면 본 포스팅은 해당 사항이 없다. 요즘 대부분의 리눅스에서는 USB 메모리를 부팅 가능하도록 만들어서 시스템을 설치하므로 USB 부팅이 가능한 시스템이라면 리눅스 배포판의 가이드에 따라 시스템을 설치하면 된다. 예전 같으면 CD-ROM으로 부팅해서 시스템을 설치하기도 했지만 이제는 CD도 CD 드라이버도 골동품이 되어 버렸다. 시스템의 BIOS 설정에서 USB 부팅을 할 수 없고 CD-ROM 부팅도 불가능 하지만 인터넷이 가능한 환경이라면 오프 소스 도구를 통해서 리눅스 시스템을 간편하게 설치할 수 있다. 도구의 이름은 UNetbootin이고 홈페이지 주소는 http://unetbootin.github.io/이며, 소스 코드는 https:..
연식이 20년 가까이 된 컴퓨터에 리눅스를 설치하다 보니 오래전에 했던 삽질을 다시 하게 된다. 이제는 삽질도 어렵다. 메모하는 것이 세월의 물살에서 살아남는 것이 아닐까 싶다. 고정 IP를 설정하는 이유야 여러 가지가 있겠지만 내부 테스트나 기타 과정에서 서버 역할을 하는 컴퓨터의 IP가 DHCP로 인하여 바뀔 수 있다면 이것은 정말 귀찮은 일이다. 물론 공유기나 DHCP 서버 역할을 하는 곳에서 MAC주소를 보고 고정 IP를 부여하는 방법도 있지만 이 또한 관리 비용이 필요하다. 아무튼 고정 IP 설정을 하려면 인터페이스 카드의 이름을 알아야 하는데 위의 그림처럼 "ifconfig -a" 명령으로 확인할 수 있다. 리눅스 설치 후에 ifconfig 명령이 없다면 "sudo apt install net..
인플럭스(Influx)라는 단어 자체가 친숙하지 않은 사람이지만 인플럭스 DB가 시계열 데이터베이스(Time-series Database, TSDB)라는 것을 접하자마자 호기심이 발동한다. 스카다(SCADA)나 빅데이터를 기반으로 모델을 만들어 검증하는 시스템에서 시계열 데이터, 즉 시간의 흐름에 따른 값의 변화는 상당히 중요한 정보이다. 그런데 이것을 전통적인 관계형 데이터베이스에 저장하면 저장이나 검색의 효율성 측면에서 오버헤드가 심한 것이 사실이다. 피상적인 아키텍처 수준에서도 이러한 비효율은 어렵지 않게 확인할 수 있다. 효율을 높이기 위해 테이블 파티션(Partition)이 도입되기도 했지만 한계가 있는 것이 사실이다. DBMS 입장에서 보면 시계열 데이터들은 인플럭스(Influx)라는 단어의 ..
DBMS를 교과서로 접하고 실제 업무에서 이런저런 DBMS와 씨름한 지도 한참인데, 오래간만에 DBMS를 접하다 보니 필자는 오늘에서야 DBaaS라는 말을 접하게 된다. 클라우드 시스템이 보편화된 지도 상당한 시간이 흐른 시점이니까 DBaaS라는 용어가 등장한 지도 상당한 시간이 흘렀을 텐데 말이다. 오늘날의 IT 환경에서 MySQL(MariaDB)이나 PostgreSQL로 대표되는 오픈소스 DBMS가 수행하는 역할은 상상이상으로 엄청난 것이다. 오라클이나 SQL Server로 대표되는 상용 DBMS의 단순 대체재를 넘어서 기술을 선도하고 있는 모습이다. 크레이트 DB의 소개를 보면 분산 SQL DBMS를 대표적인 정체성으로 내세우면서 전통적인 관계형 DBMS, NoSQL과 전문 검색 엔진의 장점을 통합..
"DNP3 프로토콜에 대한 고찰"을 통해서 DNP3 프로토콜을 살펴보고 실제로 DNP3 맛보기를 해볼까 한다. 실제 장비가 있으면 더 실감 나겠지만 테스트와 스터디를 위한 것이므로 실제 장비처럼 동작하는 시뮬레이터를 찾아보았다. 문제는 라이브러리는 많은데 의외로 라이선스가 개방적인 시뮬레이터 프로그램은 찾기 어려웠다. 그래도 차선으로 제한적인 라이선스이지만 Freyr SCADA에서 배포하고 있는 무료 시뮬레이터를 사용하기로 했다. https://sourceforge.net/projects/dnp3-source-code-library/files/에서는 시뮬레이터와 윈도우 및 리눅스 SDK까지 한 번에 받을 수도 있고, https://sourceforge.net/projects/dnp3-outstation-..
PLC에서 DNP3 프로토콜을 지원한다는 옵션을 보기는 했지만 프로토콜을 어느 정도 알아야겠다는 생각을 하게 되었다. DNP3 프로토콜의 사용자 그룹 사이트의 주소는 https://www.dnp.org/이다. 처음에는 전력 산업에서 발전소와 변전소 컴퓨터 및 RTU(Remote Terminal Units), IED(Intelligent Electronic Devices)와 같은 장치들 간의 통신을 위해서 만들어졌으나 현재는 상하수도, 가스를 비롯한 여러 산업에서도 사용되고 있다. 공개된 프로토콜로 IEEE Standard 1815 표준이 있다. 위의 그림은 4 계층의 DNP3 프로토콜 구조로 EPA(Enhanced Performance Architecture)에서 메시지 분할을 위해 Pseudo-Tran..
"무료 백넷 개발 도구 야베(YABE)와의 만남"에서 백넷 프로토콜의 매력과 함께 야베 도구의 매력을 함께 경험했다면 이번에는 소스 코드도 배포하고 있는 야베를 빌드해 보기로 했다. Addon 프로그램을 추가로 만들 수도 있고 필요한 수정이나 기능 추가도 가능하니 미리 코드를 빌드해 보고자 한다. MIT 라이선스이니 개발과 배포에 있어 상당히 자유로운 측면이 있다. 솔루션 빌드이전에 필요한 것은 일단 비주얼스튜디오이고 시스템에 .NET Framework 4.8 개발자팩이 설치되어 있는지 확인해야 한다. 없다면 https://dotnet.microsoft.com/ko-kr/download/visual-studio-sdks?cid=getdotnetsdk를 참조한다. 야베의 소스코드 리포지토리는 서브버전(Su..
백넷(BACnet, Building Automation and Control Network) 프로토콜을 공부하고 조사하는 과정에서("BACnet에 대한 고찰" 참조) 소스포지에서 설치 파일과 소스 코드를 배포하고 있는 야베(YABE, Yet Another Bacnet Explorer)라는 백넷 관련 도구를 만날 수 있었다. 백넷에 접속하여 다양한 장비 정보를 직접 확인할 수도 있지만 무엇보다 매력적인 것은 C# 기반으로 다양한 예제 프로그램과 데모 프로그램을 함께 배포하고 있다는 것이었다. 이런 매력 때문일까 소스포지에서도 상당히 인기 있는 프로그램에 해당한다. 프로젝트 주소는 https://sourceforge.net/projects/yetanotherbacnetexplorer/이다. 야베 프로젝트 페..
최근에 BEMS(Building Energy Management System)를 접하면서 전통적인 모드버스(ModBUS) 프로토콜과 함께 자주 접하는 프로토콜이 있다면 바로 BACnet(이후 백넷으로 기술)이다. 모드버스가 등장한 것이 1979년이고 백넷이 등장한 것이 1987년이니까 약 십 년의 차이가 있다. 모드버스가 슈나이더라는 민간 회사에서 만들어 이후로 표준화가 진행되었다면, 백넷은 ASHRAE(American Society of Heating, Refrigerating and Air-Conditioning Engineers)라는 협회에서 시작되어 ANSI, ISO, 유럽 표준으로 채택되었다. 협회의 이름에서도 알 수 있듯이 건물의 냉난방, 환기, 공조 시스템 전문가들이 모여서 건물 자동화와 제..
"모드버스(Modbus) 응용 개발을 위한 준비" 글에서 모드버스 프로토콜과 응용 개발 과정, 그리고 연관된 시뮬레이터 프로그램을 다루었는데 그중의 하나가 RMMS(Radzio! Modbus Master Simulator)라는 프로그램이다. 프로그램 다운로드는 앞선 글을 참조한다. 일반적인 개발자에게는 쓸모가 없을 수도 있다. 보통 모드버스 슬레이브 서버를 장착하는 PLC 장비나 기타 임베디드 장비를 개발하는 경우에 장비가 원활하게 모드버스 서비스를 제공하는지 확인하는 용도로 활용할 수 있다. 다른 용도는 스카다 시스템이나 HMI 개발자가 프로그램 개발 전후로 실제 PLC나 시스템과 모드버스로 데이터가 정상적으로 전달되는지 확인하는 도구로 활용할 수도 있다. 개발 중인 스카다 시스템이나 HMI와 다른 도..
모드버스 슬레이브(Slave) 시뮬레이터 mod_RSsim 사용하기를 간단하게 메모해 두고자 한다. 모드버스 프로토콜에 대한 소개와 mod_RSsim 다운로드는 "모드버스(Modbus) 응용 개발을 위한 준비"를 참조하면 된다. 모드버스 슬레이브(Slave)라는 것은 모드버스 마스터의 요청에 따라 데이터를 전달하거나 저장하는 서버의 역할을 하는 노드로 PLC와 같은 장비들이 주로 모드버스 슬레이브의 역할을 수행한다. 이러한 장비가 없는 경우 또는 실제 장비에 영향을 주지 않는 안전한 테스트가 필요한 경우에 모드버스 슬레이브 시뮬레이터를 사용할 수 있다. ■ MODBUS TCP로 가동하기 모드버스 TCP 모드로 시뮬레이터를 가동하려면 우측 상단 "Prot:" 항목의 콤보 박스를 "MODBUS TCP/IP"..
모드버스(Modbus) 프로토콜은 PLC를 비롯한 다양한 장비들 간의 정보 소통을 위한 표준 통신 프로토콜로 요즘 나오는 대부분의 PLC들은 대부분 모드버스 프로토콜을 지원하고 있고 스카다나 BEMS, MES와 같은 대형 소프트웨어에서도 장비나 타 시스템과의 통신을 위해 모드버스 프로토콜을 지원하고 있다. 이렇게 모드버스 프로토콜이 표준으로 자리 잡을 수 있었던 배경에는 일치감치 상세한 프로토콜 스펙이 오픈되고 연관한 오픈소스 라이브러리가 공개되어 안정적으로 성능을 발휘한 까닭이 아닌가 싶다. 1979년 처음 프로토콜이 등장할 당시만 해도 시리얼 통신 프로토콜이었으나 지금은 TCP/IP로도 사용할 수 있다. 모드버스 프로토콜을 접하려면 우선 어떤 방식을 채용할지를 확인해야 한다. 소프트웨어 개발자의 시작..
가상머신을 사용하다 보면 가상머신에서 작업하는 내용을 호스트 컴퓨터에서 활용하거나, 반대로 로스트 컴퓨터에 메모한 내용을 가상머신에서 사용하는 과정이 빈번하게 발생한다. 이 작업이 잘 동작하지 않으면 그야말로 짜증이 폭발한다. 일도 하고 싶지 않아 진다. 이럴 때 차분하게 상황을 점검해 볼 필요가 있다. 우선 위의 그림처럼 장치> 클립보드 공유가 "양방향"으로 설정되어 있는지 확인한다. 다른 확인 방법은 머신> 로그보기로 클립보드 공유 설정이 원하는 대로 이루어졌는지 확인한다. 클립보드 공유가 정상적 동작하고 있으면 위의 그림처럼 클립보드 관련 로그가 남는다. pkill -f VBoxClient; VBoxClient --clipboard 그럼에도 클립보드 공유가 정상적으로 동작하지 않는다면, 마지막으로 ..
호스팅을 하고 있다면 업체에서 알아서 설정해 놓으니 대부분 문제 될 것은 없지만 자체 서버에 APM 등을 설치하고 웹 테스트를 진행하는데 한글이 깨진다면 일단 두 가지를 확인해야 한다. $ locale LANG=ko_KR.UTF-8 LANGUAGE=ko_KR LC_CTYPE="ko_KR.UTF-8" LC_NUMERIC="ko_KR.UTF-8" LC_TIME="ko_KR.UTF-8" LC_COLLATE="ko_KR.UTF-8" LC_MONETARY="ko_KR.UTF-8" LC_MESSAGES="ko_KR.UTF-8" LC_PAPER="ko_KR.UTF-8" LC_NAME="ko_KR.UTF-8" LC_ADDRESS="ko_KR.UTF-8" LC_TELEPHONE="ko_KR.UTF-8" LC_MEASUR..