728x90

새롭게 지급받은 회사 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 을 획득할 수 있었습니다. 혹시 유사한 이슈를 겪는 분이 계시다면 "애플 탓이구나~ 명령어를 돌려보자~!"로 대응하시면 좋겠습니다.



728x90
728x90

이유는 알 수 없습니다만 여러곳에서 지속적으로 사용자 유입이 되고 있는 포스팅이 "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 이외의 다른 언어에서도 미리 준비된 패키지가 있을 것으로 생각됩니다만, 규격의 변경에 따른 사용 가능 여부를 확실히 점검하고 넘어가는 것이 좋을 것 같습니다. 주석을 이용할 수 있다는 것은 분명 의미있는 변화이지만 이로 인해 증가할 수 있는 데이터 파일의 크기, 새로운 처리 모듈의 사용 등은 고민을 해봐야 할 부분입니다.


/* 추천도서 */ API 설계 실무에 바로 사용하는 JSON [자세히 살펴보기]






728x90
728x90

세상에는 굉장히 다양한 이미지 포맷이 존재합니다. 압축 포맷의 대명사인 JPG 부터 비트맵으로 이미지를 표현하는 BMP, 투명한 이미지가 필요할 때 많이 찾게되는 PNG 와 간단한 애니메이션 용도로 널리 사용되는 GIF 등이 대표적입니다. 사람들은 각자의 목적에 따라 이런 이미지들을 활용하게 되는데요, 서로 다른 여러가지 포맷을 바꾸어 가면서 사용해야 하는 경우가 간혹 생기곤 합니다. 


예를 들어 프론트엔드 디자이너라고 하면 PNG 포맷을 많이 사용하겠지만 책을 한권 같이 쓰고 있다면 TIFF 포맷이 필요할 수도 있습니다. 다양한 이미지 관련 프로그램이나 플러그인으로 포맷을 변경하는 것도 가능하지만 왠지 상황에 맞게 이미지를 캡쳐 할 때부터 PNG, TIFF 등을 정할 수 있으면 좋을 것 같습니다. OS X 운영체제에는 간단한 터미널 명령으로 기본 내장 캡쳐 옵션으로 이미지를 만들때 사용하는 포맷을 변경할 수 있습니다.


[ 캡쳐 이미지 포맷 변경하기 ]

$ defaults write com.apple.screencapture type tiff && killall SystemUIServer


위의 명령을 이용하면 지정된 이미지 포맷으로 쉽게 캡쳐 파일의 형식을 지정할 수 있습니다. && 로 연결된 또 다른 명령은 해당 변경사항이 운영체제를 재부팅 하지 않고 적용될 수 있도록 하기 위한 명령입니다. 간단한 명령이지만 이걸 매번 외워서 치거나 어디에 저장해 두었다가 입력하는 것은 왠지 불합리해 보입니다. 개인적으로는 블로그와 회사 공식 블로그에 글을 올릴때 PNG 를 사용하고 있고 저술 작업을 위해 TIFF 를 쓰고 있어서 아래와 같이 쉘 프로파일을 지정해 보았습니다.


[ .bash_profile 파일에 Alias 를 지정 ]

alias png="defaults write com.apple.screencapture type png && killall SystemUIServer"

alias tiff="defaults write com.apple.screencapture type tiff && killall SystemUIServer"


이렇게 지정해두면 터미널이 실행 될때 alias 가 지정되고 간단히 커맨드 프롬프트에서 png, tiff 를 입력하는 것 만으로 쉽게 캡쳐 이미지 포맷을 변경할 수 있습니다. 캡쳐 이미지 포맷을 자주 변경해야 하는 분들이 계시다면 유용하게 활용하실 수 있겠네요!



728x90
728x90

Sublime Text 에디터는 패키지(Package)를 이용하여 기능을 지속적으로 확장, 보완할 수 있습니다.

워낙 다양한 패키지들이 공개되어 있어 어떤 것을 사용하는게 좋다는 이야기를 드리기 조심스럽지만

자주 행하게 되는 반복 작업에 지친 분들이 있을까봐 좋은 패키지 하나를 소개합니다.


업무 특성상 HTML, CSS, Javascript 그리고 JSON 파일을 많이 다루고 있습니다.

여느 웹 개발자나 서버단의 개발자 분들 역시 그런 경우가 많을 것 같습니다.

그동안은 웹 기반으로 만들어져 있는 들여쓰기 정렬툴, 소위 Pretty Print 도구를 사용했습니다만

오프라인 환경에서 작업할 때는 인터넷 엑세스가 제한되어 불편함이 있었습니다.



오늘 발견한 HTMLPrettyfy 패키치는 node.js 가 설치되어 있는 환경에서 사용 가능한 패키지로

서브라임 텍스트2와 3에서 모두 활용할 수 있는 코드 포맷터입니다.

node.js 가 설치되어 있지 않다면 당연히 사용이 어렵다는 정도가 제약사항이라 하겠습니다.


소스코드가 깃헙에 공개되어 있기 때문에 필요에 따라 SQL 이나 다른 구조화된 포맷이 필요한 텍스트에 대해서

기능을 개발하고 제안하여 참여 가능하다는 것도 기억해 두시기 바랍니다. (누가 SQL 좀... 굽신...)




설치를 위해서는 먼저 서브라임 텍스트의 패키지 매니저를 실행해야 합니다.

맥 환경인 경우 Command + Shift + P 를 누르면 되고 윈도인 경우 Ctrl + Shift + P 를 누르면 됩니다.

까만 에디터 위로 조그만 팝업이 뜨면 "Package Control Install Package"를 입력하여 패키지 설치를 시작하겠습니다.



팝업 창이 리프레시되면 위 이미지처럼 "HTML-CSS-JS Prettify"를 검색하시어 선택합니다.

이미 설치되어 있는 경우 결과창이 나오지 않습니다만 설치가 되어 있지 않은 경우

검색 결과 화면이 나오고 엔터를 누르면 서브라임 텍스트 에디터 하단에 설치 진행 현황이 업데이트 됩니다. 


BeforeAfter



이제 정렬하고자 하는 문서가 활성화된 상태에서 Command + Shift + H (윈도에서는 Ctrl + Shift + H) 를 누르면

예쁘게 들여쓰기와 줄바꿈이 된 문서로 탈바꿈 하게 됩니다. 





728x90

+ Recent posts