IWished
article thumbnail
Published 2023. 4. 11. 22:13
TIL [XML, JSON, YAML] #23.04.11 TIL

구조화된 데이터를 표현하는 방식

XML, JSON, YAML 은 모두 데이터를 표현하는 방식이다.

각각 형태와 문법이 조금씩 다르고 쓰임새가 다르기 때문에 어느 하나만을 써야 한다고는 할 수 없고, 상황에 따라 맞는 것을 쓰면 된다.

그렇기 때문에 각각의 문법과 차이점을 알아두는 것이 좋다.

1. XML

XML은 데이터를 표현하기 위해 많이 사용되어 온 방식으로, HTML과 흡사한 구조를 가지고 있다.

HTML처럼 태그를 꺽쇠(<>)를 이용하여 명시하고, <!--주석--> 형태로 주석 사용이 가능하다.

XML이 가지는 고유한 문법으로 소프트웨어 및 하드웨어에 대하여 독립적으로 데이터 처리가 가능하다.

트리 계층 구조를 가지고 있고, 루트 요소부터 시작해 여러 개의 자식을 계층적으로 포함하게 된다.

<?xml version="1.0" encoding="UTF-8"?>
<Fruits>
  <Banana>
    <Calories>105</Calories>
    <Fat>0.4g</Fat>
    <Carbs>27g</Carbs>
  </Banana>
  <Grape>
    <Calories>62</Calories>
    <Fat>0.3g</Fat>
    <Carbs>15g</Carbs>
  </Grape>
</Fruits>

1.1 HTML과 XML

HTML, XML마크업 언어이다.

- 마크업 언어 : 태그를 사용하여 문서 내의 요소를 정의하는 컴퓨터 언어

HTML웹 페이지에 문서 형태로 데이터를 보여주기 위한 목적으로 사용되는 하이퍼 텍스트 마크업 언어이고,

XML플랫폼간 데이터를 교환하는데 사용되는 확장 가능한 마크업 언어이다.

XML 유효성 검증 사이트
https://www.xmlvalidation.com/

2. JSON

JavaScript Object Notation의 줄임말

XML과 비슷하게 데이터를 처리하기 위한 형식으로, 객체 형태의 포맷이다.

JSON은 속성-값 쌍 또는 키-값 쌍으로 이루어진 데이터를 전달하기 위해 사용되며, 사람이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.

JSON은 텍스트 기반으로 이루어져 있어 어떠한 프로그래밍 언어에서도 JSON 데이터를 읽고 사용할 수 있다.

일반적으로는 서버와의 통신 규악인 REST API를 사용할 때 가장 많이 사용되어 최근에는 XML 보다 JSON 형식을 채택하는 경우가 많다. 하지만 JSON은 주석을 사용할 수 없다는 특징이 있다.

또한 JSON은 키와 문자열 값에 반드시 큰 따옴표를 붙여야 하고, 키와 값 사이, 키-값 쌍 사이에 공백이 있어서는 안된다.

{
  "Fruits": [
    {
      "Banana": {
        "Calories": 105,
        "Fat": "0.4g",
        "Carbs": "27g"
      }
    },
    {
      "Grape": {
        "Caloreis": 62,
        "Fat": "0.3g",
        "Carbs": "15g"
      }
    }
  ]
}

2.1 XML과 JSON

공통점

  • 데이터를 저장하고 전달하는 데이터 교환 형식이다.
  • 기계 뿐만 아니라 사람도 쉽게 읽을 수 있다.
  • 계층적인 데이터 구조를 가지고 있다.
  • 프로그래밍 언어에 의해 파싱될 수 있다.

차이점

  • JSON은 종료 태그를 사용하지 않는다.
  • JSON의 구문이 XML의 구문보다 더 간결하여 기계가 파싱하기 쉽고, 사람이 읽을 때도 파악이 용이하다.
  • XML은 배열을 사용할 수 없지만, JSON은 배열을 사용할 수 있다.

