XML 구조적 데이터 교환과 검증 방식

XML의 계층형 데이터 구조, XSD와 JSON Schema의 차이, XPath·XSLT, DOM·SAX·StAX 파싱 방식을 정리합니다.

2026-08-14 · 최초 발행 2025-10-14

태그로 데이터의 의미까지 표현하는 형식

XML(eXtensible Markup Language)은 데이터의 구조와 의미를 태그로 기술하는 범용 마크업 언어다. 텍스트 기반이므로 운영체제나 하드웨어에 묶이지 않으며, 서로 다른 플랫폼과 애플리케이션 사이에서 데이터를 교환하는 형식으로 사용할 수 있다.

사용자가 필요한 태그와 속성을 정의할 수 있다는 점도 XML의 특징이다. 문서 저장·전송, 구성 데이터 관리, 이기종 시스템 연동처럼 데이터의 형태를 명확히 합의해야 하는 곳에서 활용된다. 데이터 안에 구조와 의미가 함께 들어 있으므로 파싱과 해석의 기준도 문서 자체에 남는다.

문서를 이루는 계층과 데이터

XML 문서PrologRoot ElementChild ElementsAttributesText/Data

XML 문서는 선언부인 Prolog, 하나의 최상위 Root Element, 그 아래의 Child Elements로 계층을 만든다. Root Element에는 부가 정보를 나타내는 Attributes를 둘 수 있고, 하위 요소에는 실제 Text/Data가 들어간다.

  • Prolog: XML 선언부(<?xml version="1.0" encoding="UTF-8"?>)
  • Root Element: XML 문서 내 하나만 존재하는 최상위 요소
  • Child Elements: 계층적으로 구성된 하위 요소
  • Attributes: 요소에 부가 정보를 제공하는 속성
  • Text/Data: 실제 데이터 값

XSD와 JSON Schema가 맞는 환경

비교 항목 XML Schema (XSD) JSON Schema
데이터 포맷 XML JSON
구조 정의 방식 태그 및 속성을 통한 계층 구조 정의 Key-Value 기반 구조 정의
타입 지정 정수, 문자열, 날짜, 사용자 정의 타입 지원 기본 자료형(string, number, boolean, array, object)
확장성 네임스페이스와 복합 타입 지원 표준 구조 기반 확장성 확보
검증 도구 XSD Validator, XML Parser JSON Schema Validator, AJV 등
사용 사례 금융, 공공기관 데이터 표준, 문서 기반 데이터 REST API, Web App Config, 경량 데이터 전송
가독성 태그 기반, 비교적 장황함 Key-Value 구조로 간결함
학습 난이도 비교적 높음 상대적으로 낮음

XSD는 복잡한 계층형 구조를 정의하고 엄격하게 검증해야 하는 금융·공공 환경에 적합하다. 반면 JSON Schema는 경량 API 통신과 웹 애플리케이션 환경에서 사용하기 좋다.

XPath로 고르고 XSLT로 변환하기

노드 선택XML 문서XPath 처리XSLT 변환변환된 XML/HTML/텍스트출력

XPath는 XML 문서에서 특정 노드나 데이터를 선택하는 쿼리 언어다. XSLT는 선택한 데이터를 다른 XML, HTML, 텍스트 형식으로 바꾸는 스타일시트 언어다.

처리는 XML 문서를 로드한 뒤 XPath로 필요한 노드를 찾고, XSLT 스타일시트를 적용해 원하는 형식으로 변환하는 흐름으로 이뤄진다.

문서 크기와 접근 방식에 따른 파서 선택

구분 DOM(Document Object Model) SAX(Simple API for XML) StAX(Streaming API for XML)
처리방식 전체 문서를 메모리에 로드하여 트리 구성 이벤트 기반 순차 처리 이벤트 기반 + Pull 방식
장점 랜덤 접근 가능, 구조 이해 용이 메모리 효율성 높음 메모리 효율성 + 코드 단순성
단점 메모리 사용량 큼 구조 변경 불가, 복잡한 코드 상태 관리 필요
활용 문서 전체 분석, 편집 대규모 데이터 읽기 실시간 스트리밍 데이터 처리

DOM은 전체 문서를 트리로 구성하므로 구조를 살피거나 수정하기 쉽지만 메모리 사용량이 크다. SAX는 순차 이벤트 처리로 대규모 데이터를 읽는 데 적합하며, StAX는 이벤트 기반 처리에 Pull 방식을 더해 실시간 스트리밍 데이터를 다룰 때 사용할 수 있다.

Java에서 DOM으로 XML 읽기

import javax.xml.parsers.*;
import org.w3c.dom.*;

public class XMLDomExample {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("data.xml");

        NodeList list = doc.getElementsByTagName("item");
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            System.out.println("Name: " + element.getElementsByTagName("name").item(0).getTextContent());
        }
    }
}

Python ElementTree로 요소 순회하기

import xml.etree.ElementTree as ET

tree = ET.parse('data.xml')
root = tree.getroot()

for item in root.findall('item'):
    name = item.find('name').text
    print(f"Name: {name}")

표준화된 데이터 형식이 필요한 이유

XML을 사용하면 시스템 연동의 형식을 표준화해 개발 효율성을 높일 수 있다. 데이터 호환성을 확보하면 유지보수 비용을 줄이는 데도 도움이 되며, 문서와 데이터를 장기 보관할 기반을 마련할 수 있다. 이기종 시스템을 통합하는 과정에서도 안정적인 데이터 교환 형식으로 활용된다.

JSON이 등장한 뒤 XML은 경량 데이터 교환에서는 다소 밀렸지만, 표준화된 문서 구조 표현과 복잡한 계층형 데이터 처리에는 여전히 강점이 있다. 금융, 공공, 제조 산업에서는 XML 기반 데이터 표준이 계속 사용되며, XML Schema, XSLT, XPath와 함께 다뤄진다.

XML데이터 교환XML Schema데이터 표준