안경잡이개발자

728x90
반응형

  JSON, YAML, XML은 모두 데이터(Data)를 표현하는 형식입니다. 다만 그 형태와 문법은 조금씩 다르다는 점에서 그 차이점을 바르게 인지하고 있는 것이 중요합니다. 따라서 이번 시간에는 XML, JSON, YAML에 대해서 공부한 뒤에 이를 비교하는 시간을 가져보도록 하겠습니다. 세 가지 중에서 무엇이 가장 효과적이라고 말할 수는 없으며 상황에 맞는 형식을 이용할 수 있으면 됩니다.


1. XML


  XML데이터를 표현하기 위하여 많이 사용되어 온 방식으로 HTML과 흡사한 구조를 가지고 있습니다. XML이 가지는 고유한 문법이 있다는 점에서 소프트웨어 및 하드웨어에 대하여 독립적으로 데이터를 처리할 수 있습니다. XML의 특징은 꺽쇠(<>)입니다. XML은 트리(Tree) 계층 구조를 가지고 있습니다. 루트(Root) 요소부터 시작해 여러 개의 자식을 계층적으로 포함하게 됩니다.


<?xml version="1.0" encoding="UTF-8"?>

<users>

  <user>

    <name>홍길동</name>

    <score>95</score>

    <hobby>

      <element>Soccer</element>

      <element>Ninza</element>

    </hobby>

  </user>

  <user>

    <name>이순신</name>

    <score>100</score>

    <hobby>

      <element>Sing</element>

      <element>Dancing</element>

    </hobby>

  </user>

  <user>

    <name>나동빈</name>

    <score>97</score>

    <hobby>

      <element>Coding</element>

      <element>Hiding</element>

    </hobby>

  </user>

</users>


  또한 XML은 유효성 검증(Validation)을 통해서 올바르게 작성되었는지 확인할 수 있습니다.


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



※ XML 선언 ※


  XML 문서는 기본적으로 <xml> 태그를 이용해서 XML 문서임을 명시할 수 있습니다. 속성으로는 다음과 같은 것들을 넣을 수 있습니다.


 - version: XML 문서의 버전을 명시합니다.

 - encoding: XML 문서의 문자 셋(Character Set)을 명시합니다. 일반적으로 UTF-8을 사용합니다.

 - standalone: XML 문서 외부 소스 데이터에 의존하는지의 여부를 명시합니다.


  따라서 일반적으로 다음과 같이 작성할 수 있습니다.


<?xml version="1.0" encoding="UTF-8"?>


※ XML 문법 ※


  XML 문서는 규칙적인 형태를 가지고 있습니다. 가장 중요한 문법으로는 XML 요소들은 시작 태그와 종료 태그로 구성된다는 점입니다. 태그는 꺽쇠(<>)를 이용해 명시하며, 닫는 태그에는 슬래시(/)를 함께 넣어줍니다. 예를 들어 TITLE이라는 이름의 태그를 사용한다고 하면 다음과 같이 사용할 수 있습니다.


  <TITLE>내용</TITLE>


  이 때 시작태그와 종료 태그는 대소문자까지 모두 동일해야 합니다. 또한 태그 안에 속성을 명시할 때는 따옴표를 넣어주어야 합니다. 속성을 사용할 때는 다음과 같이 사용할 수 있습니다.


  <TITLE color="red" type="bold">내용</TITLE>


※ XML 주석 ※


  XML은 주석(Comment)을 넣을 수 있습니다. XML의 주석은 <!-- 주석 내용 --> 형태로 사용할 수 있습니다.


2. JSON(JavaScript Object Notation)


  JSON 또한 XML과 비슷하게 데이터를 처리하기 위한 형식입니다. 일반적으로 서버와의 통신 규약인 REST API를 사용할 때 가장 많이 사용되어, 최근에는 XML보다는 JSON 형식이 채택되고 있습니다. 사실상 모든 프로그래밍 언어에서 JSON을 지원한다는 점에서 XML과 YAML에 비해서 채택률이 높아지고 있습니다. JSON은 주석을 사용할 수 없다는 특징이 있습니다.


  가장 먼저 XML 형식을 JSON 형식으로 바꾸는 예제를 확인하며 문법을 확인해보도록 하겠습니다.


[ 변환 이전 ]


<?xml version="1.0" encoding="UTF-8"?>

<users>

  <user>

    <name>홍길동</name>

    <score>95</score>

    <hobby>

      <element>Soccer</element>

      <element>Ninza</element>

    </hobby>

  </user>

  <user>

    <name>이순신</name>

    <score>100</score>

    <hobby>

      <element>Sing</element>

      <element>Dancing</element>

    </hobby>

  </user>

  <user>

    <name>나동빈</name>

    <score>97</score>

    <hobby>

      <element>Coding</element>

      <element>Hiding</element>

    </hobby>

  </user>

</users>


[ 변환 이후 ]


{

"users": {

"1": {

"name": "홍길동",

"score": 95,

"hobby": ["Soccer", "Ninza"]

},

"2": {

"name": "이순신",

"score": 100,

"hobby": ["Sing", "Dancing"]

},

"3": {

"name": "나동빈",

"score": 97,

"hobby": ["Coding", "Hiding"]

}

}

}


  기본적으로 JSON 형식에서는 키(Key) 값이 서로 다른 형태로 사용됩니다. 그래서 위와 같이 사용자를 1, 2, 3으로 구분하는 방식으로, 사용자 명단에 대한 내용을 작성할 수 있습니다. 다만 JSON은 XML과 다르게 꺽쇠가 사용되지 않고 대괄호({})와 큰 따옴표를 이용해 계층형 구조를 형성한다는 특징이 있습니다.


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


  JSON 또한 유효성 검증 사이트에서 그 문법적 유효성을 검증할 수 있습니다.



3. YAML


  YAML 또한 JSON과 비슷하게 사람이 읽기 쉬운 형태의 데이터 표현 형식입니다. YAML은 XML과 문법적으로 유사한 점이 많습니다. YAML에서도 주석을 사용 가능하며 개행, 공백으로 블록을 인식합니다. 다만, 태그를 사용하지 않고 공백 위주로 데이터를 구분하므로 한 줄로 작성할 수 없다는 특징이 있습니다.


  그리고 JSON은 한글 등의 멀티 바이트 문자를 인코딩하여 보여주지만 YAML한글과 같은 유니코드를 그대로 사용할 수 있다는 장점이 있습니다. 일반적으로 API를 만들 때에는 JSON을 사용하며, YAML은 설정 파일을 작성할 때 가장 많이 사용된다는 특징이 있습니다. 심지어 YAML는 상속(Inherit) 등의 기능도 적용할 수 있다는 점에서 효율적입니다.


  앞서 다루었던 사용자 명단 예제를 YAML 형태로 표현하면 다음과 같이 나타낼 수 있습니다.


users:

  1:

    name: 홍길동

    score: 95

    hobby:

      - Soccer

      - Ninza

  2:

    name: 이순신

    score: 100

    hobby:

      - Sing

      - Dancing

  3:

    name: 나동빈

    score: 97

    hobby:

      - Coding

      - Hiding


  ▶ YAML 유효성 검증 사이트http://www.yamllint.com/



  이와 같이 YAML 문서는 위에서 아래로 직렬적으로 작성되어 있다는 점에서 [데이터 직렬화 형식]이라고도 부릅니다. 일반적으로 Swagger API, Spring Boot, Docker 등의 굉장히 많은 환경에서 설정(Conf) 파일 작성을 목적으로 YAML을 사용합니다.

728x90
반응형