새 프로젝트를 시작하는 개발자들에게서 가장 많이 받는 질문이 바로 이겁니다: "JSON을 써야 할까, XML을 써야 할까?" 솔직한 답은... 상황에 따라 다릅니다. 하지만 이 글을 읽고 나면 언제 어떤 것을 선택해야 하는지 정확히 알게 될 겁니다.
구문을 비교해 봅시다
차이를 이해하는 가장 쉬운 방법은 같은 데이터를 두 형식으로 보는 것입니다. 간단한 사용자를 표현해 봅시다:
JSON:
XML:
JSON이 약 40% 더 작다는 걸 눈치채셨나요? 닫는 태그도 없고, 꺾쇠괄호 범벅도 없습니다. 초당 수천 개의 API 응답을 보낼 때 이 차이는 빠르게 쌓입니다.
성능 이야기
JSON이 일반적으로 속도에서 이깁니다. 대부분의 벤치마크에서 JSON 파싱이 XML 파싱보다 2-10배 빠른 것으로 나타납니다. 데이터와 사용하는 라이브러리에 따라 다르지만요. 이유는? JSON은 처리할 기능이 적어서 파서가 더 단순하고 빠를 수 있습니다.
그렇긴 하지만 XML은 정말 큰 파일에 대해 비장의 무기가 있습니다. SAX 파서는 전체 문서를 메모리에 로드하지 않고도 XML을 스트리밍할 수 있습니다. 2GB XML 피드를 처리한다면, 이건 정말 중요합니다.
데이터 타입: 여기서 흥미로워집니다
JSON에는 네이티브 타입이 있습니다: 문자열, 숫자, 불리언, null, 객체, 배열. {"count": 42}를 파싱하면 실제 숫자를 얻습니다 — 변환해야 하는 문자열이 아닙니다.
XML은 모든 것을 텍스트로 취급합니다. 42의 42는 명시적으로 변환할 때까지 그냥 문자열입니다. 타입을 강제하려면 XML Schema (XSD) 정의가 필요한데, 이는 복잡성을 더합니다.
실제 차이를 보여주는 예시입니다. JavaScript에서:
JSON이 맞는 선택일 때
- REST API — 더 이상 논쟁의 여지가 없습니다. OpenAPI 사양(이전 Swagger)은 기본적으로 JSON을 사용합니다.
- 설정 파일 —
package.json,tsconfig.json,.eslintrc.json. Node.js 생태계는 JSON으로 돌아갑니다. - 모바일 앱 — 페이로드가 작을수록 = 셀룰러 연결에서 로딩이 빨라집니다. 사용자들이 감사해할 겁니다.
- 실시간 앱 — WebSocket 메시지, Server-Sent Events, GraphQL 응답 — 모두 일반적으로 JSON.
XML이 더 나은 선택일 때
- 문서 중심 데이터 — 책, 기사, 법률 문서를 생각해 보세요. XML은 혼합 콘텐츠(텍스트 + 마크업)를 아름답게 처리합니다.
- SOAP 웹 서비스 — 은행과 의료 분야의 엔터프라이즈 시스템은 SOAP에 크게 의존합니다.
- 강력한 유효성 검사 필요 — XML Schema는 복잡한 유효성 검사 규칙에서 JSON Schema보다 강력합니다.
- XSLT 변환 — 데이터를 HTML, PDF 또는 다른 형식으로 변환해야 하나요? XSLT는 이를 위해 놀랍도록 강력합니다.
- 레거시 통합 — 많은 엔터프라이즈 시스템이 XML을 사용하며, 리팩토링이 항상 가능한 것은 아닙니다.
결론
대부분의 새 웹 프로젝트에는 JSON을 선택하세요. 더 간단하고, 빠르며, 보편적으로 지원됩니다. 하지만 XML을 무시하지 마세요 — 문서 처리, 엔터프라이즈 통합, 그리고 견고한 스키마 유효성 검사가 필요한 시나리오에서는 진정으로 우수합니다. 많은 팀이 둘 다 사용합니다: API에는 JSON, 문서 처리에는 XML.
둘 사이의 변환이 필요하신가요? 우리의 JSON to XML 변환기가 몇 초 만에 처리합니다.
두 형식의 간략한 역사
XML이 먼저 등장했으며, 1998년 W3C에 의해 표준화되었습니다. HTML 뒤의 마크업 언어인 SGML의 간소화된 버전으로 설계되었습니다. 거의 10년 동안 XML은 웹을 지배했습니다 — SOAP API, RSS 피드, XHTML, SVG, 심지어 Microsoft Office 파일 형식(.docx는 XML로 가득 찬 zip 파일일 뿐입니다)까지 모두 XML에 의존했습니다.
JSON은 2001-2002년경에 등장했으며 Douglas Crockford가 주도했습니다. 이 형식의 공식 사양은 놀랍도록 짧아서 단 한 페이지에 불과합니다. AJAX(Asynchronous JavaScript and XML — 아이러니하게도 대부분의 경우 XML 대신 JSON을 사용하게 되었습니다)의 물결을 탔습니다. 2010년대 초반까지 JSON은 웹 API 사용에서 XML을 추월했고, 그 이후로 뒤돌아보지 않았습니다.
실제 비교: 제품 카탈로그
더 복잡한 예시를 살펴봅시다. 두 형식 모두에서 중첩된 데이터를 가진 제품입니다:
JSON:
XML:
흥미로운 점을 발견하셨나요? XML에는 속성이 있습니다(태그 자체의 id="PRD-001"이나 currency="USD" 같은 것). JSON에는 속성 개념이 없습니다 — 모든 것이 키-값 쌍입니다. XML 속성은 메타데이터에 매우 편리할 수 있지만, 파싱 시 복잡성의 층을 추가하기도 합니다.
형식 간 변환 시 흔한 실수
XML에서 JSON으로(또는 반대로) 마이그레이션할 때, 이런 함정을 조심하세요:
1. XML 속성 손실. 29.99를 JSON으로 변환할 때, 많은 단순한 변환기는 {"price": "29.99"}만 생성하고 통화 속성을 완전히 잃어버립니다. 좋은 변환기는 {"price": {"_value": "29.99", "_currency": "USD"}} 같은 관례를 사용합니다.
2. 배열 모호성. XML에서 자식 요소가 하나만 있으면, JSON 값으로 매핑해야 할지 단일 요소 배열로 매핑해야 할지 불명확합니다. 나중에 두 번째 을 추가하면 구조가 변합니다. JSON은 명시적입니다: [item]은 항상 배열입니다.
3. 타입 손실. XML에는 네이티브 타입이 없으므로, 42를 변환하면 {"count": 42}(숫자) 대신 {"count": "42"}(문자열)이 될 수 있습니다. 스마트한 변환기는 타입 추론을 시도하지만, 항상 신뢰할 수 있는 것은 아닙니다.
기능별 비교
| Feature | JSON | XML |
| 사람의 가독성 | 우수 | 양호 |
| 파일 크기 | 작음 (~40% 적음) | 큼 (장황한 태그) |
| 파싱 속도 | 빠름 (2-10배) | 느림 |
| 네이티브 데이터 타입 | 있음 (6가지) | 없음 (텍스트만) |
| 주석 | 미지원 | 지원 () |
| 스키마 유효성 검사 | JSON Schema | XSD, DTD, RelaxNG |
| 네임스페이스 | 미지원 | 지원 |
| 속성 | 미지원 | 지원 |
| 혼합 콘텐츠 | 불가능 | 우수 |
| 스트리밍 파서 | 제한적 | SAX, StAX |
| 변환 | 제한적 | XSLT, XPath, XQuery |
둘 다 함께 사용할 때
많은 실제 시스템은 하나의 형식만 독점적으로 사용하지 않습니다. 일반적인 하이브리드 접근 방식은 다음과 같습니다:
- API 게이트웨이 패턴: 공개 REST API는 JSON을 사용하지만, 내부적으로 서비스는 레거시 XML 기반 시스템과 통신합니다. 게이트웨이가 변환을 처리합니다.
- 데이터 파이프라인: XML 피드(RSS, ATOM, 또는 의료 분야의 HL7 같은 산업별 형식)를 수집하고, 애플리케이션 계층용으로 JSON으로 변환 및 저장합니다.
- 문서 생성: 데이터베이스에 구조화된 데이터를 JSON으로 저장하지만, XSLT를 통해 PDF, DOCX 파일 또는 기타 문서 형식을 생성해야 할 때 XML을 생성합니다.
파싱 성능: 실제 수치
접근 방식의 차이를 보여주는 실용적인 JavaScript 예시입니다:
JSON 버전은 코드가 짧을 뿐만 아니라, JSON.parse()는 모든 브라우저 엔진에서 네이티브 C++로 구현되어 있어 극도로 빠릅니다. XML 파싱은 요소, 속성, 텍스트 노드, 네임스페이스를 가진 전체 DOM 트리를 구축해야 합니다 — 내부적으로 훨씬 더 많은 작업이 필요합니다.
직접 해보세요
두 형식으로 작업할 준비가 되셨나요? 여러분의 작업을 더 쉽게 만들어줄 도구들입니다:
- JSON Formatter — JSON 데이터를 포맷하고 보기 좋게 만듭니다.
- XML Formatter — 지저분한 XML을 올바른 들여쓰기로 정리합니다.
- JSON to XML Converter — 속성과 배열의 스마트한 처리와 함께 형식 간 즉시 전환합니다.
어떤 형식을 선택하든, 가장 중요한 것은 프로젝트 내의 일관성입니다. 사용 사례에 가장 잘 맞는 형식을 선택하고, 결정을 문서화하고, 그것을 지키세요.