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..
프로그램 내에서 워드 문서(마소 오피스나 리브레 오피스로 작성)를 새롭게 생성하거나, 기존 문서를 수정하거나 아니면 특정 양식에 필요한 내용을 반영하여 새로운 문서를 만드는 등의 작업을 하는 경우가 있다. 자동차 검사소에서 고객들이 받는 검사 결과지를 예로 들 수 있다. 각종 자동차 검사를 수행하면 다양한 검사 장비와 센서에서 올라온 값들을 검사원이 양식에 일일이 입력하는 것이 아니라 작업이 끝났다는 신호와 함께 보고서 출력을 지시하면 미리 준비된 양식에 해당 값을 자동으로 입력하여 출력하고 양식은 파일로 남겨 놓는 것이다. 우리나라 국민들이 받는 건강 검사의 경우도 마찬가지이다. 사람이 직접 입력하는 신상 정보와 검사 정보를 데이터베이스에 저장해 두었다가 미리 준비한 양식에 맞게 출력하는 것이다. 본 ..
영풍 마을을 통과한 82코스는 만복 마을 외곽을 지나 다시 해변으로 나간다. 해변으로는 둑방길이 강진 칠량농공단지까지 이어진다. 산업 단지 구석의 공원을 지나면 생금봉 아랫자락을 도는 해안길을 지나 탐진강 둑방길을 걷는다. 탐진강을 따라 북쪽으로 이동하다가 강진만 갈대밭의 데크길을 지나 구 목리교 입구에서 여정을 마무리한다. 영풍 마을을 지난 길은 바로 이어서 만복 마을로 들어간다. 집주인이 창고 벽면에 쓰신 글이 마음에 와닿는다. "행복을 약속하는 땀을 흘려라. 산이 만복과 건강을 약속한다." 맞는 말이다. 그런데, 집안일이든 밭일이든 무슨 일이든 즐거운 마음으로 땀을 흘리는 것은 축복이다. 일이 아니다. 길은 만복 마을 인근을 지나 해변으로 나간다. 조금 전에 창고 벽에 쓰인 글귀도 있지만 마을 가꾸..
가우도 입구에서 출발하는 남파랑길 82코스는 해안길을 지나 높지 않은 산을 넘는 산행으로 시작한다. 산행 끝자락에 있는 세심정으로 가는 길이다. 세심정 앞에서 국도로 내려가 칠량천을 따라가다가 봉황 마을로 들어간다. 봉황 마을과 이어지는 보련 마을을 지나면 해변으로 나가서 해안 둑방길을 걷다가 영풍 마을에 이른다. 가우도 앞은 마량에서 광주 가는 버스도 멈추는 곳으로 내륙으로는 저두리의 중저 마을이 자리하고 있고 해변으로는 식당과 카페, 편의점을 비롯한 편의 시설들이 즐비하다. 우리도 편의점에서 음료수도 사 먹고, 인근 무인 라면 가게에서 직접 라면을 끓여 먹는 신문물을 경험하기도 했다. 쓰레기가 많이 나오는 것을 제외하면 편리하고 좋은 경험이었다. 바다 건너 가우도에 있는 청자 타워에서는 짚트랙이 내려..
해안길을 걷는 남파랑길은 구곡 마을을 지나서 청자 해안길 도로를 따라 북쪽으로 이동하며 백사어촌체험마을을 지나고 미산 마을을 지나서 23번 국도 청자로를 걷는다. 국도를 걸으면서 고바우공원 전망대를 지나고 하저 마을에서 해변으로 내려가 해안길을 걸어 가우도 입구에서 여정을 마무리한다. 다산 초당에서 마량항까지 강진 바다둘레길이 있는데 1코스가 "오감을 찾아가는 바다둘레길"로 마량항부터 가우도 출렁다리까지이고 2코스는 "산 따라 강 따라 어촌풍류길"로 가우도 출렁다리에서 다산초당까지이다. 바다를 건너가는 코스다. 길은 대구면 구수리를 지나 수동리로 넘어간다. 백사 마을로 가는데 울타리에 처음 보는 특이한 나무들이 심겨 있었다. 잎이 하트 모양인 유칼립투스 웹스테리아나라고 한다. 이건 유칼립투스 블랙잭이란 ..