데이터를 주고받을 때 어떤 방식으로 정보를 전달하나요? 개발자들 사이에서는 JSON이나 XML 같은 용어가 자주 등장하지만, 비전공자에게는 이것들이 그저 알 수 없는 약자로만 느껴질 수 있습니다. 이번 포스트에서는 데이터 교환 형식의 대표주자인 JSON과 XML에 대해 알아보고, 비슷한 다른 형식들도 함께 살펴보겠습니다. 🙂

 

1. 데이터 교환 형식이란?

컴퓨터와 프로그램 사이에서 정보를 주고받을 때는 양쪽이 모두 이해할 수 있는 ‘언어’가 필요합니다. 마치 다른 나라 사람들이 의사소통을 위해 공통된 언어를 사용하는 것처럼요. 데이터 교환 형식은 이런 ‘디지털 언어’의 일종으로, 다양한 시스템 간에 정보를 효율적으로 전달할 수 있게 해줍니다.

예를 들어, 여러분이 날씨 앱을 사용할 때 서버는 기온, 습도, 강수 확률 등의 정보를 여러분의 스마트폰으로 보내야 합니다. 이때 JSON이나 XML 같은 형식을 사용하면 두 시스템이 명확하게, 그리고 구조적으로 정보를 주고받을 수 있게 됩니다.

Data-exchange-format

 

2. XML – 확장성 있는 마크업 언어

XML(eXtensible Markup Language)은 1996년에 등장한 마크업 언어로, HTML과 비슷한 형태를 갖고 있습니다. ‘확장성 있는’이라는 단어가 붙은 이유는 사용자가 직접 태그를 정의하고 확장할 수 있기 때문입니다.

2.1 XML의 구조

XML은 태그와 속성을 사용해 데이터를 구조화합니다.

<?xml version="1.0" encoding="UTF-8"?>
<도서관>
  <책 카테고리="소설">
    <제목>해리 포터</제목>
    <저자>J.K. 롤링</저자>
    <출판년도>1997</출판년도>
    <가격 통화="원">15000</가격>
  </책>
  <책 카테고리="프로그래밍">
    <제목>자바의 정석</제목>
    <저자>남궁성</저자>
    <출판년도>2016</출판년도>
    <가격 통화="원">30000</가격>
  </책>
</도서관>

이 예시에서 <도서관>, <책>, <제목> 등은 태그이며, 카테고리="소설", 통화="원"과 같은 것들은 속성입니다. XML은 계층적인 구조를 가지고 있어 복잡한 데이터도 명확하게 표현할 수 있습니다.

2.2 XML의 장점과 단점

장점:

  • 사람과 기계 모두 읽기 쉽습니다.
  • 계층적 데이터 구조를 표현하기에 적합합니다.
  • 유연성이 높아 다양한 데이터를 표현할 수 있습니다.
  • 스키마(XSD)를 통해 데이터 검증이 가능합니다.
  • 국제 표준이며 오랜 시간 사용된 검증된 기술입니다.

단점:

  • 태그가 중복되어 데이터 크기가 커질 수 있습니다.
  • 파싱(해석)하는 과정이 복잡할 수 있습니다.
  • JSON에 비해 가독성이 떨어질 수 있습니다.
  • 모바일 환경과 같은 제한된 자원에서는 부담이 될 수 있습니다.

 

3. JSON – 자바스크립트 객체 표기법

JSON(JavaScript Object Notation)은 2000년대 초반에 개발된 경량 데이터 교환 형식으로, 자바스크립트의 객체 리터럴 문법에서 파생되었습니다. 웹 개발에서 XML을 대체하는 형식으로 널리 사용되고 있습니다.

3.1 JSON의 구조

JSON은 키-값 쌍의 집합으로 구성됩니다.

