X

데이터 교환 형식 (XML, JSON, YAML, CSV)

데이터 교환 형식의 필요성

  • 서로 다른 환경의 시스템들이 데이터를 온전히 주고받으려면, 메모리 속 객체를 전송 가능한 형태로 변환하는 직렬화(Serialization)와 이를 다시 복원하는 역직렬화(Deserialization) 과정이 필수적으로 동반됨
  • 데이터 교환 형식은 이 과정에서 이기종 플랫폼 간의 상호 운용성(Interoperability)을 보장하고 데이터 누락이나 왜곡을 방지하기 위한 표준 규격의 역할 수행

 

1. 사용자가 태그를 정의, XML

  • XML: eXtensible Markup Language

(1) XML의 개념 및 특징

개념 특징
사용자가 직접 태그를 정의하여 데이터의 구조와 의미를 기술하는 확장 가능한 데이터 교환 형식 – 텍스트 기반 높은 가독성
– H/W나 OS에 독립적 사용
– 사람이 태그를 정의해서 사용
– DTD 등 유효성 검증 가능

(2) XML의 사례 기반 문법 및 구조

사례
<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name>홍길동</name>
  <age>25</age>
  <isEmployee>true</isEmployee>
  <skills>
    <skill>Java</skill>
    <skill>JavaScript</skill>
  </skills>
  <address>
    <city>서울</city>
    <zipcode>12345</zipcode>
  </address>
</user>
문법
/구조
  • 태그(<tag>)의 시작과 끝으로 데이터 표현
  • 명시적 데이터 타입 없이 텍스트로 표현 (“25″는 코드 내 숫자 형식으로 변환 필요)
  • 배열과 하위 객체는 태그를 중첩 (<skills> 태그 내 하위에 <skill> 태그)
  • 선택적인 선언문(Prolog)과 속성(Attribute)
    • <?xml version=”1.0″ …> 같이 인코딩 형식 등 선언
    • 필요 시 <user id=”1″> 처럼 태그 내 속성 부여 가능
  • XML은 W3C 표준 기반 공공데이터 연동, 엔터프라이즈 레거시 시스템, 전자문서 교환에 다수 사용

 

2. 키-쌍 기반 경량 데이터 교환, JSON

  • JSON: JavaScript Object Notation

(1) JSON의 개념 및 특징

개념 특징
데이터를 키-값 쌍으로 표현하는 가볍고 읽기 쉬운 표준 텍스트 기반 데이터 교환 형식 – 텍스트 기반: 사람이 읽기 쉬움
– 독립적 형식: 언어에 종속 안 됨
– 키-값 구조: 데이터 검색 용이
– 가벼운 용량: 고속 데이터 전송

(2) JSON의 사례 기반 문법 및 구조

사례
{
  "name": "홍길동",
  "age": 25,
  "isEmployee": true,
  "skills": ["Java", "JavaScript"],
  "address": {
    "city": "서울",
    "zipcode": "12345"
  }
}
문법
/구조
  • 중괄호(‘{‘, ‘}’)를 이용하여 데이터 객체의 시작 및 종료를 정의
  • 데이터는 키(Key):값(Value) 쌍으로 존재
  • 데이터가 여러 개일 때는 쉼표(‘,’)로 각각의 데이터를 구분
  • 다양한 타입의 값(Value)을 가질 수 있음
    • 문자열 형식: “홍길동” (쌍따옴표 필수)
    • 숫자 형식: 25 (따옴표 없음)
    • Boolean 형식: true / false (소문자로 작성)
    • 배열: [“Java”, “JavaScript”] (대괄호 ‘[‘, ‘]’ 사용)
    • 하위 객체(중첩): {“city”: “서울”, …} (구조화된 하위 데이터 표현)
  • JSON은 ECMA-404와 RFC 8259 표준 기반 웹/앱과 서버 간의 데이터 통신에 다수 사용

 

3. 가독성 최우선 데이터 표현, YAML

