XML
eXtensible Markup Language
확장 가능한 마크업 언어. 데이터 교환 포맷. JSON에 밀림.
eXtensible Markup Language
확장 가능한 마크업 언어. 데이터 교환 포맷. JSON에 밀림.
XML(eXtensible Markup Language)은 데이터를 저장하고 전송하기 위한 마크업 언어입니다. 1998년 W3C에서 표준화되었으며, HTML과 달리 사용자가 직접 태그를 정의할 수 있어 "확장 가능"합니다.
XML은 자기 기술적(Self-descriptive)이라 태그명만 보고 데이터의 의미를 파악할 수 있습니다. 또한 플랫폼과 언어에 독립적이어서 시스템 간 데이터 교환에 오랫동안 사용되었습니다.
현재 웹 API에서는 JSON이 주로 사용되지만, XML은 SOAP, RSS, SVG, 설정 파일(pom.xml, AndroidManifest.xml) 등에서 여전히 활발히 사용됩니다.
기본 XML 문서
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1">
<name>홍길동</name>
<email>hong@example.com</email>
<roles>
<role>admin</role>
<role>editor</role>
</roles>
</user>
<user id="2">
<name>김철수</name>
<email>kim@example.com</email>
</user>
</users>
JavaScript에서 XML 파싱
// XML 문자열 파싱
const xmlString = `<book><title>JavaScript</title></book>`;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
// 데이터 접근
const title = xmlDoc.querySelector('title').textContent;
console.log(title); // "JavaScript"
// XPath로 검색
const result = xmlDoc.evaluate(
'//book/title',
xmlDoc,
null,
XPathResult.STRING_TYPE
);
console.log(result.stringValue);
XML vs JSON 비교
// XML (61 bytes)
<user>
<name>홍길동</name>
<age>30</age>
</user>
// JSON (35 bytes) - 더 간결
{
"name": "홍길동",
"age": 30
}
신입 개발자
"요즘은 다 JSON 쓰는데, XML은 왜 배워야 하나요?"
시니어
"레거시 시스템이나 SOAP API 연동할 때 필수야. 특히 금융권, 공공기관 API는 아직 XML 많이 써. Maven pom.xml이나 Android 레이아웃도 XML이고."
신입 개발자
"아, 그래서 설정 파일들이 XML인 거군요!"
Well-formed 규칙
XML은 대소문자 구분, 모든 태그 닫기 필수, 속성값 따옴표 필수 등 HTML보다 엄격합니다. 규칙 위반 시 파싱 오류가 발생합니다.
XXE 공격 주의
외부 엔티티를 통한 XXE(XML External Entity) 공격에 취약할 수 있습니다. 신뢰할 수 없는 XML 파싱 시 외부 엔티티 비활성화가 필요합니다.
용량과 파싱 성능
JSON 대비 태그로 인한 오버헤드가 큽니다. 대용량 데이터 전송 시 성능 영향을 고려해야 합니다.