JSON
JSON (JavaScript Object Notation). '제이슨'이라고 읽는다. JavaScript의 아들(Son)
데이터 교환을 위한 표준 형식 중 하나로, XML의 경량화된 버전으로 여기는 사람들이 많다. 그런데 이름을 보면 알겠지만 원래는 자바스크립트의 객체를 표현하기 위한 형식이었다.[1] 즉 객체 직렬화를 위해 사용하던 것인데, 간결하면서 사람이 알아보기 쉬운 형식으로 데이터를 저장할 수 있다는 장점 때문에 자바스크립트를 넘어서 소프트웨어 전반에 널리 쓰이게 되었다. 데이터 교환을 위한 표준 형식으로 XML이 열심히 푸시되었지만 너무 크고 아름답다는 게 늘 문제였다. 아무리 작은 양의 데이터를 담고 있다고 해도 XML이라는 형식을 갖추려면 기본적으로 들어가는 요소의 크기가 배보다 배꼽이 큰 경우가 비일비재하다.
<?xml version='1.0' encoding='utf-8' ?>
<website>
<name>내위키</name>
<url>http://newiki.net</url>
</website>
이건 XML 형식이고,
{
"person": {
"name": "내위키",
"url": "http://newiki.net"
}
}
이건 데이터를 JSON 형식으로 표현한 것이다. 딱 봐도 JSON이 훨씬 전체 데이터 양이 적다. 기계가 읽을 때에에도 XML과 비교했을 때 파싱하기 쉽고, 사람이 읽어도 데이터의 의미를 파악하기가 괜찮다. 오히려 장황해 보이는 XML보다 더 간결해서 알아보기 쉽다.
자잘한 데이터를 좀 더 가볍고 빠르게 교환하면서도 사람도 기계도 쉽게 읽고 쓸 수 있는 형식으로 각광을 받은 게 JSON이다. 웹에서 Ajax 개념이 발달하면서 백그라운드에서 계속해서 데이터가 왔다갔다해야 하는데, 이러한 데이터가 가볍고 작아야 그만큼 웹페이지의 반응 속도가 빠를 것이다. 그 결과 자바스크립트의 객체 직렬화 형식이었던 JSON의 인기가 치솟으면서 이제는 자바스크립트를 넘어서 데이터 교환에서 XML보다도 오히려 더 널리 쓰이는 형식이 되었다.[2] 과거에는 한 번에 많은 데이터를 받아오는 것이 보통이라, XML이 가지고 있는 무거움은 전체 데이터 양에 비해서는 큰 문제가 안 되었다. 오히려 DTD를 사용해서 XML 자체에서 데이터의 무결성을 어느 정도 검증해 주기도 하고, XSLT를 통해서 XML 형식을 변환할 수도 있는 유연성이 더 도움이 되었다. 하지만 Ajax가 인기를 끌면서 동적 웹 페이지의 백그라운드에서 자잘한 데이터가 자주 왔다갔다하는 비중이 높아지다 보니, XML의 무거움이 더더욱 문제점으로 부각되고 그 대안으로 JSON이 더더욱 인기를 끌게 되었다. 또한 눈으로 보기에도 JSON이 좀 더 직관적이고 간결해서 알아보기 쉽다. 데이터베이스의 NoSQL도 많은 솔루션들이 JSON으로 데이터를 표현하고 있다.
JSON을 XML을 경량화한 것으로 여기는 시각이 많지만, 그렇다고 XML로 표현할 수 있는 것을 모두 JSON으로 표현할 수 있는 것은 아니다. 예를 들어, JSON에는 '속성'의 개념이 없다. 즉, XML로는 <area width="100" height="100">우리집</area>
이렇게 표현할 수 있지만 JSON으로는 똑같이는 못 한다. 이러한 데이터를 표현하려면,
{
"area": {
"width": 100,
"height": 100,
"name": "우리집"
}
}
아니면
{
"area": {
"properties": {
"width": 100,
"height": 100,
},
"name": "우리집"
}
}
이런 식으로 표현할 수밖에 없다.
JSON이 용량도 적고 간편해서 널리 쓰이고 있지만 XML과 비교해서 단점도 있다. 일단 XML은 DTD를 사용하여 데이터 구조의 규칙을 엄격하게 정의할 수 있는데[3], JSON은 이런 개념이 없기 때문에 구조에 문제가 있는지 검증하는 작업을 프로그램을 통해서 해야 한다. 또한 XSLT와 같은 방법으로 어떤 형식의 XML을 다른 형식으로 바꾸는 것이 가능하지만 JSON은 이 역시 프로그램을 통해서 해야 한다. 즉, XML은 문서를 통한 선언적인 방법으로 문서의 무결성이나 유연성을 구현할 수 있는 반면 JSON은 이런 부분이 없고 프로그램으로 다 해결해야 한다. 애초부터 JSON은 XML의 대체 개념이 아니기 때문에 단순히 XML과 기능을 일대일 비교하는 게 무의미하긴 하지만.
각주
- ↑ 자바스크립트의 객체는 단순히 키-값의 쌍으로 이루어진 맵(map) 유형 데이터인데, 자바스크립트의 함수는 일급 객체이기 때문에 '값'으로도 쓰일 수 있어서 객체의 구실을 할 수 있다. 객체를 정의하고 사용하는 방식은 주류 객체지향 언어와는 약간 차이가 있다.
- ↑ Ajax의 시작은 원래 마이크로소프트가 인터넷 익스플로러 5부터 자사의 자바스크립트 라이브러리에 집어넣었던 IXMLHTTPRequest 인터페이스였다. 이게 XMLHttpRequest 클래스로 발전하고, 파이어폭스가 XMLHTTPRequest 클래스를 집어넣으면서 다른 웹 브라우저들도 하나 둘 이 클래스를 추가했다. 즉 처음에는 XML로 데이터를 받기 위한 인터페이스였지만 JSON이 그 자리를 차지했다.
- ↑ XML 문서가 거기에 포함된 DTD 구조와 안 맞으면 오류를 일으킨다.