XML = 안정성
JSON = 간결성

2.2 JSON 기본 자료형

  • 수(Number)
  • 문자열(String): 0개 이상의 유니코드 문자들의 연속. 문자열은 큰 따옴표(")로 구분
  • 참/거짓(Boolean): true 또는 false 값
  • 배열(Array): 0 이상의 임의의 종류의 값으로 이루어진 순서가 있는 리스트로 대괄호로 표현, 요소는 쉼표로 구분
  • 객체(Object): 순서가 없는 {이름:값} 쌍의 집합으로, 이름(키)이 문자열이다.
  • null: 빈 값으로, null을 사용한다.

2.3 JSON의 단점

JSON의 단점은 보안성에 있다.

XML은 태그명을 잘못입력해도 프로그램이 유동적으로 작동하지만 JSON의 경우 브라켓 하나만 빠트려도 전체 정보에 오류가 발생한다.

따라서 JSON으로 정보를 전송할 땐 전체적인 debug를 철저히 한 후 보내야 하는 단점이 있다.

JSON 유효성 검증 사이트
https://www.xmlvalidation.com/

3. YAML

"YAML Ain't Markup Language"라는 재귀적인 이름에서 유래되었다.

YAML의 기본적으로 데이터를 정의할 때 key: value의 형태로 데이터를 정의한다.

이때 콜론(:) 뒤에는 키와 값을 구분하기 위해 반드시 공백문자(whitespace)가 있어야 한다.

사용가능한 데이터 타입으로는 Number, String, Boolean이 있으며, 문자열(String)에 \n,@ 등의 특수 문자가 포함된 경우에만 따옴표(" ")를 사용하여 작성한다.

YAML은 XML처럼 주석을 사용할 수 있고, 주석을 작성할 땐 해당 줄의 맨 앞에 #을 작성한다.

Fruits:
    - Banana:
             Calories: 105
             Fat: 0.4g
             Carbs: 27g

    - Grape:
             Calories: 62
             Fat: 0.3g
             Carbs: 15g

3.1 JSON과 YAML

JSON의 최우선 설계 목표는 간편성과 보편성이기 때문에 가독성을 조금 떨어트리는 대신 생성 및 파싱이 용이하다는 특징이 있다.

반면, YAML의 최우선 설계 목표는 가독성이다.

3.2 YAML의 기본 자료형

  • 스칼라(Scalar) : 문자열 혹은 숫자
  • 시퀀스(Sequence): 배열
  • 매핑(Mapping): 해시 혹은 딕셔너리, key-value 쌍

3.3 YAML의 장단점

장점

  • JSON의 완전한 상위 호환이기 때문에 기존 JSON 문서를 그대로 YAML 파일로 사용하거나, 원하는 부분만 손볼 수 있다.
    • JSON을 사용하던 중이라면 금세 익힐 수 있고 YAML을 지원하지 않는 환경에서도 사용자가 직접 쉽게 변환해서 사용할 수 있다.
  • JSON은 한글 등의 멀티 바이트 문자를 인코딩하여 보여주지만 YAML은 한글과 같은 유니코드를 그대로 사용할 수 있다
  • XML, JSON등과 비교했을 때 압도적으로 간결하다.
  • JSON과는 다르게 타입을 명시해 줄 수 있어 불필요한 실수를 피할 수 있다.

단점

  • 문법이 복잡한 것에 비해 자주 쓰이지 않는 부분이 많다.
    • 복잡한 문법 탓에 파서를 만들기도 더욱 어려워진다.
  • 객체와 배열의 문법이 비슷하고 시작과 끝을 알기가 헷갈려 원치 않는 결과가 나올 수 있다.
    • 특히 배열과 객체가 중첩되면 상당히 읽기 힘들어진다.
YAML 유효성 검증 사이트
http://www.yamllint.com/