(1) YAML의 개념 및 특징

  • YAML: YAML Ain’t Markup Language (또는 Yet Another Markup Language)
개념 특징
가독성을 최우선 고려하여 들여쓰기(공백)와 줄바꿈만으로 계층 구조를 표현하는 데이터 교환 형식 – 기호 없이 줄바꿈과 들여쓰기만 사용
– H/W, OS 독립적, JSON 호환
– ‘#’ 주석을 사용하여 협업 가능
– 앵커(&), 알리아스(*) 기반 재사용

(2) YAML의 사례 기반 문법 및 구조

사례
# 개발팀원 홍길동의 정보
name: 홍길동
age: 25
isEmployee: true
skills:
  - Java
  - JavaScript
address:
  city: 서울
  zipcode: "12345"
문법
/구조
  • 줄바꿈과 들여쓰기만을 사용하여 해당 데이터 객체의 시작과 종료를 표현
  • 주석은 “#”으로 표현, 데이터는 “키: 값”으로 표현 (콜론 뒤에 공백 필수)
  • 유연한 타입 표현과 데이터 구조화
    • 따옴표 없이 문자/숫자/Boolean 형식 자동 인식
    • 쌍따옴표(“) 사용 시 강제로 문자 형식으로 인식
    • 배열은 하이픈과 공백(“- “)을 앞에 붙여서 나열
    • 하위 객체는 아래 행에 추가 들여쓰기로 하위 구조 표현
  • YAML은 De Facto 표준으로 IT시스템 인프라 및 애플리케이션의 환경 설정에 다수 사용

 

4. 대용량 데이터 구조화, CSV

  • CSV: Comma-Separated Values

(1) CSV의 개념 및 특징

개념 특징
일부 규칙과 줄바꿈, 쉼표(,)를 사용하여 표 형태(Tabular)의 대용량 데이터를 구조화하는 데이터 교환 형식 – 첫 행에 헤더, 둘째 행부터 데이터
– 각종 스프레드시트 프로그램과 호환
– 표(Table) 형태 2차원 평면 구조
– 스키마 없는 고속 대용량 처리

(2) CSV의 사례 기반 문법 및 구조

사례
name,age,isEmployee,skills,city,zipcode
홍길동,25,true,"Java, JavaScript",서울,12345
김철수,27,true,"C++, Python",대전,34567
문법
/구조
  • 첫 행(Row)은 헤더, 둘째 행(Row)부터 레코드로 인식
  • 레코드는 첫 행 헤더의 열 순서에 따라 쉼표로 구분하여 각각의 값를 인식
  • 데이터 타입 구분 없이 모두 텍스트로 처리되므로 필요 시 코드 내 변환 필요
  • 배열과 하위 객체는 기본적으로 표현 불가능
    • 여러 값 필요 시 쌍따옴표(“)로 감싸서 하나의 값으로 표현 필요
    • 하위 객체 처리 불가로 헤더 자체를 풀어서 일렬로 나열
      (city, zipcode 하위 객체 처리 불가)
  • CSV는 RFC 4180 규격 기반 대용량 표 형태 데이터의 일괄 저장 및 시스템 간 데이터 마이그레이션에 다수 사용

 

5. 각 데이터 교환 형식 비교

비교 항목 XML JSON YAML CSV
주요 문법 태그 중괄호 들여쓰기 쉼표
구조 형태 계층형 계층형 계층형 평면형
가독성 낮음 보통 높음 보통
오버헤드 높음 보통 낮음 낮음
파싱 속도 느림 빠름 보통 빠름
주석 지원 가능 불가 가능 불가
주 사용처 레거시 연동 웹 통신 환경설정 대용량
  • 과거 오래된 기관 연동 방식은 대부분 XML을 사용하고, 최근 웹/앱 데이터 교환 시 JSON을 사용, 인프라/APP 환경 설정은 YAML을 사용하고 표 형식의 대용량 데이터는 CSV를 주로 사용

 

[참고]

도리: