본문 바로가기

프로그래밍(TA, AA)

[프로그래밍] XML과 JSON의 차이

최근 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에는 이런 것이 없다"고 말했습니다. 

 


추가 레퍼런스 블로그(JSON vs XML 생성(Serialize), 파싱(Deserialize) 성능 비교)

http://blog.naver.com/PostView.nhn?blogId=angelkum&logNo=130154155881