Development2017.05.04 15:33

새롭게 지급받은 회사 PC 에서 dig 명령을 Client Subnet 정보 없이 사용하고 있던 찰나, 고객님의 확인 요청으로 Client Subnet 정보를 활용한 DNS 조회가 필요해졌습니다. 늘 그랬던 것처럼 bind-9.9.3 버전을 다운로드 받아 패키지에 포함되어 있는 dig 을 추출해 사용하려고 했습니다만 Xcode8 이 설치된 환경에서 발생할 수 있는 컴파일 이슈를 만났습니다.


여기저기 수소문을 해보니 누락된 커맨드 라인 도구가 있고 이로 인해서 많은 make 빌드가 실패하고 있다는 제보가 온천지에 깔려있었습니다. 궁극적인 해결은 애플이 새로운 Xcode 를 배포하면서 누락된 커맨드 라인 도구를 포함시켜 주는 것이겠습니다만 일단 문제 해결이 먼저이니 Quick-Fix 를 적용해 봤습니다. 


문제는 "make" 에서 발동되었습니다. ㅜㅜ (참조 : https://www.gsic.uva.es/~jnisigl/dig-edns-client-subnet.html)



발견된 빌드 실패 메세지에서 몇 가지 단서를 찾아보았습니다. 


gcc -g -O2 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxml2 -I../../lib/isc/include \

-D__APPLE_USE_RFC_3542   -o gen ./gen.c -lpthread  -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib -lxml2 -lz -lpthread -licucore -lm

ld: file not found: /usr/lib/system/libsystem_symptoms.dylib for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)


gcc 를 수행하는 와중에 발생한 /usr/lib/system/libsystem_symptoms.dylib 파일의 누락이 결국 문제라고 판단되었습니다. 구글신께 missing 커맨드와 함께 이 파일의 풀 패스를 넣으니 고생하는 개발자들이 여기저기에서 튀어나왔습니다. 그 중, 용자가 정리해놓은 Quick-Fix 는 tbd 파일에서 존재하지 않는 파일 참조 경로를 없애서 원천적으로 접근 시도를 하지 않도록 하는 것이었습니다. 간단히 아래의 명령으로 레퍼런스 정보를 삭제했습니다.


$ sudo /usr/bin/sed -i.backup -E -e 's@/usr/lib/system/libsystem_symptoms.dylib(, )?@@' $(grep -ril /usr/lib/system/libsystem_symptoms.dylib /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib)


이후 다시 make 를 돌리니 아무런 문제 없이 컴파일을 마치고 Client Subnet 을 지원하는 dig 을 획득할 수 있었습니다. 혹시 유사한 이슈를 겪는 분이 계시다면 "애플 탓이구나~ 명령어를 돌려보자~!"로 대응하시면 좋겠습니다.



저작자 표시 비영리
신고
Posted by 노피디
Development2017.05.02 12:07

이유는 알 수 없습니다만 여러곳에서 지속적으로 사용자 유입이 되고 있는 포스팅이 "JSON 포맷에서 주석을 사용할 수 있을까?" 라는 글입니다. 유입이 많은 이유로 생각되는 것은 많은 분들이 JSON 포맷을 사용하면서 주석 사용에 대한 욕망(?)이 있고, 이에 대한 방법을 찾으려다 검색 유입이 되는 것이라는 생각이 듭니다. 저 역시 글을 쓴 이유가 JSON 포맷에서 주석을 왜 쓸 수 없을까 였기 때문에 결국 같은 갈망을 가지고 검색후 실망-_-이라는 수순을 밟고 있는 안타까운 현실이라 하겠습니다.



요즘 읽고 있는 책 중 하나가 제이펍에서 출간한 "자바스크립트와 Node.js 를 이용한 웹 크롤링 테크닉"(책 내용 자세히 보기 [바로가기]) 이라는 책입니다. 곧 이직을 계획하고 있어서 여유 시간을 알차게 활용하고자 Node.js 와 파이썬(Python), 그리고 인프라스트럭쳐 배포 자동화에 심취해 있는데요, 여튼 이 책을 읽던 중 JSON5 에 대한 정보를 습득하게 되어 간단하게 공유해 보고자 합니다. 



JSON5 (http://json5.org) 는 JSON 이 가지고 있는 몇 가지 단점들을 ECMAScript 표준의 진화에 맞추어 쓸만한 형태로 개선하고자 하는 일종의 제안으로 시작된 프로젝트입니다. 시작된지는 좀 된 과제이지만 여전히 가야할 길을 열심히 걷고 있는 과제이기도 합니다. JSON5 는 JSON 의 규격을 조금 더 완화시키고 유연하게 만들어 다양한 데이터 포맷을 수용하고, 사람들에게도 더 친숙한 (= 주석으로 지저분해지는?) 형태로 만드는 것을 목적으로 하고 있습니다. JSON5 포맷으로 구성한 데이터 포맷의 예를 살펴보면 변화하는 부분을 쉽게 인지할 수 있습니다.



글의 시작에 이야기 했던 주석은 한줄 주석, 혹은 여러 줄로 구분된 주석 형태를 제공하고 있습니다. Key 를 표현할 때 꼭 사용해야 했던 따옴표 역시 제거되어 key 입력에 대한 불편함이 사라졌고, 파싱 에러의 대부분을 차지하고 있는 콤마에 대한 사용도 완화되어 어레이의마지막에 콤마가 들어가도 무방하도록 변경되었습니다. Value 에 멀티라인 텍스트가 들어갈 수 있는 것도 고무적인 부분입니다. 그 외에 Hex 형태의 표현 허용, 소수점 이하 표기법의 자유도 등도 눈에 띄는 부분입니다. Node.js 를 사용하는 경우 npm 을 통해서 json5 모듈을 쉽게 다운로드 받아 사용해 볼 수 있습니다.


$ npm install json5


모듈이 설치되면 Require 문으로 json5 모듈을 불러와야 한다는 점을 제외하면 parse 와 stringify 메소드를 이용해서 기존 JSON 내장 객체처럼 사용할 수 있습니다. 간단한 Node.js 예제코드는 아래와 같습니다.


var JSON5 = require('json5');

var fs = require('fs');

var json5 = fs.readFileSync("data.json5", "utf-8");


var obj = JSON5.parse(json5);


console.log(obj);

console.log(obj.multi_line);

console.log(obj.hex_data);

console.log(obj.items);


당연한 것이겠지만 JSON5 를 이용하여 데이터를 주고 받을 각 주체들은 JSON5 를 지원할 수 있도록 준비되어야 합니다. Node.js 이외의 다른 언어에서도 미리 준비된 패키지가 있을 것으로 생각됩니다만, 규격의 변경에 따른 사용 가능 여부를 확실히 점검하고 넘어가는 것이 좋을 것 같습니다. 주석을 이용할 수 있다는 것은 분명 의미있는 변화이지만 이로 인해 증가할 수 있는 데이터 파일의 크기, 새로운 처리 모듈의 사용 등은 고민을 해봐야 할 부분입니다.






저작자 표시 비영리
신고
Posted by 노피디

티스토리 툴바