오래된 엔터프라이즈 API나 RSS 피드를 연동해 본 적이 있다면 XML을 만나보셨을 겁니다. 현대 웹에서 무언가를 만들어 본 적이 있다면 JSON과 함께 살고 계신 거죠. 두 포맷 모두 같은 핵심 문제 — 구조화된 데이터를 텍스트로 표현하는 것 — 를 해결하지만, 방식은 매우 다릅니다. 이 글에서 실질적인 차이점을 정리해 드립니다.
같은 데이터, 두 가지 포맷
구체적인 예제부터 시작해 보겠습니다. JSON으로 표현한 사용자 객체입니다:
{
"user": {
"id": 101,
"name": "Bob",
"email": "[email protected]",
"roles": ["admin", "editor"],
"active": true
}
}동일한 데이터를 XML로 표현하면 이렇게 됩니다:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>101</id>
<name>Bob</name>
<email>[email protected]</email>
<roles>
<role>admin</role>
<role>editor</role>
</roles>
<active>true</active>
</user>JSON 버전은 62자입니다. XML 버전은 198자 — 같은 데이터인데 3배나 더 큽니다. 작은 페이로드에서는 별 차이가 없습니다. 하지만 하루에 수백만 건의 요청을 처리하는 고트래픽 API라면 대역폭 비용이 빠르게 쌓입니다.
JSON이 앞서는 부분
- 간결함. 닫는 태그가 없습니다. 반복이 적고 페이로드가 작습니다.
- JavaScript 기본 지원.
JSON.parse()와JSON.stringify()는 모든 JS 런타임에 내장되어 있습니다. 외부 라이브러리가 필요 없습니다. - 단순함. 여섯 가지 데이터 타입과 몇 가지 규칙이 전부입니다. JSON 명세 전체를 10분 만에 읽을 수 있습니다.
- 배열 지원. JSON에는 네이티브 배열이 있습니다. XML에서는
<role><role><role>처럼 요소를 반복해야 합니다. - 툴링. PostgreSQL, MongoDB, MySQL 같은 현대 데이터베이스는 모두 JSON을 1급 시민으로 지원합니다. 대부분의 로깅 플랫폼도 JSON을 기본으로 파싱합니다.
- 가독성. 개발자들은 JSON이 더 읽기 쉽다고 느낍니다. 꺾쇠 괄호와 닫는 태그의 노이즈가 없습니다.
XML이 여전히 앞서는 부분
- 속성과 메타데이터. XML 요소는 속성을 가질 수 있습니다:
<user id="101" active="true">. 자식 요소를 추가하지 않고 데이터에 주석을 달아야 할 때 유용합니다. - 네임스페이스. XML 네임스페이스를 사용하면 하나의 문서에서 여러 어휘를 혼용할 수 있습니다 — XHTML, SVG, SOAP, Office Open XML 같은 포맷에서 필수적입니다.
- 스키마 검증. XML Schema(XSD)는 데이터 타입, 패턴, 카디널리티를 포함한 강력하고 표준화된 검증을 제공합니다. JSON Schema도 발전하고 있지만 XML Schema는 수십 년의 툴링 역사가 있습니다.
- 문서 중심 유스케이스. XML은 단순 데이터가 아닌 문서를 위해 설계되었습니다. XHTML, DocBook, DITA 같은 포맷은 XML 위에 구축되어 혼합 텍스트와 마크업 콘텐츠에 탁월합니다.
- XSLT 변환. XSLT를 사용해 XML을 HTML, 다른 XML, 또는 플레인 텍스트로 변환할 수 있습니다 — 퍼블리싱 파이프라인에 강력한 도구입니다.
- 주석. XML은 주석을 지원합니다. JSON은 그렇지 않습니다. 설정 파일에서 설정값이 존재하는 이유를 설명하고 싶을 때 중요합니다.
성능: 실제로 중요한가요?
대부분의 애플리케이션에서 JSON과 XML의 파싱 성능 차이는 무의미합니다. 고주파 데이터 피드, IoT 텔레메트리, 실시간 시스템처럼 성능이 중요한 곳에서는 JSON이 편안하게 앞섭니다. JSON 파서는 포맷 자체가 더 단순하기 때문에 더 빠르고 단순합니다. 간단한 벤치마크: Node.js에서 1MB JSON 파일을 파싱하면 일반적으로 10~30ms가 걸립니다. 동등한 XML은 SAX 파서 기준으로 2~5배 느리고, DOM 파서는 더 심합니다.
성능이 정말 중요하다면, 두 포맷 모두 이상적이지 않습니다 — Protocol Buffers나 MessagePack 같은 바이너리 포맷을 선택할 것입니다. 하지만 일반적인 웹 API 작업이라면 JSON의 성능은 충분히 적절합니다.
결정 가이드: 언제 무엇을 써야 할까
JSON을 사용하세요:
- REST 또는 GraphQL API를 구축할 때
- 설정이나 세팅을 저장할 때 (package.json, tsconfig.json 등)
- JavaScript, TypeScript, Python, Ruby, Go — 어떤 현대 언어든 사용할 때
- 현대적인 서드파티 API와 통신할 때
- MongoDB, Elasticsearch, 또는 PostgreSQL JSONB 컬럼에 문서를 저장할 때
XML을 사용하세요:
- 레거시 엔터프라이즈 시스템(SAP, Salesforce SOAP API 등)과 연동할 때
- 문서 포맷 작업 시: SVG, EPUB, Office Open XML(.docx, .xlsx)
- XSLT 변환을 사용하는 퍼블리싱 파이프라인
- RSS / Atom 피드
- 확립된 XML 표준이 있는 산업에서 데이터를 교환할 때 (헬스케어의 HL7, 금융의 FpML 등)
두 포맷 모두 다루기
때로는 두 포맷 사이를 변환해야 할 때가 있습니다. XML 레거시 API를 소비하면서 데이터를 JSON으로 저장하거나, JSON 네이티브 백엔드에서 XML 기반 서비스로 데이터를 보내야 할 때처럼요. 이런 변환을 처리하려면 XML to JSON 변환기나 JSON to XML 변환기를 사용하세요. XML 응답을 검사하려면 XML 포매터와 XML 검증기가 유용합니다.
마무리
JSON과 XML은 같은 문제를 해결하지만 서로 다른 맥락에서 활용됩니다. JSON은 대부분의 현대 개발에서 올바른 선택입니다 — 더 단순하고, 더 작으며, 모든 언어에서 더 나은 네이티브 지원을 제공합니다. XML은 문서 중심 및 네임스페이스 인식 유스케이스에서 진정한 고유 강점을 가지고 있습니다. 좋은 소식은 독단적으로 접근할 필요가 없다는 점입니다 — 두 포맷 모두 성숙하고 잘 지원되며 오랫동안 공존할 것입니다. 트레이드오프를 이해하고 작업에 맞는 도구를 선택하세요.