2020년 하반기에 새로 참여하게 된 프로젝트에서 잠깐이지만 아주 오랜만에 자바를 사용했다. 학부 시절 전반에 걸쳐 자바를 메인 언어로 사용했었고 입사할 때도 자바를 주력으로 사용하게 될 줄 알았는데 엉뚱한 ColdFusion 서버를 다루게 됐지. 그게 내 경력 전체를 완전 망쳐버릴 줄은 그때는 몰랐다. 먹고 사는 데만 급급해서 뭐든 해야한다고 생각했으니까. 언어와 개발의 기본은 어떤 기술을 쓰든 비슷하지만 그 경력이 남은 인생의 난이도를 크게 좌지우지 할줄은 몰랐던 거다. 이 이야기를 하자면 끝도 없다. 너무나도 시간이 지나버렸고 돌이킬 수도 없다. 언젠가 여유가 생긴다면 천천히 이야기로 풀어내볼 수도 있겠다.

이번에 내가 경험한 자바 코딩에서는 예전에 하던 그것과는 크게 다른 부분이 있는데 바이트 단위의 데이터 타입을 다뤄야 한다는 거다. 에코넷(Echonet)이라는 일본의 IoT 업계에서 쓰이는 스마트 그리드 시스템에서는 에코넷라이트(Echonet-Lite)라는 프로토콜로 기기간의 통신을 한다. 에코넷라이트는 데이터를 정해진 규칙의 바이트 배열로 만들어 udp 소켓을 통해 주고받는 프로토콜이다. (프로토콜에 대한 자세한 설명은 여기서 하기에 적절하지 않은 것 같다. 이야기가 다른 데로 새버린다.)

암튼, 이더넷을 통해서 udp통신을 하면 되는 건데, 주어진 요구사항의 가장 큰 부분은 자바로 만들어야 한다는 거다. 왜 굳이 자바인가 했더니 고객이 예전부터 구축해오던 스마트 그리드 시스템의 일부분이 자바로 만들어져 있기 때문이라고 한다. 파이썬이나 자바스크립트라면 내게 더 편했겠지만 수년만에 다루는 자바는 메인 컴파일 하는 것조차 고통으로 다가왔다. 게다가 익숙치 않은 바이트 단위 데이터를 주로 다뤄야 했으니 초반에 진땀 흘린 게 당연하다.

밑은 에코넷 컨트롤러와 에어콘 사이에서 데이터를 주고 받는 전문의 예인데 16진수로 표현해서 읽기 쉽게 만든 버전이다. 실제 저 데이터는 바이트 배열로 변환해서 오고 간다.

リクエスト:コントローラ(0x05FF01) -> エアコン(0x013001)
1081 0001 05FF01 013001 62  01  80  00
<--> <--> <----> <----> <-> <-> <-> <->
EHD  TID  SEOJ   DEOJ   ESV OPC EPC PDC
 
レスポンス:エアコン(0x013001) -> コントローラ(0x05FF01)
1081 0001 013001 05FF01 72  01  80  01  31
<--> <--> <----> <----> <-> <-> <-> <-> <->
EHD  TID  SEOJ   DEOJ   ESV OPC EPC PDC EDT

get이니 set이니 set_res니 프로토콜을 이해하는 데만 굉장히 많은 시간을 썼지만 더 괴로웠던 것은 정수나 텍스트 데이터를 바이트 배열로 변환하고 그 반대 변환도 자유자재로 해야만 하는 것이다. 아무래도 IoT같은 외부 기기와 통신 해야하는 프로젝트에서는 이런 일이 자연스럽겠지만 나에겐 두려움으로 다가왔다. 무서워할 필요가 전혀 없는데 순전히 내 버릇이다. 잘 모르는 영역이나 특히 수학과 관련 있는 잘 모르는 지식에 대해서는 무한한 두려움을 가지는 아주 나쁜 버릇이 있다. 데이터 변환이야 언어 레벨에서 해결 가능한 건데 단순히 경험 부족에서 오는 막연함이다.

무사히 저 프로젝트를 마친 지금이야 그땐 그랬지 하면서 추억으로 삼을 뿐이다. 시간이 흐르고 나서 그때 했던 고민들과 해결 방법을 떠올리자니 깜깜하다. 앞으로 기술적인 고민들을 하나씩 적어 나가기로 해서 이런 글을 쓰기 시작하는 건데 역시 디테일이 없어도 너무 없다. 다음 글에선 지금 진행중인 (위에서 말한 에코넷 프로젝트의 다음 일) 코딩에서 겪고 있는 데이터 변환 이야기를 적어야겠다.