XML과 JSON

양치는 하셨나요·2024년 7월 22일
0
post-thumbnail

CS를 조금이라도 공부해 본 적 있다면 들어봤을 두 단어. XML과 JSON이다. 둘 다 단순히 데이터를 저장하는 형식이다… 라는 식으로만 알고있지 명확한 차이를 알아본 적이 없다. 해봤자 JSON은 키랑 벨류로 이뤄졌다 정도..?

일단 둘 모두 웹과 서버 간의 통신 시 데이터를 주고 받는 다는 문법이라는 정도만 아는 단계이니 만큼 이번 기회에 두 가지의 개념과 차이점, 어떤 상황에 사용하면 좋은가 까지 알아보도록 하자.


XML

뭔가 단어만 봤을 때는 HTML이 떠오른다. 뒤의 ML이 같아서 일까? 뭔가 연관이 있을 것 같다. 기본 개념부터 알아보자.

개념

Extensible Markup Language의 약자로 뜻 그대로 읽으면 확장 가능한 마크업 언어 정도로 번역 가능하다.

마크업 언어인 만큼 데이터를 정해진 규칙에 따라 표현하여 데이터를 구조적으로 표현한다.

이렇게 적어두니 살짝 이해가 안가기도 한다. 예제를 같이 살펴보자.

<book>

<title> Learning CS is Difficult </title>

<author> Brush Your Teeth</author>

</book>

book 이라는 하나의 구조를 만들고 그 안에 title과 author를 명시했다.

<book></book>
<title></title>
<author></author>

이와 같이 구조의 이름을 명시한 것을 태그라고 하며 이런 태그를 이용해 정교한 데이터 코딩이 가능하고 여러 시스템에서 정보의 흐름을 통합적으로 표현 가능하다.

또한 위의 예제는 보기 쉽게 줄을 나눠두었지만 실제로는

<book><title> Learning CS is Difficult </title><author> Brush Your Teeth</author></book>

이런 식으로 한 줄에 표현해도 무방하다.

설계 목적

XML을 만든 W3C(WWW Consortium. 웹기술의 표준을 정하는 공식 기관.)에서 XML은 아래와 같은 목적을 두고 설계하였다고 한다.

  • 인터넷 상에서 명확하게 사용할 수 있어야 한다.
  • 다양한 응용 프로그램을 지원해야 한다.
  • SGML과 호환되어야 한다.
    • SGML은 Standard Generalized Markup Language로 문서용 마크업 언어를 정의하기 위한 메타 언어이다. XML 이전에 나온 것으로 ISO 표준으로 되어있다. XML보다 더 다양한 기능들을 지원하지만 이런 점 때문에 해석에 어려움이 있어 SGML의 해석과 처리를 단순화하기 위해 설계된 것이 XML이다.
  • XML 문서를 처리하는 프로그램은 손쉽게 작성될 수 있어야 한다.
  • 옵션의 수는 최소한으로 유지되어야 한다.
  • 인간이 읽을 수 있어야 하며, 의미가 명확해야 한다.
  • 설계는 빠르게 이루어져야 한다.
  • 설계는 공식적이면서 간결해야 한다.
  • 작성하기 쉬워야 한다.
  • 마크업의 간결성은 그다지 중요하지 않다.

XML 목적

위의 설계 목적에 따른 XML은 서로 호환되지 않는 데이터 타입을 사용하는 시스템 간의 데이터 교환의 어려움과 데이터 변환 과정 중 데이터 손실을 방지하고자 한다.

XML이라는 텍스트 형식을 정하게 되면 특정 형식으로 데이터를 저장하게 되어 소프트웨어나 하드웨어에 독립적으로 저장 및 전달이 가능해진다. 따라서 XML을 이용해 OS, 프로그램, 브라우저 등에 구애받지 않고 안전하고 쉽게 데이터 전송이 가능해진다.

특징

  • 다른 목적의 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어이다.
  • 다른 시스템끼리 다양한 종류의 데이터를 형태를 정해 교환함으로써 손쉬운 교환을 야기한다.
  • 원하는 태그를 새롭게 추가해도 계속해서 동작하므로 확장성에 강점이 있다.
  • 데이터를 보여주는 목적이 아닌 전달 및 저장을 목적으로 한다.
  • 텍스트 데이터 형식의 언어로 모든 XML 문서는 유니코드로 작성되야 한다.
  • XML 문서의 구조 및 해당 문서가 포함할 수 있는 요소와 속성을 명시해 둔 스키마를 문서에 포함 시켜 XML 문서를 정의한다.

HTML과의 차이점

구조를 이루고 태그로 명시하는 마크업 언어라는 점은 비슷하나 HTML은 웹페이지의 구성 및 구조를 나타내는 데 목적이 있고 XML은 이런 웹과 다양한 시스템에 정보를 주고 받는 데이터 전송에 목적이 있다.

또한 HTML은 태그들이 정해져 있어 HTML을 지원하는 브라우저라면 공통적으로 동작할 수 있도록 하지만 XML은 데이터를 편리하게 주고 받을 수 있도록 태그에 제한이 없다.