{
  "도서관": {
    "책": [
      {
        "카테고리": "소설",
        "제목": "해리 포터",
        "저자": "J.K. 롤링",
        "출판년도": 1997,
        "가격": {
          "금액": 15000,
          "통화": "원"
        }
      },
      {
        "카테고리": "프로그래밍",
        "제목": "자바의 정석",
        "저자": "남궁성",
        "출판년도": 2016,
        "가격": {
          "금액": 30000,
          "통화": "원"
        }
      }
    ]
  }
}

JSON에서는 객체는 중괄호 {}로, 배열은 대괄호 []로 표현합니다. 문자열은 반드시 쌍따옴표 ""로 감싸야 합니다.

3.2 JSON의 장점과 단점

장점:

  • XML보다 간결하고 가벼워 전송 속도가 빠릅니다.
  • 자바스크립트와 완벽하게 호환됩니다.
  • 구조가 단순해 파싱이 용이합니다.
  • 대부분의 프로그래밍 언어에서 지원합니다.
  • 웹 API에서 표준으로 사용됩니다.

단점:

  • 주석을 지원하지 않습니다.
  • XML에 비해 스키마 검증 기능이 제한적입니다.
  • 복잡한 데이터 구조는 가독성이 떨어질 수 있습니다.
  • 날짜 형식과 같은 특수 데이터 타입을 기본 지원하지 않습니다.

xml-json-structure

 

4. YAML – 사람이 읽기 쉬운 데이터 직렬화 표준

YAML(YAML Ain’t Markup Language)은 2001년에 등장한 데이터 직렬화 형식으로, 기존의 XML과 JSON보다 더 읽기 쉽게 설계되었습니다. 특히 환경설정 파일이나 구성 파일에 많이 사용됩니다.

4.1 YAML의 구조

YAML은 들여쓰기를 사용해 계층 구조를 표현하며, 특수 기호를 최소화했습니다.

도서관:
  책:
    - 카테고리: 소설
      제목: 해리 포터
      저자: J.K. 롤링
      출판년도: 1997
      가격:
        금액: 15000
        통화: 원
    - 카테고리: 프로그래밍
      제목: 자바의 정석
      저자: 남궁성
      출판년도: 2016
      가격:
        금액: 30000
        통화: 원

YAML에서는 들여쓰기가 데이터 구조를 결정하는 중요한 요소입니다. 대시(-)는 배열의 요소를 나타내고, 콜론(:)은 키-값 쌍을 구분합니다.

4.2 YAML의 장점과 단점

장점:

  • 들여쓰기 기반으로 가독성이 매우 높습니다.
  • 주석을 지원합니다.
  • 복잡한 데이터 구조도 간결하게 표현할 수 있습니다.
  • 참조와 앵커를 통해 중복을 줄일 수 있습니다.
  • JSON의 상위집합으로, JSON 문법도 모두 지원합니다.

단점:

  • 들여쓰기 오류가 발생하기 쉽습니다.
  • 파싱 속도가 JSON보다 느릴 수 있습니다.
  • 일부 언어나 환경에서는 지원이 제한적일 수 있습니다.
  • 복잡한 문서에서는 들여쓰기가 가독성을 오히려 해칠 수 있습니다.

 

5. CSV – 콤마로 구분된 값

CSV(Comma-Separated Values)는 가장 단순한 형태의 데이터 교환 형식 중 하나로, 표 형태의 데이터를 저장하는 데 사용됩니다. 특히 스프레드시트 프로그램(엑셀 등)과의 호환성이 좋아 널리 사용됩니다.

5.1 CSV의 구조

CSV는 콤마(,)로 구분된 텍스트 파일입니다.

제목,저자,출판년도,가격,통화
해리 포터,J.K. 롤링,1997,15000,원
자바의 정석,남궁성,2016,30000,원

첫 번째 줄은 보통 열 이름을 나타내고, 이후 각 줄은 하나의 데이터 레코드를 나타냅니다. 쉼표로 값을 구분하며, 필요에 따라 값을 따옴표로 감쌀 수도 있습니다.

