on
JSON and XML
XML(eXtensible Markup Language)
- HTML과 매우 비슷한 문자 기반의 마크업 언어이다
- 사람과 기계가 동시에 읽기 편한 구조로되어있다.
- HTML처럼 데이터를 보여주는 목적이 아닌 데이터를 저장하고 전달하는 목적으로 만들어졌다.
- XML 태그는 HTML 태그 처럼 미리 정의 되어 있지 않고, 사용자가 직접 정의할 수 있다
JSON(JavaScript Object Notation)
- 브라우저 통신을 위한 속성-값 또는 키-값 쌍으로 이루어진 데이터 포맷
JSON과 XML 공통점
- 데이터를 저장하고 전달하기 위해 고안되었다
- 기계 뿐아니라 사람도 쉽게 읽을 수 있다.
- 계층적인 데이터 구조를 가진다
- 다양한 프로그래밍 언어에 의해 파싱될 수 있다
- XMLHttpRequest 객체를 이용하여 서버로부터 데이터를 전송받을 수 있다.
JSON과 XML의 차이점
JSON | XML | |
---|---|---|
종료태그 사용 | 사용안함 | 사용함 |
구문 길이 | 짧다 | 길다 |
읽기/쓰기 속도 | 빠르다 | 느리다 |
네임 스페이스 | 제공안함 | 제공함 |
배열 | 사용가능 | 사용불가능 |
파싱 | Javascript표준함수인 eval()함수로 파싱 | XML 파서로 파싱 |
데이터 표시 | 없음 | 제공 |
안정성 | 비교적 낮다 | 비교적 높다 |
인코딩 | UTF-8 | 다양한 인코딩 형식 지원 |
XML 예
<employees>
<employee>
<firstName>John</firstName> <lastName>Doe</lastName>
</employee>
<employee>
<firstName>Anna</firstName> <lastName>Smith</lastName>
</employee>
<employee>
<firstName>Peter</firstName> <lastName>Jones</lastName>
</employee>
</employees>
JSON 예
{"employees":[
{ "firstName":"John", "lastName":"Doe" },
{ "firstName":"Anna", "lastName":"Smith" },
{ "firstName":"Peter", "lastName":"Jones" }
]}
JSON의 사용 범위
- XML 문서는 XML DOM(Document Object Model)을 이용하여 해당 문서에 접근한다. JSON은 문자열을 전송받은 후에 해당 문자열을 바로 파싱하므로, XML보다 더욱 빠른 처리 속도를 보여준다
- 따라서 HTML과 자바스크립트가 연동되어 빠른 응답이 필요한 웹 환경에서 많이 사용된다
- JSON은 전송받은 데이터의 무결성을 사용자가 직접 검증해야한다
- 데이터의 검증이 필요한 곳에서는 스키마를 사용하여 데이터의 무결성을 검증할 수 있는 XML이 아직도 사용된다.
JSON의 특징
- 사용하기 쉽다
- 적은 메모리 공간을 사용하기 때문에 빠르다
- 맵핑을 생성하지 않아도된다
- Jackson API가 직렬화 할 여러 개체에 대한 기본 매핑을 제공한다
- 종속성
- JSON을 처리하기 위해 다른 라이브러리가 필요하지 않다
XML의 특징
- XML 태그는 미리 정의되어 있지 않다. 사용자 정의 태그를 정의해야한다
- 사람이 이해하기 쉽다
- 구조화 된 형식은 프로그램에서 읽고 쓰기가 쉽다
- XML은 HTML과 같은 확장 가능한 마크업 언어이다
- 데이터를 전달하도록 설계 되어있고 데이터를 표시할 수 없다
JSON 장점
- 모든 브라우저에 대한 지원 제공
- 생성, 조작, 읽기 , 쓰기가 쉽다
- 구문이 간단
- javascript에서 기본적으로 인식되고 javascript 함수인 eval() 로 구문 분석이 가능하다
- 직렬화가 가능하다
- JavaScript 의 모든 객체를 JSON으로 변환하여 JSON을 서버로 보낼 수 있는 텍스트이다
XML 장점
- 시스템 및 애플리케이션간에 문서 전송이 가능하다.
- 서로 다른 플랫폼 간에 데이터 교환이 가능하다
- HTML에서 데이터를 분리한다
- 플랫폼 변경 프로세스를 단순화한다
JSON의 단점
- 네임 스페이스 지원이 없다. ( 확장성이 부족)
- 형식적인 문법 정의 지원( 문법을 지켜야한다)
- 제한된 개발 도구 지원
XML의 단점
- 처리 응용 프로그램이 필요하다
- 내장 데이터 유형 지원이 없다
- XML 구문이 중복된다
- 사용자가 자신의 태그를 생성하는 것을 허용하지 않는다
- 텍스트 기반 데이터 전송 형식과 유사하다
최근 XML이 빠르게 잊히고 있습니다. 개발자 사이에서 인기를 잃고 있으며 더 유연하고 빠른 형식으로 대체되고 있습니다.
XML(Extensible Markup Language)은 1990년대 SGML(Standard Generalized Markup Language)을 기반으로 개발된 후 1997년 1.0 사양이 발표되면서 본격적으로 성장하기 시작했씁니다. XML의 장점은 이종 형식 간에 데이터 전송이 매우 편리하다는 것입니다. 독자적인 형식을 사용하는 여러 애플리케이션 사이에서 데이터를 공유하기 위해 데이터를 변환할 때 필요한 필터의 수가 크게 적었습니다. 이 때문에 마이크로소프트도 오피스 2007(Office 2007)에서 워드(Word)와 엑셀(Excel) 파일 형식을 XML 기반 형식으로 바꿨습니다. XML 덕분에 다른 형식으로 변환하는 것이 훨씬 수월해졌습니다.
문제는 장황하고 복잡하다는 것입니다. 프로그래밍 언어나 데이터베이스의 시스템을 입력하기 위해 XML을 맵핑(Mapping)하기가 어렵고, 데이터가 특정 애플리케이션에 맞춰 구조화된 경우에는 더 까다로웠습니다. 많은 태그 때문에 문자량이 늘어나 응답 시간이 느린 것도 단점이었습니다. XML이 너무 ‘무거워’ 웹 실행 속도가 느려진다는 인식도 여기서 출발합니다.
이런 가운데 JSON(JavaScript Object Notation)이 등장하면서 개발자 사이에서 빠르게 확산하기 시작했습니다. 처음에는 자바스크립트로 작업했지만, 지금은 여러 언어를 지원하며 비동기식 브라우저/서버 통신을 위한 XML의 대안으로 주가를 높이고 있습니다.
Stack Overflow에서 개발자가 사용하는 태그 목록을 보면 XML의 내림세를 확인할 수 있습니다. 반면 JSON은 지난해 살짝 부진하긴 했지만 단연 주목받고 있습니다. 영국의 맞춤형 소프트웨어 개발업체인 소프트와이어(Softwire)의 기술 책임자 겸 오픈소스 챔피언인 팀 페리는 “JSON이 등장한 이유는 명확하다”며 다음과 같이 설명했습니다.
-
복잡성: 페리는 “JSON은 의도적으로 간결함과 집중을 추구한 툴이다. 최근에는 복잡하고 구조화된 개념 대부분을 단독으로 표현하는 것이 그리 유용하지 않다는 인식이 개발 부분 전반으로 확산하고 있다. 크고 무거운 시스템보다는 유연하고 구성 가능한 툴이 환영받고 있는데 JSON은 이런 흐름을 잘 타고 있다”고 말했습니다.
-
보안: XML은 적절하게 파싱(Parsing)을 거쳐도 BL(Billion Laughs) 공격 또는 EE(External Entity) 공격 같은 보안 취약성을 일부 갖고 있습니다. 페리는 “XML은 이런 기능을 실수로 활성화하면 시스템이 상당히 위험에 처하게 되지만 JSON은 그렇지 않다. JSON을 이용해 이런 위험에 노출되는 툴을 개발하기는 어렵다. 반면 XML을 사용할 때는 반드시 개발자가 능동적으로 확인하고 피해야 한다”라고 말했습니다.
-
자바스크립트: JSON은 자바스크립트로 작성되었습니다. 본래 자바스크립트와의 손쉬운 상호운용성을 위해 자바 스크립트에서 사용하는 문법을 그 자체의 데이터 형식으로 뽑아내도록 정의됐습니다.
-
툴지원: JSON의 인기가 높아지면서 더 많은 개발자 툴이 이를 표준으로 받아들이고 있으며 점차 탄력이 붙고 있습니다.
JSON 인기 1등 공신은 자바스크립트
JSON이 급부상한 이유 중 하나는 클라이언트와 서버쪽 모두에서 자바스크립트가 큰 인기를 끌고 있기 때문입니다. 이스라엘의 정보 보안 기업 빔(Beame)의 설립자 겸 CEO는 “소프트웨어 프레임워크 전체를 보면, (클라이언트에서는) 자바스크립트로 개발하고 서버 환경에서는 node.js가 가장 인기 있는 백엔드(Back-End) 서버 툴이 됐다. 이 언어를 통해 JSON 직렬화 개체로 네이티브 매핑이 가능하다”고 말했습니다.
맞춤형 소프트웨어 기업 액터리테크(AktaryTech)의 설립자인 데이비드 액터리는 자바스크립트의 빠른 개발 속도를 지목했습니다. 그는 “자바스크립트는 개발자가 애자일(Agile) 개발 방법을 수용할 기회를 제공한다. XML 세계에서는 훨씬 많은 구조와 엄격함 때문에 불가능했던 것이다. XML과 JSON의 차이는 마치 Waterfall과 Agile의 그것과 비슷하다. 개발자가 (애자일 방법론에 따라) 매일 여러 번씩 현업에 코드를 제공하려면 유연하고 신속해야 하는데, JSON이 여기에 적합하다“고 말했습니다.
클라우드 데이터 기업 스노우플레이크 컴퓨팅(Snowflake Computing)의 제품 및 마케팅 담당 부사장 존 복도 ‘애자일-JSON’ 조합의 장점에 동의했습니다. 그는 “코드가 빠르게 발전하면서 이 코드로 생성하는 데이터도 빠르게 발전하므로 애자일 개발과 JSON에 대한 수요 사이에는 관련성이 있는 것이 분명하다. JSON을 사용하면 송신과 수신 쪽에서 새 데이터 요소를 패키지화하고 해제하는 추가 작업이 적다. 일반적으로 JSON 표현의 구조와 데이터를 처리하는 코드이 구조 사이에서는 매핑이 더 쉽기 때문이다“라고 말했습니다.
액터리는 “XML의 경우 데이터를 구조화하고 데이터의 XML화 방식에 따라 문서와 코드 작성법을 미리 생각해야 하지만 JSON은 완전히 유연하다. 실행 중 예상하지 못했던 데이터를 얻게 된다는 것은 단점이지만, XML은 아예 이를 허용하지 않는다”고 말했습니다.
그는 XML이 개발자의 외면을 받는 또 다른 이유로 초기 작업이 너무 많다는 점을 들었습니다. 그는 “XML 기반 앱을 구조화하려면 문서 유형 정의를 비롯해 많은 사전 작업이 필요하다. 반면 JSON은 자바스크립트에서 객체를 정의하고 실행 중 어떤 속성이든 추가할 수 있다. XML에서는 실행 중에 이런 작업을 하는 것이 불가능하다”고 말했습니다.
XML은 여전히 쓸모가 있다
복은 “이제 신규 프로젝트 대부분은 JSON을 이용하는 것이 좋고, 웹 앱의 경우에는 특히 그렇다. XML 형태의 데이터가 있지 않은 새 프로젝트를 XML로 시작할 필요가 없다. 단, XML을 JSON으로 전환할 필요는 없다. 지금 상태가 정상이라면 유지하는 것이 바람직하다”고 말했습니다.
현재는 JSON의 인기가 높지만, XML도 나름의 장점은 여전히 가지고 있습니다. 쿼리(Query)가 적용된 XML 기반 데이터베이스와 모두 XML로 작성한 앱 로직(Logic) 등이 대표적입니다. 복은 이를 JSON은 데이터 교환 형식이고, XML은 더 광범위한 일련의 툴이라고 표현했습니다. 단적인 예가 메타데이터(Metadata)입니다. XML은 메타데이터를 지원하고 JSON은 속성에 불과하므로, 메타데이터를 JSON으로 표현해야 하는 문제가 있습니다. 또한, JSON에서는 명칭 공간을 지원하지 않고, 그래픽 파일이나 문서 등의 바이너리(Binary) 코딩된 파일은 XML이 더 적합합니다.
복은 “JSON에는 없지만, XML에는 데이터 사용 사례를 중심으로 많은 표준이 존재한다. XML로 마이그레이션된 EDI(Electronic Data Interchange) 등의 기록을 위한 데이터 교환 형식은 표준 형식이 있다. JSON에는 이런 것이 없다”고 말했습니다.