Development2016.03.29 16:04

2017.5.4 추가) 혹시 JSON 에서 주석을 어떻게든 써야겠다고 생각되시면 JSON5 규격에 대해서 살펴보시기 바랍니다 [바로가기]


고난이도의 알고리즘을 이용하여 프로그램을 만들다가도 가끔 멍~한 질문에 당황할 때가 있습니다. API 의 사용이 대중화되고 그 중요성이 커지면서 API 좀 다루어 보지 않은 엔지니어를 찾아보기 힘든게 요즈음입니다. API 는 초기에 SOAP 과 같은 오버헤드가 큰 방식들이 사용되다가 요즘은 JSON 형태의 경량화된 포맷이 사실상의 표준 처럼 사용되고 있습니다. 아, 물론 단순한 스트링과 델리미터로 값을 전달하는 경우도 여전히 있습니다만 가독성이나 주고받는 자료의 가독성, 관리 용이성 등의 관점에서 별로 좋은 접근은 아닙니다.


JSON 이 대중화되어 사용되다 보니 API 를 통해 리턴 받은 데이터이든 API 를 향해 던지는 데이터이든 습관적으로 JSON 포맷을 머릿속에서 이해하고 사용하고 있습니다. 그런데 오늘 문득... 그런 생각이 들었습니다. JSON 포맷에는 주석 혹은 코멘트(Comment)를 위한 표준이 정의되어 있는 걸까요? 만약 정의되어 있다면 어떤 형태로 사용해야 하는 걸까요? 이런 고민과 논란이 2012년 즈음에 있었던 것 같습니다. JSON 표준의 창시자로 알려진 더글라스 크록포드(Douglas Crockford)가 구글 플러스에 올렸던 업데이트를 인용해봤습니다.




글씨가 좀 작아서 잘 안보이시는 분들을 위해 본문만 다시 한번 인용해 봤습니다. 절대 블로그 포스팅 분량을 늘리기 위한 행동을 아닙니.......


I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't. 


Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.


결론적으로 JSON 에는 주석 혹은 코멘트가 들어가지 않는것이 맞다고 창시자는 이야기하고 있습니다. 상호 호환성과 같은 시스템 간의 연동, 이종 시스템들간의 이해를 방해하지 않게 하겠다는 것이 의도인데요, 꼭 필요한 경우라면 코멘트를 사용하되 최종적으로 JSON 파서들은 코멘트가 제거된 데이터를 핸들링 할 수 있게 하는 것을 이야기하고 있습니다. 실제로 시장에 유통되고 있는 일부 JSON 파서 혹은 구현체에서는 JSON 코멘트를 허용하되 더글라스가 언급한 것처럼 최종적으로는 제거하는 케이스들도 있는 것으로 보입니다.


JSON 을 사용한다면, 조금은 아쉽지만, 주석 / 코멘트를 사용하지 않는 것이 미덕이겠습니다. 꼭 필요하면 내부적으로만 사용하시되 외부와 연동하는 단계에서는 꼭~ 제거하는 센스가 필요하겠네요! 




저작자 표시 비영리
신고
Posted by 노피디
Development2013.02.18 06:04
HTML 기반의 앱이나 하이브리드 앱을 개발하는 동안 공유 스토리지에 대한 요구사항은 상당히 많다고 알려져 있다. HTML5 가 도입되면서 로컬에서 데이터를 샌드박스 형태의 저장공간에 저장할 수 있는 방법이 생겼지만 다양한 장치에서 데이터를 공유해 사용하기에는 별도로 개발해야 하는 코드의 양이 상당히 많을 수 밖에 없었다.

구글의 오픈소스 기반 브라우저 프로젝트이자 구글 크롬의 모태이기도 한 크로미움(Chromuim) 프로젝트에서 최근 이런 니즈를 반영한 듯한 API 를 공개했다. HTML5 로 대동단결하고 있는 상황에서 특정한 플랫폼에서만 사용 가능한 API 를 이야기 한다는 것이 조금 엇박자인 듯 하지만 필요에 따라 이런 API 들이 HTML5 로 통합될 가능성도 있기 때문에 알아둬서 나쁠 것은 없어보인다.


SyncFileSystem API 는 구글 드라이브를 클라우드 기반의 스토리지로 활용하면서 사용자들이 다양한 기기에서 데이터를 동기화 할 수 있는 방법을 제공해 주는 형태이다. 주요 메서드는 4가지 정도로 정의 되어 있는데, 간단히 정리해보면 아래와 같다.

1) 동기화를 위한 파일 시스템 객체 얻기 (requestFileSystem)
2) 클라우드 스토리지 사용 현황 얻기 (getUsageAndQuota)
3) 클라우드 스토리지에 저장된 파일 상태 얻기 (getFIleStatus)
4) 클라우드 스토리지에 저장된 파일 변경 이벤트 얻기 (onFileStatusChanged)

무척 간단하고 사용하기 어렵지 않은 API 이다. 크로미움 환경 전용이라는 현재의 한계가 있긴 하지만 W3C 에 제안해 놓은 파일 API 상의 디렉토리와 파일 부분의 연장선상에 있다고 하니 HTML5 에서 채택될 수 있기를 기대해 볼 수 있을 것 같다. (자세히 살펴보기 : http://www.w3.org/TR/file-system-api/

- NoPD - 
저작자 표시
신고
Posted by 노피디
사용자 삽입 이미지
개인적인 실험 프로젝트로 me2day 관련 매쉬업 서비스를 개발하다가 기존에 공개된 C# 버전의 닷넷 미투데이 OpenAPI 라이브러리를 업데이트 했습니다. 큰 변경을 가한 것은 아니지만, 기존에 공개된 라이브러리에 빠져있는 메소드와 필드를 추가해서 보다 다양한 활용이 가능하도록 변경해 봤습니다.

me2api 스프링노트에 원저작자가 기술되어 있지 않아서 일단 허락을 받지 않고 배포를 합니다만, 모든 코드의 저작권은 미투데이(http://www.me2day.net)가 가지고 있으며 문제가 될 경우 배포를 중단하도록 하겠습니다. 소스코드는 VIsual Studio 2008 로 컴파일 되어 있어 코드를 수정하실 분들은 사용하시는 VS 버전에 맞추셔야 합니다.

그 외 일반적으로 사용하실 분들은 첨부파일의 Release 폴더에서 DLL 을 참고하셔서 사용하시면 됩니다. 표준 me2day API 의 룰을 따르므로 자세한 메소드별 사용법은 첨부파일의 프로젝트에 같이 포함된 샘플을 참고하시기 바립니다.

This is redistribution of OpenAPI library for micro blogging service named `me2DAY` which is familiar in South Korea. Attached project file has been built under Visual Studio 2008 environment. So if you want to use previous version of Visual Studio IDE, you should migrate it.

All rights are reserved and me2DAY.net has authorities for this library. If this distribution has any problem, I will stop to distribute it. To get API definition document, kindly go to the me2API SpringNote page linked below.

Thanks.

* me2API 스프링노트 : http://codian.springnote.com
* me2day OpenAPI 닷넷 라이브러리 :

- NoPD -
신고
Posted by 노피디

티스토리 툴바