구조화된 데이터를 표현하는 방식
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/
'TIL' 카테고리의 다른 글
| TIL [CI/CD - 배포 자동화] #23.04.24 (0) | 2023.04.25 |
|---|---|
| TIL [CI/CD - CI/CD Pipeline] #23.04.20 (0) | 2023.04.25 |
| TIL [데이터베이스 - 문제 상황에 따른 해결책] #23.03.30 (0) | 2023.03.30 |
| TIL [데이터베이스 - 데이터베이스 기초] #23.03.29 (0) | 2023.03.29 |
| TIL [WAS와 Web Server - CORS] #23.03.24 (0) | 2023.03.27 |