5.2 CSV의 장점과 단점

장점:

  • 매우 단순하고 직관적인 구조입니다.
  • 거의 모든 프로그램에서 지원합니다.
  • 파일 크기가 작아 처리 속도가 빠릅니다.
  • 스프레드시트 프로그램과 호환성이 좋습니다.
  • 사람이 직접 편집하기 쉽습니다.

단점:

  • 계층적 데이터 구조를 표현할 수 없습니다.
  • 데이터 타입을 명시적으로 지정할 수 없습니다.
  • 복잡한 데이터에는 적합하지 않습니다.
  • 쉼표가 포함된 데이터를 처리할 때 주의가 필요합니다.
  • 표준이 엄격하지 않아 호환성 문제가 발생할 수 있습니다.

 

6. 데이터 형식 비교

각 데이터 형식의 특징을 한눈에 비교해보겠습니다.

각 데이터 형식 비교테이블

특성XMLJSONYAMLCSV
구조태그 기반 계층 구조키-값 쌍, 객체와 배열들여쓰기 기반 계층 구조테이블 형식, 행과 열
가독성중간중간높음단순한 데이터에 한해 높음
크기중간중간작음
처리 속도느림빠름중간매우 빠름
복잡한 데이터지원지원지원제한적 지원
스키마 검증강력함(XSD)지원(JSON Schema)제한적 지원지원 안 함
주석지원지원 안 함지원지원 안 함
주요 용도구성 파일, 문서API 통신, 웹구성 파일, DevOps데이터 분석, 스프레드시트
언어 지원광범위광범위중간광범위

 

7. 어떤 데이터 형식을 선택해야 할까?

데이터 형식을 선택할 때는 다음과 같은 상황을 고려해보세요:

7.1 XML이 적합한 경우

  • 문서 중심의 데이터를 다룰 때
  • 스키마 검증이 중요할 때
  • 레거시 시스템과의 호환성이 필요할 때
  • 복잡한 데이터 구조를 정확히 표현해야 할 때
  • SOAP 웹 서비스와 통신할 때

7.2 JSON이 적합한 경우

  • 웹 API를 구현할 때
  • 자바스크립트 애플리케이션과 통신할 때
  • 간결하고 가벼운 데이터 교환이 필요할 때
  • REST 서비스를 구현할 때
  • 모바일 애플리케이션에서 데이터를 전송할 때

7.3 YAML이 적합한 경우

  • 사람이 직접 읽고 편집해야 하는 구성 파일
  • Docker, Kubernetes와 같은 DevOps 툴의 구성 파일
  • 복잡한 데이터를 가독성 높게 표현해야 할 때
  • 주석이 필요한 경우

7.4 CSV가 적합한 경우

  • 단순한 표 형태의 데이터를 다룰 때
  • 스프레드시트 프로그램과 데이터를 교환할 때
  • 대량의 데이터를 빠르게 처리해야 할 때
  • 데이터 분석, 보고서 작성에 활용할 때

 

8. 실제 활용 예시

8.1 웹 개발에서의 활용

웹 개발에서는 주로 JSON이 사용됩니다. 다음은 날씨 정보를 가져오는 API 응답의 예시입니다:

// 날씨 API 요청
fetch('https://api.weather.com/forecast?city=seoul')
  .then(response => response.json())
  .then(data => {
    console.log(`현재 온도: ${data.current.temperature}°C`);
    console.log(`날씨 상태: ${data.current.condition}`);
    
    // 데이터 활용하여 화면에 표시
    document.getElementById('temperature').textContent = 
      `${data.current.temperature}°C`;
  });

8.2 설정 파일로서의 활용

애플리케이션의 설정 파일로는 XML이나 YAML이 많이 사용됩니다. 다음은 Spring 프레임워크의 XML 설정 파일 예시입니다:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="user"/>
    <property name="password" value="password"/>
  </bean>
  
