Modbus란? - 심화편
·
툴, 프레임워크, 기술
지난 글에서는 Modbus란 무엇인가에 대해 간단히 알아봤다. 이번 글에서는 Modbus의 상세한 명세에 대해서 설명하고자 한다.통신 과정Modbus의 통신은 요청-응답 형식으로 이루어진다.요청 처리요청은 다음과 같은 과정을 거쳐 처리된다.정상통신이 원활하게 이루어지고 요청을 처리하는 데에 이상이 없으면 요청과 같은 function code와 응답 데이터를 반환한다.오류Modbus의 오류 상황은 크게 통신 오류와 요청 처리 오류로 분류할 수 있다. 통신 오류의 경우 통신 계층에서 처리하며, 이 경우 Modbus에서는 응답을 보내지 않으며 클라이언트에서는 타임아웃을 통해 통신에 오류가 발생했음을 감지할 수 있다.반면 요청 처리에 이상이 있다면 function code의 최상위 비트를 1로 바꾸고 예외 코드..
Modbus란? - 기본편
·
툴, 프레임워크, 기술
센서, 모터 등 컴퓨터가 아닌 기기의 상태를 보고 제어하기 위한 프로토콜에는 여러가지가 있다. 하지만 이중 가장 많이 쓰이는 프로토콜로는 Modbus를 꼽을 수 있다. 이번에는 이 사실상 표준(de facto standard) 프로토콜인 Modbus에 대해서 설명하고자 한다.정의Modbus는 OSI 7계층 중 응용 계층에서 사용되는 프로토콜로 여러 종류의 버스 혹은 네트워크에 있는 장치들 간 서버-클라이언트 통신을 할 때 쓰이는 프로토콜이다. 여기서 재밌는 점은 Modbus에서는 장치가 서버 역할이라는 점이다. 즉 장치를 제어하는 서버를 개발한다고 해도 Modbus에서는 서버가 클라이언트이고 연결된 장치가 서버이다. 펌웨어(혹은 PLC) 개발자와 소통할 때 헷갈리지 않도록 주의해야 한다.모델Modbus에..
Go로 구현한 Coding Challenge - wc
·
프로그래밍 언어
wcwc는 표준 입력 혹은 파일 내 데이터의 줄 수, 단어 수, 바이트 수를 보여주는 커맨드라인 툴이다. 이번 챌린지의 목표는 이 wc를 구현하는 것이다. 필자의 구현 결과물은 Github에 올려놓았다.들어가기에 앞서사실 이번 글은 이전 글에서 보였던 Step대로 차근차근 구현해가는 방식이 아니다. 사실 wc를 cat보다 먼저 구현했는데, 그 당시에는 맛보기로 했던 지라 Step을 신경쓰지 않고 구현(및 커밋)했다. 이러한 이유로 이번 글은 구현 과정 대신 각 코드 부분들에 대한 해석 위주로 풀어갈 생각이다.gwc.gogwc.go는 메인 함수 파트로 매개변수 및 플래그를 파싱하여 입력 방식 및 단위를 정하고 결과를 얻어내는 함수이다.//gwc.gopackage mainimport ( "flag" ..
Go로 구현한 Coding Challange - cat
·
프로그래밍 언어
Coding Challenge란?Coding Challenge란 기존 툴이나 프로그램을 본인의 방식대로 구현하는 챌린지이다.클론 코딩과의 차이점일반적인 클론 코딩은 웹페이지가 주요 타겟인 반면 이 챌린지는 개발 툴, 프로토콜, 혹은 간단한 GUI 프로그램이 주요 타겟이다. 클론 코딩에 비해 프로그래밍 언어나 기술적인 제약이 없기 때문에 새로운 언어를 익히거나 기존에 쓰던 언어로 구현 능력을 기르기에 적합하다. 또한 단계별 구현 목표가 명시되어 있기 때문에 클론 코딩에 비해 더 정량적인 평가가 가능하다. 더 자세한 소개는 해당 사이트에서 살펴볼 수 있다.Coding Challenge 과제 순서물론 위 사이트의 챌린지 목록 순서대로 해도 상관 없다. 하지만 목록을 쭉 살펴보면 느끼겠지만 난이도가 뒤죽박죽 섞..
글또 10기 다짐
·
회고
약 2년 9개월간의 긴 잠수를 마치고 글또 10기와 함께 블로그에 복귀하게 되었다.근황(이라 쓰는 변명)블로그 글을 못(안)쓰게 된 이유는 역시 취업 때문이었다. 솔직히 말하자면 취업에 도움이 될 것 같아서 블로그를 시작한 것은 맞다. 다만 취업 후에도 운영을 계속해서 go언어의 매력을 계속해서 알리고 싶었다. 하지만 생각 이상으로 회사에서 일한다는 것은 많은 에너지를 소모했고, 퇴근 후 따로 시간을 내서 공부하고 블로그 글을 쓸 여력이 없었다.읽으면서 변명이라고 생각한다면 맞다. 사실 퇴근 후 시간이 아주 없었던 것도 아니었고 주말은 평범하게 쉬었다. 위의 변명은 사족일 뿐이다. 다만 기존 잠수에 대해 입을 싹 닫고 아무 일도 없었던 것처럼 넘어가면 다짐이 약해질 것 같았다. 적어도 글또 기간 중에 이..
2021년을 돌아보며
·
회고
2020년과 다르길 바랬던 2021년은 결국 비슷하게 흘러갔다.하지만 필자에게는 어느 정도 변화가 있던 해였다. 지난 글처럼 2021년을 뒤돌아보고 2022년에는 어떻게 할 것인지에 대해 적어보고자 한다. 회고 공부 개발 내적으로는 Go언어 실력을 갈고 닦았다. 여러 책을 보며 Go언어 코드를 유연하게 쓰는 방법, 테스트 주도 개발을 실전에서 적용하는 방법, API를 직접 만드는 방법 등을 공부했다. 이후에 다시 언급하겠지만 새로운 회사를 들어가게 되어서 프론트엔드 공부를 12월부터 시작했다. React Native를 공부 중인데 아직 자바스크립트를 써본 적이 없어서 자바스크립트 공부와 병행해서 하고 있다. PostgreSQL도 공부해야 하는데 우선순위가 밀려서 기본적인 부분까지 밖에 진행하지 못했다. ..
Go언어에서의 제네릭 미리보기
·
프로그래밍 언어
이번 Gophercon 2021의 첫번째 세션은 내년 2월에 예정된 메이저 업데이트(v1.18)에 추가될 제네릭에 대한 소개였다. 아마 많은 Gopher(Go언어 이용자)들이 기대한 내용이 아닐까 한다. 아래 영상의 28:40 부근부터 제네릭에 대한 설명이 나온다. Gophercon 2021 Day 1 이번 글에서는 영상에서 발표된 제네릭 관련 내용을 간략하게 정리하고자 한다. 문법 이번 제네릭을 지원하면서 이를 위한 새로운 문법이 추가되었다. 제네릭에 이용할 타입 파라미터 타입들을 묶는 인터페이스 제네릭에서의 타입 추론 각각의 문법에 대해서 알아보자. 타입 파라미터 타입 파라미터는 아래와 같은 형식으로 되어 있다. [식별자 제약, 식별자 제약] 식별자는 함수 혹은 구조체 내에 쓸 타입의 식별자를 의미한..
[서평] 밑바닥부터 만드는 인터프리터 in Go
·
서평
정보 제목 : 밑바닥부터 만드는 인터프리터 in Go 저자 : 토르슈텐 발 (역자 : 박재석) 출판사 : 인사이트 요약 이 책은 저자가 설계한 컴퓨터 언어의 인터프리터를 Go언어로 만드는 일련의 과정을 보여주는 책이다. 인터프리터(혹은 프로그래밍 언어 제작)라는 주제는, 꽤나 매니악한 주제임은 틀림없다. 시중에 해당 주제에 관한 글이나 책을 검색해도 별로 나오지 않을 뿐더러 나오더라도 수박 겉핥기식 아니면 지나치게 이론적이다. 이 책의 저자는 이런 양분화된 난이도의 인터프리터 관련 서적에서 중간에 위치하는, 이론과 용이성을 절충한 책을 내고 싶었다고 머릿말에서 밝혔다. 그리고 이러한 생각은 책 전반에 걸쳐 녹아 있다고 확실히 느껴졌다. 어려운 용어는 되도록 줄이되 어쩔 수 없는 경우 최대한 풀어서 설명하..