결국 HTML은 XML의 형식으로 웹을 표현할 수 있도록 태그를 미리 정해 둔 언어라고 할 수 있다.

장점

  • 다양한 마크업 언어의 기반이 되는 마크업 언어로써 호환이 잘 된다.
    • 시스템과 애플리케이션 간 문서 전송이 가능하다
    • 서로 다른 플랫폼 간 데이터 교환이 가능하다.
  • HTML 내에서 태그를 구분 지어 데이터를 분리한다.
  • 태그를 직접 지정 할 수 있어 확장성이 뛰어나다.

단점

  • 모든 요소에 태그를 달아야 한다.
    • 이로 인해 모든 요소별로 태그가 존재해 장황하고 복잡해진다.
  • 모든 태그는 열었으면 닫아야 한다.

위의 부분으로 인해 가독성이 좋다고 하기 어렵고 또한 중복되는 문자도 증가해 응답 시간이 느려질 가능성이 있다.


JSON

위의 XML의 단점으로 인해 등장한 것이 JSON이다. 그렇다면 JSON은 어떤 특징을 가지고 있기에 단점들을 개선했다고 하는 것일까?

개념

JavaScript Object Notation의 약자로 자바스크립트의 객체 표기법이라는 뜻이다. 의미에서 알 수 있듯이 JSON은 자바스크립트를 기반으로 만들어졌다.

또한 XML과 같이 데이터를 주고받기 위해 만들어졌으며 텍스트 기반으로 된 데이터 교환 표준이다.

XML과 마찬가지로 텍스트 기반이기 때문에 어떤 프로그래밍 언어에서도 JSON 데이터를 읽고 사용할 수 있다.

JSON도 마찬가지로 예시를 먼저 보자.

{"employees":[
  { "firstName":"John", "lastName":"Doe" },
  { "firstName":"Anna", "lastName":"Smith" },
  { "firstName":"Peter", "lastName":"Jones" }
]}

{}로 employees라는 이름을 가진 객체를 만들고 해당 객체 안에 있는 내용은 ‘ : ’ 뒤에 [ ]로 명시했다. 이때 앞의 employees는 key, [ ]를 value라고 한다.

[ ]안을 보면 마찬가지로 {}로 객체들이 존재하고 이 또한 key : value 형식으로 데이터들이 명시되어 있다.

JSON 또한 XML처럼 사람이 더 잘 알아보도록 줄을 나눠놨을 뿐

