JSON

내위키
Dennis (토론 | 기여)님의 2021년 12월 21일 (화) 14:26 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

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과 기능을 일대일 비교하는 게 무의미하긴 하지만.

각주

  1. 자바스크립트의 객체는 단순히 키-값의 쌍으로 이루어진 맵(map) 유형 데이터인데, 자바스크립트의 함수는 일급 객체이기 때문에 '값'으로도 쓰일 수 있어서 객체의 구실을 할 수 있다. 객체를 정의하고 사용하는 방식은 주류 객체지향 언어와는 약간 차이가 있다.
  2. Ajax의 시작은 원래 마이크로소프트가 인터넷 익스플로러 5부터 자사의 자바스크립트 라이브러리에 집어넣었던 IXMLHTTPRequest 인터페이스였다. 이게 XMLHttpRequest 클래스로 발전하고, 파이어폭스가 XMLHTTPRequest 클래스를 집어넣으면서 다른 웹 브라우저들도 하나 둘 이 클래스를 추가했다. 즉 처음에는 XML로 데이터를 받기 위한 인터페이스였지만 JSON이 그 자리를 차지했다.
  3. XML 문서가 거기에 포함된 DTD 구조와 안 맞으면 오류를 일으킨다.