Blog

첫째 날 제일 재미있게 들은 세션은 Kris Zyp의 "Advanced JSON" 이었습니다.

사용자 삽입 이미지
(이 양반이 바로 Kris Zyp. 자꾸 이리저리 서성이는 바람에 초점이 대략...)

JSON은 JavaScript Object Notation의 약자로, XML과 같은 데이터 교환 포맷입니다. 재미있는 점은 JSON이 전혀 새로운 포맷이 아니라 자바스크립트 언어의 작은 부분집합이라는 사실입니다.

예를 들어 다음 자바스크립트 코드들에서 변수와 대입연산자를 제거하면 그대로 적법한(valid) JSON 포맷이 되는데, 어떤 면에서는 YAML과 비슷해 보이기도 합니다.

    // 일반적인 배열
    a = [1, 2, 3]

    // 일반적인 객체
    b = {“first”: “Alan”, “last”: “Kang”}

    // 복합
    c = {“name”: {“first”: “Alan”, “last”: “Kang”}, “age”: 29, “favs”:[“game”, “music”]}

JSON에 대한 자세한 설명은 이곳, RFC 문서는 이곳을 참고하시기 바랍니다.

"Advanced JSON" 세션에서는 JSON 자체에 대한 기본적인 설명 보다는 "XML과의 비교", "다양한 JSON 응용들"을 주로 다루었는데요, 특히 후반부의 JSON 응용들이 흥미로웠습니다.

예를 들면 XSLT의 JSON 버전이라고 볼 수 있는 JSONT는 JSON 객체에 Transformation Rules를 적용하여 결과물을 만들어내는데, 아래와 같이 데이터와 규칙이 주어지면:

    data = ["red", "green", "blue"]
    rule = ["self": "<ul>\n{$}</ul>", "self[*]": "  <li>{$}</li>\n"]

다음 결과물을 얻게 됩니다:

    <ul>
      <li>red</li>
      <li>green</li>
      <li>blue</li>
    </ul>

재미있는 아이디어 입니다. ^^

다음으로, JSONR(Regular JSON)은 클라이언트 측 혹은 서버 측에서 Form Validation을 수행하거나, 데이터로부터 HTML 폼을 자동으로 생성하는 등의 용도로 쓰이는데, 이곳에서 JSONR을 이용한 폼 생성 데모를 보시면 쉽게 이해가 될 것 같습니다.

JSONP(JSON with Padding)는 "Dynamic Script Tags" 혹은 "On Demend Javascript"라고 불리는 기술을 이용하여 다른 웹사이트로 HTTP 요청을 보내고 자바스크립트 콜백 함수를 통해 실행결과를 통보 받는 방식으로 수행되는 JSON 기반 RPC 규약입니다. 이렇게 하면 브라우저의 보안 정책인 “Same Origin Policy” 제약을 넘어서서 원격 서버와의 통신이 가능해지는데, 야후의 일부 API들, 그리고 최근 개선된 Google Calendar API 등이 이미 이러한 방식을 사용하고 있습니다.

문제는 Dynamic Script Tags 방식은 HTTP GET으로만 요청을 보낼 수 있기 때문에 서버로 보낼 문자 수에 제한이 있다는 점입니다. 이 문제는 (조금 지저분하긴 하지만) 큰 데이터를 여러 조각으로 나누어(chunking) HTTP 요청을 여러 번 보내는 방식으로 해결할 수 있습니다. Kris Zyp의 세션과 시간이 겹치는 바람에 직접 듣지는 못했지만 "Improve Existing AJAX Apps with Dynamic Script Tags"라는 제목의 세션에서 Geoff Hendrey라는 사람이 이 방식에 대해 자세히 다루었던 것 같습니다.

JSONP와 관련하여 재미있는 점 한 가지는 JSON을 최초로 제안했으며 현재 야후에서 근무하고 있는 Douglas Crockford가 JSONP를 좋지 않게 본다는 사실인데(그의 말을 직접 인용하자면 "JSONP is a bad thing"이라고 합니다), 이에 대해서는 다음 포스트에 쓰도록 하겠습니다.

마지막으로 소개할 JSON 응용은 JSONT, JSONR, JSONP와 달리 Kris Zyp이 직접 고안한 JSPON(JavaScript Persistent Object Notation, 제이에스-폰이라고 발음하더군요)입니다. 간단히 요약하자면 JSPON은 ID를 통한 객체 래퍼런싱, 지연된 로딩(lazy loading) 등을 지원할 수 있도록 기존 JSON에 몇 가지 컨벤션을 추가한 JSON 객체 직렬화 규약입니다. 그가 직접구현한 JSPON Browser를 이용하면 JSPON 규약을 이용하여 서로 다른 사이트들에 분산되어 있는 JSON 객체들을 트리 형식으로 브라우징 하거나, 수정할 수 있습니다:
사용자 삽입 이미지
(JSPON Browser)

Kris Zyp은 JSPON 서버인 Jsponic(역시 직접 개발)을 이용하여 일종의 CMS를 개발하기도 하였는데, JSPON 공식 홈페이지가 이 CMS를 이용하여 관리되고 있습니다. 따라서, 해당 사이트에서 소스보기를 해 보시면 어떠한 본문 텍스트도 나오지 않는 것을 확인할 수 있는데, 접근성이나 SEO 측면에서 볼 때 좋은 방법은 아닌 것 같습니다(noscript 태그에 적절한 링크를 넣어서 구글에 인덱싱되어있기는 합니다만). 단점은 단점이고, 아무튼 훌륭하지 않습니까? ^^; 하지만 불행하게도 구글 그룹스의 맴버가 단 한 명 뿐이라는 안타까운 사실.

계속 두고 보면 뭔가 하나 일을 낼 사람이라는 느낌이 옵니다. 다음 날 Douglas Crockford의 JSON BoF에서도 Kriz Zyp을 만날 수 있었는데, 그 이야기는 다음 포스트에 쓰도록 하겠습니다.

--강규영

Trackback

트랙백 주소 :: http://blog.openmaru.com/trackback/170

Comment