JSON, XML, YAML, CSV

자주 쓰이지만 정확히 어떤 형식인지는 모르던 파일들. 이번 기회에 정리해보자.

JSON

JavaScript Object Notation (JSON)의 약자로, 자바스크립트 객체 문법으로 구조화 된 데이터를 표현하기 위한 문자 기반의 표준 포멧이다. 확장자는 (.json). 용량이 작고 간단한 표현 방식 덕분에 여러 언어에서 데이터 구조를 표현할 때 사용하고있다.

파싱(Parsing)?

문자열을 네이티브 객체로 변환하는것이다. 반대로는 문자열화(Stringification)가 있다.

Key : Value

우리의 친구 나무위키! 구조 예시를 가져와보자.

{
  "이름공간(키)": "값",
  "값 구분자": "각각의 값들은 ',' (콤마)로 구분되어야 합니다.",
  "이스케이프": "키나 값에서 큰따옴표를 쓰고 싶으면-특정 문자를 이스케이프 하려면- \" 처럼 문자 앞에 역슬래시를 붙입니다.",
  "자료형": "표현 가능한 자료형은 문자열, 숫자, 불리언, 널, 객체, 배열 6개입니다.",
  "문자열 값": "나무위키, 여러분이 가꾸어 나가는 지식의 나무",
  "숫자 값": 19721121,
  "불리언 값": true,
  "널 값": null,
  "객체 값": {
    "값1": 3.141592653589793,
    "값2": false,
    "값3": {
      "객체 안에": "객체를 넣는것도 가능하지요",
      "구분자": "또한 키와 값은 ':' 로 구분됩니다"
    }
  },
  "배열 값": [
    "이것은 배열입니다.",
    {
      "현재 값의 인덱스": 1,
      "이런 식으로": "배열 안에 여러 값을 넣을 수 있습니다."
    },
    [ "배열", "안에", "배열을", "넣는것도", "가능하지요" ]
  ],
  "값의 개수가 적을때는": "다음과 같이 한 줄로도 객체와 배열 표현이 가능합니다.",
  "한 줄 객체": { "김두한": "개소리 집어쳐", "심영": "내가 고자라니", "의사양반": "전화는 없어요" },
  "한 줄 배열": [ "나무위키는", "누구나", "기여할", "수", "있는", "위키입니다." ]
}

키와 값이 ‘ : ‘ 기호를 기준으로 대응하며, 각각 쌍따옴표로 감싸져있다. javascript 기반이기에 다양한 데이터 타입(숫자, 문자열, 배열, bool, 객체 등)을 포함할 수 있지만, 타입의 명시가 불가능하다.

특징

  • 어디까지나 데이터 포멧이기 때문에 메소드는 담을 수 없다.
  • 이름 작성시 큰 따옴표 만을 사용한다.
  • 문법에 매우 민감. 콤마나 콜론의 배치에 주의하자.
  • 계층적 데이터 구조를 가진다.
  • XML보다 짧고 빠르다!
  • UTF-8 인코딩만을 지원한다.
  • JavaScript형식을 가지기에, 실행되는 파일을 담을 수 있다. 안전성 문제.
  • 주석을 지원하지 않기에, 설정파일로 쓰기에는 어렵다.

JSON 개요 참고자료


XML

eXtensible Markup Language(XML)의 약자로, 데이터의 구조를 기술하는 마크업 언어중 하나이다. 확장자는 (.xml). W3C(World Wide Web Consortium, www관련 표준을 여기서 제정)에서 개발했다. 다른 마크업 언어인 HTML은 데이터명-데이터를 표시할 수 있는 방법이 마땅히 없었기에, 이를 극복하고자 개발되었다.

Well-formed, Valid

Well-formed

→ XML의 기본 문법을 만족하는 수준으로 되어있는 문서. 자유로운 구문을 허용한다. 데이터 교환용으로 쓰기에는 부적합하다.

Valid

→ well-formed에서 한 단계 나아간 개념이다. well-formed 조건을 만족하며, 추가로 DTD(document type definition)를 가진다. DTD는 문서타입정의라고 불리며, 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의한다. (관련자료)

특징

  • 텍스터 데이터 형식으로 유니코드를 사용한다. 전 세계 언어를 지원.
  • JSON과 동일하게 계층적 데이터 구조를 가진다.
  • 다양한 인코딩 형식을 지원한다.
  • 네임스페이스 또한 제공한다.

YAML

YAML Ain’t Markup Language의 약자… 원래는 Yet Another Markup Language 였는데, 마크업보다는 데이터에 중점을 두었다는 것을 나타내기 위해 이름을 바꾸었다고 한다. 확장자는(.yml). XML, C, 파이썬 등에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 “사람이 쉽게 읽을 수 있는” 데이터 직렬화 양식이다.(위키)

그렇기에 YAML은 다음과 같은 특징을 가진다.

특징

  • 주석을 지원한다
  • 프로퍼티 이름에 공백이 들어가도 상관없다.
  • 긴 문장을 표현할 때는 > 를 사용한다. 그러면 한 문장으로 인식.
  • 배열의 아이템은 - 로 구분한다.
  • JSON스타일도 사용 가능하다. JSON의 상위 호환이다.
  • 사람이 알아보기는 쉽지만, 데이터 전송이 목적이라면 JSON이 적합하다.

사용방법은 위키를 참고하자!(추가 자료 쿠버네티스 안내서 - YAML 문법)

CSV

Comma-sepatated values는 몇 가지 필드를 쉼표로 구분한 데이터 및 텍스트 파일이다. 확장자는 (.csv). 표 형태의 데이터를 저장한다. 텍스트에 쉼표 구분으로 이루어졌기에 매우 직관적이며, 소프트웨어 처리가 용이하다.

단점은 콤마가 들어간 데이터를 취급하기 곤란하다는 것. 그리고 취급하는 데이터의 양이 방대해지면 꽤 읽기 힘들다.