데이터 교환 형식의 필요성
- 서로 다른 환경의 시스템들이 데이터를 온전히 주고받으려면, 메모리 속 객체를 전송 가능한 형태로 변환하는 직렬화(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> |
|---|---|
| 문법 /구조 |
|
- XML은 W3C 표준 기반 공공데이터 연동, 엔터프라이즈 레거시 시스템, 전자문서 교환에 다수 사용
2. 키-쌍 기반 경량 데이터 교환, JSON
- JSON: JavaScript Object Notation
(1) JSON의 개념 및 특징
| 개념 | 특징 |
|---|---|
| 데이터를 키-값 쌍으로 표현하는 가볍고 읽기 쉬운 표준 텍스트 기반 데이터 교환 형식 | – 텍스트 기반: 사람이 읽기 쉬움 – 독립적 형식: 언어에 종속 안 됨 – 키-값 구조: 데이터 검색 용이 – 가벼운 용량: 고속 데이터 전송 |
(2) JSON의 사례 기반 문법 및 구조
| 사례 | {
"name": "홍길동",
"age": 25,
"isEmployee": true,
"skills": ["Java", "JavaScript"],
"address": {
"city": "서울",
"zipcode": "12345"
}
} |
|---|---|
| 문법 /구조 |
|
- 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" |
|---|---|
| 문법 /구조 |
|
- 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 |
|---|---|
| 문법 /구조 |
|
- CSV는 RFC 4180 규격 기반 대용량 표 형태 데이터의 일괄 저장 및 시스템 간 데이터 마이그레이션에 다수 사용
5. 각 데이터 교환 형식 비교
| 비교 항목 | XML | JSON | YAML | CSV |
|---|---|---|---|---|
| 주요 문법 | 태그 | 중괄호 | 들여쓰기 | 쉼표 |
| 구조 형태 | 계층형 | 계층형 | 계층형 | 평면형 |
| 가독성 | 낮음 | 보통 | 높음 | 보통 |
| 오버헤드 | 높음 | 보통 | 낮음 | 낮음 |
| 파싱 속도 | 느림 | 빠름 | 보통 | 빠름 |
| 주석 지원 | 가능 | 불가 | 가능 | 불가 |
| 주 사용처 | 레거시 연동 | 웹 통신 | 환경설정 | 대용량 |
- 과거 오래된 기관 연동 방식은 대부분 XML을 사용하고, 최근 웹/앱 데이터 교환 시 JSON을 사용, 인프라/APP 환경 설정은 YAML을 사용하고 표 형식의 대용량 데이터는 CSV를 주로 사용
[참고]
- Ecma International, ECMA-404(The JSON data interchange syntax), 2017.12
- W3C, Extensible Markup Language (XML) 1.0 (Fifth Edition), 2008.11
- YAML.org, YAML Ain’t Markup Language (YAML™) version 1.2, 2021.10
- IETF, RFC 4180 – Common Format and MIME Type for CSV Files, 2005.10