{"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}]}

이렇게 한 줄에 작성해도 상관 없다.

특징

  • 자바스크립트를 확장하여 만들었다.
    • 원래 자바스크립트와의 상호 운용을 위해 자바스크립트의 문법을 그 자체의 데이터 형식으로 뽑아내도록 정의되었다.
  • 스크립트 객체 표기법을 따른다.
    • key : value 표기법이 바로 이것이다.
  • 사람과 기계 모두 읽기 편하도록 고안되었다.
    • 의도적으로 간결함과 집중을 추구했다.
  • XML과 마찬가지로 하드웨어와 소프트웨어에 독립적이다.
  • 데이터를 문자열로 전송 받는다.
    • XML은 XML DOM(Document Object Model)을 이용해 접근하는 것과 차이가 있다.
  • 전송 받은 데이터의 무결성을 직접 검증해야 한다.
    • 아직 XML을 쓰는 이유이기도 하다.

장점

  • 모든 브라우저에 대한 지원 제공한다.
  • 텍스트 데이터로 사람이 알아보기 쉽게 구성되었기에 생성, 조작, 읽기, 쓰기가 쉽다.
  • XML에 비해 용량이 줄고 그만큼 빠르다.
  • 자바스크립트에서 기분 인식되고 자바스크립트 내의 함수인 eval()로 구문 분석이 가능하다.
  • 직렬화가 가능하다.
    • 직렬화: 데이터를 다른 곳에서도 쓸 수 있도록 byte 형태로 데이터를 변환하는 것. 추후 병렬화와 같이 다뤄보도록 하겠다.
  • 자바스크립트를 확장했기 때문에 자바스크립트의 모든 객체를 JSON으로 전송 가능하다.
  • JSON은 데이터 전송 후 파싱 단계에서 따로 해석을 할 필요가 없기에 XML 보다 더 빠르다.
    • 파싱(Parsing): 프로그래밍에서 특정 형식으로 구성된 데이터를 분석하고 그 의미를 이해하는 것. 간단히 번역 이라고 생각할 수 있다.

단점

  • 네임스페이스 기능이 없다.
    • 네임스페이스: 형식, 함수 등을 나타내는 내부 식별자.
    • 즉, 이름이 같으면 같은 객체이기에 확장성이 떨어진다.
  • 형식적인 문법 정의 지원.
    • key-value 문법을 지켜야 한다.
  • 제한된 개발 도구 지원.
  • 내용이 함축적이어서 의미 파악이 어려울 수 있다.

공통점

  • 데이터를 저장하고 전달하기 위해 고안되었다.
  • 텍스트로 이뤄져 있기 때문에 사람과 기계 모두 읽기 쉽게 고안되었다.
  • 요소 안에 요소를 넣을 수 있는 계층적 구조를 가지고 있다.
  • 다양한 언어에 의해 파싱될 수 있다.
    • 파싱: 어떤 큰 자료에서 원하는 정보만 가공하고 원하는 때에 불러올 수 있게 하는 것.
  • XMLHttpRequest 객체를 통해 서버로부터 데이터를 전송받을 수 있다.
    • XMLHttpRequest: 앞서 배웠던 HTTP 메시지를 주고 받을 때 사용하는 객체. 이 객체로 메시지를 주고받는다.
    • 이 객체로 주고받을 수 있다는 말은 둘 다 HTTP 메시지의 바디에 들어갈 수 있다는 뜻이다.

차이점

  • JSON은 종료 태그가 없다. ← 중복 단어 수가 적다.
  • → JSON의 구문이 더 짧다.
  • JSON 데이터가 XML 데이터보다 더 빨리 읽고 쓸 수 있다.
  • XML은 배열을 사용할 수 없지만 JSON은 배열을 사용할 수 있다.
    • 배열은 데이터를 더 간결하게 저장 가능하다.
  • XML은 XML 파서로 파싱, JSON은 eval() 함수로 파싱된다.
  • XML은 XML DOM을 이용하여 해당 문서에 접근하지만 JSON은 문자열 그대로 파싱하여 사용한다.

어떤 경우에 사용해야 하는가

  • JSON의 경우 송수신 단계에서 파싱 단계가 XML보다 간단하기 때문에 요소를 패키지화하고 해제하는 추가 작업이 적다. 또한 XML은 데이터의 구조화와 XML화에 따른 코드 작성을 미리 생각해야 하지만 JSON은 이에 유연하다. 이런 것을 잘 활용하는 개발 방법 중 하나가 애자일 개발 밥업론이다. 애자일은 일정 주기를 가지고 빠르게 개발을 진행하고 출시하여 고객의 요구사항, 변화된 환경 등에 맞게 요구를 추가/삭제하고 수정해나가는 탄력적 개발 방법을 말하는데 이런 것에 적합한 것이 JSON이다. → 따라서 대부분의 경우 JSON을 사용하는 경우가 좋다고 한다.
  • XML은 주석을 달 수 있기에 데이터에 추가적인 설명이 필요한 경우에는 JSON보다 유리하다.
  • JSON은 안의 모든 데이터가 그대로 쓰이지만 XML은 태그를 열고 닫음으로 데이터를 구분하기에 XML이 오타에 대해 더 안전하다.
  • XML은 스키마를 통해 데이터가 올바른 형식으로 작성되었는지 확인 가능하다.
    • 이에 JSON은 데이터의 무결성을 사용자가 직접 검토해야 한다는 문제가 있다.
    • 보안 상 중요하거나 변경에 예민한 데이터 같은 경우 JSON 전송이 불리하다는 뜻이기도 하다.
  • 하지만 기존에 XML로 작성하여 잘 정의되어 있고 정상 동작하고 있는 것을 JSON으로 바꿔야 할 정도로 장단점의 차이가 나는 것은 아니기에 굳이 변경할 이유는 없다. 또한 JSON은 네임스페이스를 지원하지 않기 때문에 그래픽 파일이나 문서 등의 바이너리 데이터는 XML 전송이 더 적합하다.

결론

  • JSON과 XML 차이 요약

  • 어떤 것을 사용해야 하는가.
    • 이미 XML로 잘 쓰고 있다면 바꿀 이유는 없다.
    • 새로이 만드는 웹의 경우 JSON으로 하는 것이 편리하고 빠르지만 필요에 따라 XML의 사용도 중요하다.

추가

YAML

  • XML과 JSON의 불편한 점을 해결하기 위해 나온 언어. 사람이 읽기 좋은 데이터 구조를 목표로 만들어졌다.
person:
  name: John Doe
  age: 30
  address:
    street: 123 Main Street
    city: Anytown
    state: CA
    zip: 12345
  phones:
  - number: 123-456-7890
    type: home
  - number: 555-555-5555
    type: work
  • 문법
    • 공백으로 구조 표현 (파이썬 느낌이 난다. )
    • JSON과 마찬가지로 key : value로 표현한다.
    • 원소는 - 으로 나타낸다.
    • 쌍따옴표 없이도 숫자와 문자열을 인식한다.
    • yes, no, true, false는 자동으로 boolean으로 인식한다.
    • 주석은 #으로 사용한다.
    • ---는 구분선으로 사용한다.

SCV

  • 쉼표를 기준으로 항목을 구분하여 저장한 데이터. DB나 표 계산 소프트웨어 데이터를 보존하기 위해 사용한다.
no, name, score, hobby
1, 홍길동, 95, (Soccer,Ninza)
2, 이순신, 100, (Sing,Dancing)
  • 각 항목이나 내용마다 쉼표로 구분
  • 텍스트 파일로 보존해 문서 처리기 나 편집기에서 열람, 편집 가능
    • 데이터 오염에 대단히 취약하다.
  • 단순 텍스트 파일이기에 데이터 크기가 매우 작다.
profile
프로그래밍을 잘하고 싶어요..

0개의 댓글

관련 채용 정보