</beans>

8.3 데이터 분석에서의 활용

데이터 분석 분야에서는 CSV 파일이 널리 사용됩니다. 다음은 Python의 pandas 라이브러리를 사용해 CSV 파일을 분석하는 예시입니다:

import pandas as pd
import matplotlib.pyplot as plt

# CSV 파일 읽기
data = pd.read_csv('sales_data.csv')

# 데이터 분석
monthly_sales = data.groupby('month')['sales'].sum()

# 시각화
plt.figure(figsize=(10, 6))
monthly_sales.plot(kind='bar')
plt.title('월별 판매량')
plt.xlabel('월')
plt.ylabel('판매량(백만원)')
plt.show()
format-decision-tree
[의사결정 트리] 어떤 데이터 형식을 선택하는게 좋을까?

9. 데이터 형식 다루기 위한 도구

각 데이터 형식을 효율적으로 다루기 위한 도구들도 다양하게 있습니다.

9.1 XML 다루기 위한 도구

  • 파서(Parser): DOM, SAX, StAX 등
  • 검증 도구: XMLValidator, XSD Validator
  • 변환 도구: XSLT, XQuery
  • 편집기: XMLSpy, Oxygen XML Editor
  • 프로그래밍 라이브러리: JAXB(Java), lxml(Python), System.Xml(C#)

9.2 JSON 다루기 위한 도구

  • 파서: JSON.parse, JSON.stringify(JavaScript)
  • 편집기: Visual Studio Code(+JSON 확장), JSONBuddy
  • 검증 도구: JSONLint, JSON Schema Validator
  • 프로그래밍 라이브러리: Jackson(Java), json 모듈(Python), Newtonsoft.Json(C#)
  • 쿼리 도구: JSONPath, JQ

9.3 YAML 다루기 위한 도구

  • 파서: js-yaml(JavaScript), PyYAML(Python)
  • 편집기: Visual Studio Code(+YAML 확장), YAML Lint
  • 변환 도구: YAML to JSON Converter
  • 검증 도구: YAML Validator
  • 프로그래밍 라이브러리: SnakeYAML(Java), yaml 모듈(Python)

9.4 CSV 다루기 위한 도구

  • 편집기: Microsoft Excel, Google Sheets, LibreOffice Calc
  • 프로그래밍 라이브러리: Apache Commons CSV(Java), pandas(Python), csv 모듈(Python)
  • 데이터 분석 도구: R, Python pandas, KNIME
  • 변환 도구: CSV to JSON/XML converter
  • 데이터베이스 도구: CSV import/export 기능

 

10. 마무리하며: 상황에 맞는 데이터 형식 선택하기

지금까지 다양한 데이터 교환 형식에 대해 알아보았습니다. 이들은 모두 각자의 장점과 단점을 가지고 있으며, 사용 목적과 환경에 따라 적절한 형식을 선택하는 것이 중요합니다.

  • XML은 엄격한 구조와 검증이 필요한 엔터프라이즈 환경에서 여전히 중요한 역할을 합니다.
  • JSON은 웹 개발과 API 통신에서 표준으로 자리 잡았습니다.
  • YAML은 구성 파일과 DevOps 도구에서 인기를 얻고 있습니다.
  • CSV는 단순한 데이터 교환과 분석에 효과적입니다.

여러분의 프로젝트에서는 어떤 데이터 형식이 가장 적합할까요? 데이터의 복잡성, 사용 환경, 성능 요구사항 등을 종합적으로 고려하여 최적의 선택을 할 수 있습니다. 데이터 교환 형식에 대한 이해는 개발자뿐만 아니라 현대 디지털 환경에서 정보를 다루는 모든 사람에게 도움이 될 것입니다. 이 포스트가 여러분이 다양한 데이터 형식을 이해하고 활용하는 데 도움이 되었기를 바랍니다. 🙂

 

댓글 남기기