데이터를 주고받을 때 어떤 방식으로 정보를 전달하나요? 개발자들 사이에서는 JSON이나 XML 같은 용어가 자주 등장하지만, 비전공자에게는 이것들이 그저 알 수 없는 약자로만 느껴질 수 있습니다. 이번 포스트에서는 데이터 교환 형식의 대표주자인 JSON과 XML에 대해 알아보고, 비슷한 다른 형식들도 함께 살펴보겠습니다. 🙂
1. 데이터 교환 형식이란?
컴퓨터와 프로그램 사이에서 정보를 주고받을 때는 양쪽이 모두 이해할 수 있는 ‘언어’가 필요합니다. 마치 다른 나라 사람들이 의사소통을 위해 공통된 언어를 사용하는 것처럼요. 데이터 교환 형식은 이런 ‘디지털 언어’의 일종으로, 다양한 시스템 간에 정보를 효율적으로 전달할 수 있게 해줍니다.
예를 들어, 여러분이 날씨 앱을 사용할 때 서버는 기온, 습도, 강수 확률 등의 정보를 여러분의 스마트폰으로 보내야 합니다. 이때 JSON이나 XML 같은 형식을 사용하면 두 시스템이 명확하게, 그리고 구조적으로 정보를 주고받을 수 있게 됩니다.
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에 비해 스키마 검증 기능이 제한적입니다.
- 복잡한 데이터 구조는 가독성이 떨어질 수 있습니다.
- 날짜 형식과 같은 특수 데이터 타입을 기본 지원하지 않습니다.
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()

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