데이터를 주고받을 때 어떤 방식으로 정보를 전달하나요? 개발자들 사이에서는 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. 데이터 형식 비교

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

각 데이터 형식 비교테이블

특성 XML JSON YAML CSV
구조 태그 기반 계층 구조 키-값 쌍, 객체와 배열 들여쓰기 기반 계층 구조 테이블 형식, 행과 열
가독성 중간 중간 높음 단순한 데이터에 한해 높음
크기 중간 중간 작음
처리 속도 느림 빠름 중간 매우 빠름
복잡한 데이터 지원 지원 지원 제한적 지원
스키마 검증 강력함(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는 단순한 데이터 교환과 분석에 효과적입니다.

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

 

댓글 남기기