Unisquads
로그인
홈
이용약관·개인정보처리방침·콘텐츠정책·© 2026 Unisquads
이용약관·개인정보처리방침·콘텐츠정책
© 2026 Unisquads. All rights reserved.

XML (r1)

이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.14 23:09

XML

이름

XML

전체 명칭

Extensible Markup Language

분류

마크업 언어

표준

W3C 권고안

기반 언어

SGML

주요 용도

데이터 저장, 교환, 구성

파일 확장자

.xml

상세 정보

개발

W3C XML 워킹 그룹

초판 발표

1998년

최신 버전

XML 1.1 (2판)

관련 표준

DTD, XML 스키마, XSLT, XPath, XQuery

주요 특징

확장성, 자기 기술성, 계층적 구조, 플랫폼 독립성

응용 분야

웹 서비스(SOAP, REST), 문서 형식(오피스 오픈 XML, ODF), 설정 파일, RSS, Atom

장점

가독성, 유연성, 다양한 도구 지원, 표준화된 검색 및 변환

단점

상대적으로 장황함, 파싱 오버헤드, 대용량 데이터 처리 시 비효율적

대체 또는 경쟁 기술

JSON, YAML, 프로토콜 버퍼

1. 개요

XML(Extensible Markupup Language)은 W3C가 개발한, 데이터를 저장하고 전송하기 위한 마크업 언어 표준이다. SGML의 단순화된 부분집합으로 설계되었으며, 주로 다른 시스템 간의 구조화된 데이터 교환을 목적으로 한다. 사용자가 직접 태그를 정의할 수 있어 특정 분야나 응용 프로그램에 맞는 데이터 형식을 유연하게 기술하는 것이 가능하다.

XML 문서의 기본 구성 요소는 요소와 속성이다. 요소는 시작 태그와 종료 태그로 내용을 감싸며, 속성은 요소에 대한 추가 정보를 이름-값 쌍으로 제공한다. 이러한 구조는 문서를 계층적인 트리 형태로 구성하게 하여, 데이터 간의 관계를 명확하게 표현한다. 모든 XML 문서는 정형화된 문법 규칙을 따라야 하며, 이를 준수하는 문서는 "잘 구성된(well-formed)" 문서로 간주된다.

XML은 플랫폼과 프로그램에 독립적이라는 점이 가장 큰 특징이다. 이는 다양한 시스템 환경에서도 동일한 데이터를 해석하고 처리할 수 있음을 의미한다. 또한, DTD나 XML 스키마를 통해 문서 구조를 정의하고 유효성을 검증할 수 있어, 데이터의 정확성과 무결성을 보장하는 데 기여한다.

초기에는 HTML과 함께 웹의 핵심 기술로 주목받았으나, 현재는 웹 서비스, 설정 파일, 오피스 문서 형식, 과학 데이터 교환 등 다양한 분야에서 데이터 표현의 중추적 역할을 하고 있다. 특히 SOAP 프로토콜과 RSS, Atom 피드의 기반 형식으로 널리 사용된다.

2. 문법과 구조

XML 문서는 루트 요소로 시작하고 끝나는 계층적 트리 구조를 가집니다. 모든 XML 요소는 시작 태그와 종료 태그로 명시적으로 감싸야 하며, 태그 이름은 대소문자를 구분합니다. 요소는 다른 요소나 텍스트 내용을 포함할 수 있으며, 중첩 구조는 반드시 적절하게 닫혀야 합니다. 속성은 시작 태그 내에서 이름="값" 형태로 요소에 대한 추가 정보를 제공합니다.

문서의 구조와 유효성을 정의하기 위해 DTD나 XML 스키마를 사용합니다. DTD는 간단한 구문으로 요소와 속성의 타입, 순서, 발생 횟수를 정의하는 방법입니다. 반면, XML 스키마(XSD)는 XML 문법 자체로 작성되며, 더 풍부한 데이터 타입 정의와 네임스페이스 지원이 가능합니다.

서로 다른 XML 어휘가 혼합될 때 발생하는 이름 충돌을 방지하기 위해 XML 네임스페이스가 사용됩니다. 네임스페이스는 접두사와 URI를 통해 요소와 속성의 소속을 구분하며, 문서의 모듈화와 재사용을 가능하게 합니다.

개념

설명

예시

요소

시작 태그와 종료 태그로 둘러싸인 기본 구성 단위

<title>제목</title>

속성

요소의 시작 태그 내에 위치하는 이름-값 쌍

<book id="123">

DTD

문서 타입 정의. 구조를 선언적 방식으로 정의

<!ELEMENT book (title, author)>

XML 스키마

XML 기반의 강력한 스키마 정의 언어

<xs:element name="title" type="xs:string"/>

네임스페이스

요소와 속성의 이름 충돌을 해결하기 위한 메커니즘

xmlns:atom="http://www.w3.org/2005/Atom"

2.1. 요소와 속성

XML 문서의 기본 구성 단위는 요소와 속성이다. 요소는 문서의 구조와 내용을 정의하고, 속성은 요소에 대한 추가 정보를 제공한다.

요소는 시작 태그와 종료 태그, 그리고 그 사이의 내용으로 구성된다. 시작 태그는 <요소이름> 형태이고, 종료 태그는 </요소이름> 형태이다. 태그 사이의 내용은 텍스트 데이터나 다른 요소가 될 수 있다. 내용이 없는 요소는 <빈요소/>와 같이 단일 태그로 표현할 수 있다[1]. 모든 XML 문서는 반드시 하나의 루트 요소를 가져야 하며, 다른 모든 요소는 이 루트 요소 내에 중첩되어야 한다.

속성은 시작 태그 내에서 이름="값"의 형태로 사용된다. 속성 값은 반드시 작은따옴표나 큰따옴표로 묶어야 한다. 하나의 요소는 여러 개의 속성을 가질 수 있지만, 동일한 이름의 속성을 두 번 이상 정의할 수는 없다. 속성은 주로 요소의 메타데이터나 요소의 특성을 설명하는 데 사용된다. 예를 들어, <책 ISBN="12345">에서 ISBN은 속성 이름이고 "12345"는 속성 값이다.

구성 요소

설명

예시

요소

문서의 구조와 내용을 정의하는 기본 단위. 시작 태그, 내용, 종료 태그로 구성됨.

<저자>홍길동</저자>

속성

요소에 대한 추가 정보나 특성을 제공. 시작 태그 내에 이름/값 쌍으로 정의됨.

<책 언어="ko">에서 언어="ko"

빈 요소

내용이 없는 요소. 단일 태그로 표현 가능함.

<이미지 src="photo.jpg"/>

요소와 속성의 사용은 어느 정도 선택의 여지가 있다. 같은 정보를 요소의 내용으로 표현할 수도 있고, 속성으로 표현할 수도 있다. 일반적으로 데이터 자체는 요소로, 데이터에 대한 설명이나 메타데이터는 속성으로 정의하는 것이 관례이다.

2.2. DTD와 XML 스키마

DTD(Document Type Definition)는 XML 문서의 구조와 내용을 정의하는 가장 오래된 방법이다. DTD는 문서에 허용되는 요소, 속성, 그리고 그들 간의 계층 관계를 선언한다. DTD는 SGML에서 유래했으며, 비교적 간단한 문법을 가지고 있어 빠르게 문서 구조를 정의할 수 있다는 장점이 있다. 그러나 DTD는 자체적인 문법을 사용하며, 데이터 타입을 세밀하게 정의하는 데 한계가 있고, 네임스페이스를 지원하지 않는다는 단점이 있다.

이러한 DTD의 한계를 극복하기 위해 등장한 것이 XML 스키마(XML Schema, XSD)이다. XML 스키마는 XML 문서의 구조를 정의하는 데 사용되는 W3C 권고 표준으로, DTD보다 훨씬 풍부하고 강력한 기능을 제공한다. 가장 큰 차이점은 XML 스키마 자체가 XML 문법으로 작성된다는 점이다. 이로 인해 기존의 XML 도구들을 스키마 처리에도 활용할 수 있다.

XML 스키마는 DTD에 비해 다음과 같은 주요 이점을 제공한다.

  • 풍부한 데이터 타입 지원: 문자열, 숫자, 날짜, 시간 등 다양한 기본 데이터 타입과 사용자 정의 복합 타입을 지원한다.

  • 네임스페이스 지원: 명시적으로 네임스페이스를 사용하여 요소와 속성을 구분할 수 있다.

  • 세밀한 제약 조건 정의: 요소의 발생 횟수(최소, 최대), 값의 범위, 문자열 패턴(정규 표현식) 등을 정확히 정의할 수 있다.

다음은 DTD와 XML 스키마의 주요 차이점을 비교한 표이다.

비교 항목

DTD

XML 스키마 (XSD)

문법

고유한 비-XML 문법

XML 문법

데이터 타입

제한적 (주로 텍스트)

풍부한 기본 타입 및 사용자 정의 타입

네임스페이스

미지원

완전 지원

확장성

제한적

높음 (상속, 재정의 가능)

가독성/학습 곡선

비교적 간단

복잡하고 방대함

실무에서는 데이터 구조의 정확성과 유효성 검사가 중요한 복잡한 시스템, 특히 웹 서비스나 금융 데이터 교환과 같은 분야에서 XML 스키마가 널리 사용된다. 반면, 구조가 단순한 문서나 레거시 시스템에서는 여전히 DTD가 사용되기도 한다.

2.3. 네임스페이스

네임스페이스는 서로 다른 XML 어휘나 스키마에서 정의된 요소와 속성의 이름이 충돌하는 것을 방지하기 위한 메커니즘이다. 예를 들어, "title"이라는 요소가 한 문서 안에서 책의 제목과 직위를 동시에 나타내야 할 경우, 네임스페이스를 사용하여 각각을 구분할 수 있다. 이를 위해 URI(Uniform Resource Identifier)를 식별자로 사용하며, 주로 URL 형식이 채택된다. 네임스페이스 선언은 문서의 루트 요소나 특정 요소 내에서 xmlns 접두사를 사용하여 이루어진다.

네임스페이스는 접두사와 실제 네임스페이스 URI를 연결하여 사용한다. 기본 네임스페이스는 접두사 없이 선언할 수 있으며, 해당 범위 내의 모든 요소에 적용된다. 특정 접두사를 가진 네임스페이스는 요소나 속성 이름 앞에 콜론(:)과 함께 붙여 사용한다. 이를 통해 동일한 로컬 이름을 가진 요소라도 서로 다른 네임스페이스에 속하면 완전히 다른 것으로 인식된다.

네임스페이스 선언 예시

의미

xmlns="http://example.com/books"

기본 네임스페이스를 http://example.com/books로 설정한다.

xmlns:emp="http://example.org/employee"

emp 접두사를 http://example.org/employee URI에 연결한다.

<book:title xmlns:book="http://publisher.com/ns">

book 접두사를 특정 요소 범위 내에서 선언한다.

네임스페이스는 XML 스키마, XSLT, XPath 등 다른 XML 관련 기술과 함께 사용될 때 그 중요성이 더욱 부각된다. 특히 복잡한 문서에서 여러 벤더나 표준 기관에서 정의한 XML 어휘를 혼합하여 사용할 때 필수적이다. 네임스페이스의 올바른 사용은 문서의 명확성과 상호 운용성을 보장하는 핵심 요소이다.

3. XML 관련 기술

XML은 단독으로 사용되기보다는 XPath, XQuery, XSLT 같은 관련 기술들과 함께 사용되며 데이터를 처리, 변환, 질의하는 강력한 도구 모음을 형성한다.

XPath는 XML 문서 내에서 특정 노드(요소, 속성, 텍스트 등)를 찾고 선택하기 위한 쿼리 언어이다. 트리 구조의 XML 문서에서 경로 표현식을 사용하여 원하는 데이터 위치를 정확히 지정할 수 있다. 예를 들어, /책목록/책[@카테고리='소설']/제목과 같은 표현식은 '소설' 카테고리에 속한 모든 책의 제목 요소를 선택한다. XPath는 주로 XSLT 변환이나 XQuery 질의에서 데이터를 선택하는 데 사용된다. XQuery는 XML 데이터베이스나 XML 문서 집합을 대상으로 정보를 검색하고 가공하는 데 사용되는 강력한 질의 언어이다. 관계형 데이터베이스의 SQL과 유사한 역할을 하며, FLWOR(For, Let, Where, Order by, Return) 표현식을 통해 복잡한 데이터 조작과 검색을 지원한다.

XSLT는 XML 문서를 다른 XML 문서, HTML, 일반 텍스트 등 다양한 형식으로 변환하는 언어이다. 변환 규칙은 템플릿 형태로 작성되며, XPath를 사용하여 소스 문서의 특정 부분을 매칭하고 새로운 내용을 생성한다. 주로 XML 데이터를 웹 페이지(HTML)로 표시하거나, 다른 구조의 XML 문서로 변환하는 데 널리 사용된다. XSLT 처리기는 소스 XML 문서와 XSLT 스타일시트를 입력받아 변환 결과를 출력한다.

기술

주요 용도

설명

XPath

노드 선택

XML 문서 트리에서 특정 노드를 지정하는 경로 언어

XQuery

데이터 질의

XML 데이터 집합을 검색하고 조작하는 질의 언어

XSLT

문서 변환

XML 문서를 다른 형식(HTML, XML, 텍스트)으로 변환

이러한 기술들을 효과적으로 사용하기 위해서는 XML 파서가 필요하다. XML 파서는 XML 문서를 읽고 그 구조와 내용을 응용 프로그램이 사용할 수 있는 형태(예: DOM 트리, SAX 이벤트)로 해석하는 소프트웨어 라이브러리이다. 파서는 문서가 문법적으로 올바른지 검증할 수도 있다.

3.1. XPath와 XQuery

XPath는 XML 문서 내의 특정 부분을 찾고 선택하기 위한 쿼리 언어이다. XPath는 트리 구조로 표현된 XML 문서에서 노드를 탐색하기 위한 경로 표현식을 사용한다. 이 표현식은 계층 구조를 따라 특정 요소, 속성, 텍스트 노드 등을 정확히 가리킬 수 있다. XPath는 단독으로 사용되기도 하지만, 주로 XSLT 변환이나 XQuery에서 데이터를 선택하는 핵심 도구로 활용된다.

XQuery는 XML 데이터를 쿼리하기 위한 강력한 함수형 프로그래밍 언어이다. 관계형 데이터베이스에 SQL이 있다면, XML 데이터베이스나 XML 문서 모음에는 XQuery가 해당한다. XQuery는 XPath 표현식을 기반으로 구축되어 복잡한 데이터 추출, 변환 및 반환을 수행할 수 있다. FLWOR(For, Let, Where, Order by, Return) 표현식은 XQuery의 핵심 구문으로, 데이터를 반복 처리하고 필터링하며 정렬된 결과를 생성하는 데 사용된다.

두 기술의 주요 차이점과 관계는 다음 표와 같다.

특성

XPath

XQuery

주요 목적

노드 선택 및 탐색

데이터 쿼리, 변환, 생성

표현 능력

경로 기반 선택에 강함

FLWOR 구문, 사용자 정의 함수, 풍부한 연산 지원

결과

노드 집합, 문자열, 숫자 등

완전한 XML 문서 또는 문서 조각

사용 문맥

XSLT, XQuery, XML 파서 내 임베드

독립 실행형 쿼리 언어

XPath와 XQuery는 XML 데이터베이스, 웹 서비스, 문서 처리 시스템 등에서 복잡한 XML 데이터를 효율적으로 조작하는 데 필수적이다. 특히 대규모 XML 문서 저장소에서 정보를 검색하고 보고서를 생성할 때 XQuery의 능력이 빛을 발한다.

3.2. XSLT

XSLT(Extensible Stylesheet Language Transformations)는 XML 문서를 다른 형식의 문서로 변환하기 위한 W3C 표준 언어이다. 주로 XML 데이터를 HTML이나 XHTML, 다른 XML 구조, 일반 텍스트 등으로 변환하는 데 사용된다. XSLT는 XPath를 사용하여 원본 XML 문서의 특정 부분을 선택하고, 템플릿 기반 규칙을 적용하여 출력 문서를 생성한다.

XSLT 변환의 핵심은 소스 문서의 노드와 일치하는 템플릿 규칙을 정의하는 것이다. 처리기는 소스 트리의 노드를 순회하며, 해당 노드와 일치하는 가장 구체적인 템플릿을 찾아 그 내용을 실행한다. 템플릿 내에서는 새로운 요소를 생성하거나, 값을 삽입하고, 조건부 처리나 반복 처리를 위한 제어 구조를 사용할 수 있다. 일반적인 변환 과정은 다음과 같다.

1. XML 소스 문서와 XSLT 스타일시트 문서를 입력으로 받는다.

2. XSLT 프로세서가 소스 문서를 파싱하여 트리 모델을 생성한다.

3. 프로세서는 스타일시트의 규칙에 따라 소스 트리를 처리하고 결과 트리를 생성한다.

4. 결과 트리는 최종적으로 HTML, XML, 텍스트 등의 형식으로 직렬화되어 출력된다.

XSLT는 데이터 표현과 내용을 분리하는 데 유용하며, 특히 동일한 XML 데이터를 웹 페이지(HTML), PDF, 다른 XML 포맷 등 여러 형태로 게시해야 할 때 널리 활용된다. 예를 들어, 카탈로그 데이터를 담은 XML 파일 하나를 가지고 웹용 HTML 페이지와 모바일용 경량 HTML, 그리고 인쇄용 PDF 생성을 위한 중간 형식을 모두 하나의 XSLT 스타일시트나 각각의 스타일시트를 통해 생성할 수 있다. XSLT 1.0은 1999년, 보다 강력한 기능을 제공하는 XSLT 2.0은 2007년에 표준으로 제정되었다.

3.3. XML 파서

XML 파서는 XML 문서를 읽고 그 구조와 내용을 해석하여 응용 프로그램이 사용할 수 있는 형태로 제공하는 소프트웨어 구성 요소 또는 라이브러리이다. 파서는 문서가 XML 문법을 올바르게 따르는지 검증하는 역할을 수행하며, 일반적으로 트리 구조나 이벤트 스트림 형태로 데이터를 애플리케이션에 전달한다.

주요 파서 유형은 다음과 같다.

유형

설명

특징

DOM 파서

문서 전체를 메모리에 트리 구조(DOM 트리)로 로드하여 조작하는 방식

문서 전체에 대한 임의 접근이 가능하지만, 대용량 문서에서는 메모리 사용량이 크다.

SAX 파서

문서를 순차적으로 읽으며 요소의 시작, 끝, 텍스트 등 이벤트를 발생시키는 방식

이벤트 기반으로 메모리 효율이 높지만, 문서를 임의로 탐색할 수 없다.

Pull 파서

애플리케이션이 파서에게 다음 이벤트를 요청하는 방식

SAX와 유사하지만 제어 흐름이 애플리케이션에 있어 프로그래밍이 더 직관적이다.

파서는 또한 문서의 유효성을 검사하는지에 따라 구분된다. 비검증 파서는 문서가 형식 올바름인지만 확인하는 반면, 검증 파서는 문서가 참조하는 DTD나 XML 스키마에 정의된 규칙을 준수하는지, 즉 유효함을 추가로 검사한다. 검증 파서는 데이터의 정확성이 중요한 금융 거래나 의료 정보 교환과 같은 분야에서 필수적으로 사용된다.

대부분의 현대 프로그래밍 언어는 자체 XML 파서 라이브러리를 제공한다. 예를 들어, 자바에는 JAXP, 파이썬에는 xml.etree.ElementTree, C#에는 System.Xml 네임스페이스가 있다. 이러한 파서들은 애플리케이션이 구성 파일을 읽거나, 웹 서비스 메시지를 처리하거나, 다양한 시스템 간에 구조화된 데이터를 교환하는 데 핵심적인 역할을 한다.

4. 응용 분야

XML은 구조화된 데이터를 표현하는 범용 언어로서, 다양한 응용 분야에서 데이터 저장, 교환, 구성의 표준 형식으로 널리 사용된다. 특히 플랫폼과 프로그래밍 언어에 독립적인 특성 덕분에 이기종 시스템 간의 데이터 통합에 효과적이다.

웹 서비스 분야에서는 SOAP 프로토콜의 기본 메시지 형식으로 XML이 채택된다. SOAP 메시지는 XML 문서로 구성되어 네트워크를 통해 원격 프로시저 호출을 가능하게 한다. 반면, RESTful 아키텍처에서는 주로 JSON을 사용하는 추세이지만, XML 역시 Content-Type을 application/xml로 지정하여 데이터 표현 형식으로 활용할 수 있다. 또한, 웹 서비스의 인터페이스를 정의하는 WSDL 역시 XML 문법을 기반으로 작성된다.

소프트웨어 및 시스템 구성 관리에서는 XML이 설정 파일 형식으로 자주 사용된다. Apache Ant의 빌드 파일, Spring Framework의 애플리케이션 컨텍스트 설정 파일, 그리고 Maven의 pom.xml이 대표적인 예이다. 이는 계층적 구조를 명확하게 표현할 수 있고, 유효성 검사를 위한 XML 스키마를 적용할 수 있어 설정 오류를 줄이는 데 도움이 된다.

데이터 교환 및 저장 측면에서 XML은 업계 표준의 기반이 된다. Microsoft Office의 문서 형식(DOCX, XLSX 등)은 실제로 XML 파일들을 압축한 것이다. 또한, RSS와 Atom 같은 웹 피드 형식, SVG 벡터 이미지 형식, 그리고 MathML 수학 표기법 언어도 모두 XML을 기반으로 정의된다. 이러한 표준화는 특정 도구에 종속되지 않는 장기적인 데이터 보관과 호환성을 보장하는 데 기여한다.

4.1. 웹 서비스 (SOAP, REST)

XML은 웹 서비스 구현의 핵심 데이터 형식으로 널리 사용된다. 웹 서비스는 네트워크를 통해 서로 다른 시스템 간에 데이터 교환과 기능 호출을 가능하게 하는 기술이다. XML 기반 웹 서비스는 주로 SOAP 프로토콜을 사용하며, REST 아키텍처 스타일에서도 데이터 표현 형식으로 자주 활용된다.

SOAP는 XML을 메시지 포맷으로 사용하는 프로토콜이다. SOAP 메시지는 필수적인 Envelope 요소와 선택적인 Header, 필수적인 Body 요소로 구성된다. 이 메시지는 일반적으로 HTTP, SMTP 같은 전송 프로토콜 위에서 동작하며, WSDL이라는 XML 기반 언어로 서비스 인터페이스를 기술한다. SOAP는 보안, 트랜잭션, 신뢰성 메시징 등 엔터프라이즈 수준의 표준을 지원하는 것이 특징이다.

반면, REST는 프로토콜이 아닌 아키텍처 스타일이다. RESTful 서비스는 HTTP 메서드(GET, POST, PUT, DELETE)를 자원 조작에 매핑하고, XML은 여러 가능한 표현 형식(Media Type) 중 하나로 사용된다. 클라이언트와 서버는 HTTP 헤더를 통해 주고받는 데이터의 형식을 협상한다. REST는 SOAP에 비해 간결하고 웹의 기본 원칙을 따르며, JSON 형식과의 결합도 흔히 볼 수 있다.

특성

SOAP (XML 기반)

REST (XML 사용 가능)

프로토콜/아키텍처

프로토콜

아키텍처 스타일

메시지 형식

XML만 사용

XML, JSON, HTML 등 다양한 형식 사용

표준화

WSDL, WS-* 표준군으로 엄격히 정의

공식 표준 없음, 가이드라인에 의존

상태 관리

일반적으로 상태 비저장(Stateless)

상태 비저장(Stateless) 원칙

보안

WS-Security 등 XML 기반 보안 표준

HTTPS, OAuth 등 HTTP 기반 보안 활용

두 방식 모두 XML을 통해 구조화된 데이터를 교환한다는 공통점이 있으나, 접근 방식과 복잡성에서 차이를 보인다. SOAP는 높은 수준의 표준화와 확장성을, REST는 단순함과 유연성을 각각의 장점으로 삼는다.

4.2. 설정 파일

XML은 구조화된 데이터를 표현하는 데 적합하여, 다양한 소프트웨어와 시스템에서 설정 파일 형식으로 널리 사용된다. 인간이 읽을 수 있는 형식이면서도 계층적 구조를 명확하게 정의할 수 있어, 복잡한 설정 정보를 체계적으로 관리하는 데 유용하다.

주요 응용 사례로는 자바 기반 애플리케이션의 Spring Framework 설정 파일, Apache Maven의 pom.xml, Apache Tomcat의 server.xml, 그리고 안드로이드 앱의 레이아웃 및 매니페스트 파일 등이 있다. 이러한 파일들은 애플리케이션의 동작 방식, 컴포넌트 간의 관계, 데이터베이스 연결 정보, 빌드 옵션 등을 정의한다.

기술/플랫폼

주요 XML 설정 파일 예시

용도

Spring Framework

applicationContext.xml, spring-config.xml

빈(Bean) 정의 및 의존성 주입 설정

Apache Maven

pom.xml (Project Object Model)

프로젝트 빌드, 의존성 관리 설정

서블릿 컨테이너

web.xml

웹 애플리케이션 배포 서술자

안드로이드

AndroidManifest.xml, 레이아웃 .xml 파일

앱 권한, 액티비티, UI 구조 정의

XML 설정 파일의 사용은 JSON이나 YAML과 같은 대안 형식의 등장으로 일부 영역에서 감소했으나, 여전히 많은 엔터프라이즈 시스템과 레거시 환경에서 표준으로 자리 잡고 있다. 그 장점은 표준화된 파서와 검증 도구(XML 스키마, DTD)가 풍부하며, 주석을 지원하여 설정의 의도를 명시할 수 있다는 점이다. 반면, 상대적으로 장황한 문법은 파일 크기를 증가시키고 가독성을 떨어뜨릴 수 있다는 단점도 존재한다.

4.3. 데이터 교환

XML은 플랫폼 독립성과 인간 가독성을 갖춘 구조화된 데이터 형식으로, 이질적인 시스템 간에 정보를 교환하는 데 널리 사용되는 사실상의 표준이다. 특히 웹 서비스, 엔터프라이즈 애플리케이션 통합, 그리고 전자 데이터 교환 분야에서 핵심적인 역할을 한다.

데이터 교환에서 XML의 주요 장점은 데이터와 그 구조를 함께 기술할 수 있는 자기 기술적 특성에 있다. 태그를 통해 데이터의 의미를 명시할 수 있어, 송신자와 수신자가 동일한 XML 스키마나 DTD를 참조하기만 하면 데이터의 정확한 해석이 가능하다. 이는 서로 다른 프로그래밍 언어나 운영체제를 사용하는 시스템 간 통신에서 큰 장점으로 작용한다. 예를 들어, 자바 애플리케이션이 생성한 XML 데이터를 .NET 기반 시스템이 별도의 변환 과정 없이도 읽고 처리할 수 있다.

주요 응용 사례로는 금융 거래 메시지(FIX 프로토콜), 의료 정보 표준(HL7), 신문 기사 마크업(NewsML), 그리고 오피스 문서 형식(OOXML, ODF) 등이 있다. 또한 RSS나 Atom과 같은 웹 피드 형식도 XML을 기반으로 하여, 블로그나 뉴스 헤드라인을 표준화된 방식으로 배포하는 데 사용된다.

교환 분야

사용 예시

관련 표준/형식

금융

주문, 결제, 거래 보고

FIXML, ISO 20022

의료

환자 기록, 처방전, 검사 결과

HL7 CDA, DICOM

출판/미디어

기사, eBook, 메타데이터

NewsML, EPUB, ONIX

공공 데이터

정부 간 데이터 공유, 지리 정보

GML, 다양한 공공 XML 스키마

이러한 광범위한 채택은 XML이 단순한 데이터 포맷을 넘어, 데이터의 의미와 관계를 정의하는 메타데이터 언어로서의 역할을 수행하기 때문이다. 구조화된 문서와 데이터의 교환을 동시에 지원함으로써, 비즈니스 프로세스 연계와 시스템 상호운용성을 실현하는 데 기여한다.

5. 장단점

XML은 구조화된 데이터를 표현하는 강력한 도구이지만, 명확한 장점과 단점을 모두 가지고 있다.

XML의 주요 장점은 다음과 같다. 첫째, 사람과 기계 모두 읽을 수 있는 텍스트 기반 형식이다. 이는 이진 데이터와 달리 특정 소프트웨어 없이도 내용을 확인하고 디버깅할 수 있음을 의미한다. 둘째, DTD나 XML 스키마를 통해 문서 구조를 엄격하게 정의하고 검증할 수 있어, 데이터 무결성을 보장한다. 셋째, 네임스페이스를 사용하면 서로 다른 어휘를 하나의 문서에서 혼용할 수 있어 확장성이 뛰어나다. 마지막으로, XSLT, XPath와 같은 풍부한 관련 기술 생태계를 갖추고 있어 데이터 변환과 질의가 용이하다.

반면, XML은 몇 가지 단점도 지닌다. 가장 큰 문제는 JSON과 같은 경량 형식에 비해 상대적으로 장황하고 파일 크기가 크다는 점이다. 이는 네트워크 대역폭과 처리 성능에 부정적인 영향을 미칠 수 있다. 또한, 복잡한 문법 규칙과 엄격한 구조 요구사항으로 인해 학습 곡선이 가파르고, 간단한 데이터 표현에는 과도할 수 있다. 파싱 과정도 상대적으로 무거워, 제한된 리소스를 가진 환경에서는 부담이 될 수 있다.

장점

단점

사람/기계 가독성(텍스트 기반)

JSON 대비 장황함과 큰 파일 크기

구조 정의 및 검증 가능(DTD, 스키마)

복잡한 문법과 높은 학습 비용

확장성(네임스페이스 지원)

파싱 오버헤드가 상대적으로 큼

풍부한 관련 기술(XSLT, XPath)

간단한 용도에는 과도할 수 있음

이러한 특성으로 인해 XML은 신뢰성과 구조화가 중요한 엔터프라이즈 데이터 교환이나 복잡한 문서 표현에는 적합하지만, 웹 API와 같은 경량 고속 통신에는 JSON이 더 선호되는 경향이 있다.

6. JSON과의 비교

XML과 JSON은 모두 구조화된 데이터를 표현하고 교환하기 위한 널리 사용되는 형식이다. 둘 다 텍스트 기반이며, 계층적 데이터 모델을 지원하고, 다양한 프로그래밍 언어에서 파싱 및 생성이 가능하다. 그러나 설계 철학, 문법, 사용 편의성, 성능 측면에서 뚜렷한 차이를 보인다.

비교 항목

XML (eXtensible Markup Language)

JSON (JavaScript Object Notation)

기원 및 설계

SGML을 단순화하여 설계되었으며, 문서 중심이다.

JavaScript 객체 표기법에서 파생되었으며, 데이터 중심이다.

데이터 형식

태그 기반의 마크업 언어이다.

키-값 쌍과 순서 있는 리스트 기반이다.

가독성

인간이 읽기에는 비교적 장황하고 복잡할 수 있다.

구문이 간결하여 읽고 작성하기 쉽다.

구문 크기

종료 태그 등으로 인해 동일한 데이터를 표현할 때 일반적으로 더 큰 용량을 차지한다.

불필요한 마크업이 적어 상대적으로 용량이 작다.

파싱 속도

복잡한 문법과 유연성으로 인해 파싱이 상대적으로 느릴 수 있다.

간단한 문법 구조 덕분에 파싱 속도가 일반적으로 더 빠르다.

데이터 타입 지원

기본적인 데이터 타입을 정의하지 않으며, 모든 데이터는 문자열로 처리된다. 타입 정보는 스키마를 통해 추가해야 한다.

숫자, 문자열, 불리언, null, 배열, 객체 등 기본 데이터 타입을 명시적으로 지원한다.

네임스페이스 및 메타데이터

네임스페이스, 속성, 주석, 처리 명령어 등을 통해 풍부한 메타데이터와 문서 구조 정보를 포함할 수 있다.

메타데이터 지원이 제한적이며, 데이터 자체에 초점을 맞춘다.

주요 사용처

문서 중심의 마크업(예: XHTML, 오피스 오픈 XML), 복잡한 엔터프라이즈 데이터 교환, SOAP 기반 웹 서비스, 구성 파일 등에 널리 사용된다.

웹 애플리케이션의 API(특히 RESTful API) 데이터 교환, 구성 파일, NoSQL 데이터베이스 등 현대 웹 개발에서 사실상의 표준이다.

요약하면, XML은 검증, 네임스페이스, 복잡한 문서 구조 표현에 강점을 가지는 반면, JSON은 간결함, 빠른 처리 속도, 웹 환경과의 높은 친화도로 인해 최근 데이터 교환 형식의 주류로 자리 잡았다. 프로젝트의 요구사항에 따라 적절한 형식을 선택하는 것이 중요하다.

7. 보안 고려사항

XML 문서를 처리하는 애플리케이션은 여러 보안 위협에 노출될 수 있다. 가장 대표적인 공격 방식은 XXE 공격(XML External Entity)이다. 이 공격은 XML 파서가 외부 엔티티를 참조하고 처리하도록 설계된 기능을 악용한다. 공격자는 악성 XML 문서에 외부 시스템 파일(예: /etc/passwd)이나 내부 네트워크 리소스를 가리키는 외부 엔티티 선언을 삽입한다. 만약 파서가 이를 처리하고 애플리케이션이 그 결과를 노출하면, 시스템의 민감한 데이터가 유출될 수 있다. 또한, 외부 엔티티를 통해 서버 측 요청 위조(SSRF) 공격을 유발하여 내부 시스템을 탐색하거나 공격하는 데 사용될 수도 있다.

XML 파서의 기본 설정은 종종 이러한 위험을 내포하고 있기 때문에, 보안을 강화하기 위한 명시적인 조치가 필요하다. 주요 보안 모범 사례는 다음과 같다.

보안 조치

설명

외부 엔티티 처리 비활성화

파서 설정에서 외부 일반 엔티티와 외부 매개변수 엔티티의 처리를 완전히 비활성화하는 것이 가장 효과적인 방어책이다.

DTD 처리 비활성화

DTD 자체의 사용을 금지하면 XXE 공격의 근원을 차단할 수 있다.

스키마 검증 사용

XML 스키마(XSD)를 사용하여 입력 문서의 구조와 내용을 엄격히 검증한다.

입력 크기 제한

처리할 XML 문서의 크기를 제한하여 서비스 거부(DoS) 공격을 예방한다.

애플리케이션 개발자는 신뢰할 수 없는 출처의 XML 데이터를 처리할 때 특히 주의해야 한다. 파서 라이브러리의 보안 설정을 최신 상태로 유지하고, 최소 권한 원칙에 따라 파서가 접근할 수 있는 리소스를 제한하는 것이 중요하다. 또한, XML 데이터를 처리하기 전에 필요한 검증과 필터링을 수행하는 추가적인 보안 계층을 구현하는 것이 좋다.

7.1. XXE 공격

XXE 공격(XML External Entity Attack)은 XML 파서의 외부 개체 참조 기능을 악용하는 보안 취약점이다. 이 공격은 공격자가 악성 XML 데이터를 처리하는 애플리케이션에 주입하여 서버의 민감한 파일을 읽거나, 내부 네트워크를 스캔하거나, 서비스 거부 공격을 수행하는 것을 가능하게 한다.

공격의 핵심은 DTD(Document Type Definition) 내에 정의된 외부 개체(External Entity)를 이용하는 것이다. 공격자는 다음과 같은 악성 DTD를 XML 문서에 삽입할 수 있다.

```xml

<!DOCTYPE foo [

<!ENTITY xxe SYSTEM "file:///etc/passwd">

]>

<foo>&xxe;</foo>

```

이 경우, XML 파서가 &xxe; 엔티티를 처리할 때, 시스템 파일(file:///etc/passwd)의 내용을 읽어 문서에 삽입하게 된다. 이 외에도 http://나 ftp:// 같은 프로토콜을 이용해 내부 시스템에 대한 요청을 보내는 등 다양한 형태의 공격이 가능하다.

XXE 공격의 영향은 매우 다양하다. 주요 위험은 다음과 같다.

공격 유형

설명

로컬 파일 노출

서버의 /etc/passwd, 소스 코드, 설정 파일 등 민감한 파일 내용을 읽어낸다.

내부 네트워크 스캔

내부망의 HTTP 서비스 등에 요청을 보내 포트 스캔이나 정보 수집을 수행한다.

서비스 거부(DoS)

/dev/random 같은 특수 파일을 참조하거나, 재귀적 엔티티 확장을 통해 시스템 자원을 고갈시킨다.

원격 코드 실행

특정 조건(예: PHP의 expect:// 래퍼)에서 서버 측 코드 실행으로 이어질 수 있다.

이러한 공격을 방지하기 위한 가장 효과적인 방법은 XML 파서에서 DTD와 외부 개체 처리를 완전히 비활성화하는 것이다. 대부분의 현대 XML 파서 라이브러리는 이를 위한 설정 옵션을 제공한다. 또한, 입력 데이터의 신뢰성을 검증하고, 필요한 최소한의 기능만을 사용하도록 애플리케이션을 설계하는 것이 중요하다.

7.2. 보안 모범 사례

XML 문서를 처리할 때는 XXE 공격을 비롯한 다양한 보안 위협으로부터 시스템을 보호하기 위한 모범 사례를 준수해야 한다. 가장 기본적인 조치는 신뢰할 수 없는 출처의 XML 데이터를 처리하지 않는 것이며, 불가피한 경우 입력 데이터의 유효성을 엄격하게 검증해야 한다. 또한 XML 파서의 보안 설정을 강화하는 것이 중요하다. 외부 엔티티 참조와 DTD 처리를 명시적으로 비활성화하여 XXE 공격을 차단해야 한다. 많은 현대 파서는 기본적으로 이러한 기능을 꺼두지만, 설정을 다시 확인하는 것이 안전하다.

XML 데이터의 크기와 복잡성을 제한하는 것도 공격 표면을 줄이는 효과적인 방법이다. 매우 깊은 요소 중첩이나 과도하게 큰 속성 값은 파서의 자원을 고갈시켜 서비스 거부 공격으로 이어질 수 있다. 스키마 유효성 검사를 수행할 때는 로컬 파일 시스템이나 내부 네트워크 리소스를 참조하지 않는지 확인해야 한다. 가능하다면 DTD 대신 XML 스키마(XSD)를 사용하는 것이 보안상 더 안전하다.

보안 조치

설명

구현 예시 (Java 기준)

외부 엔티티 비활성화

XXE 공격 방지를 위한 핵심 설정

DocumentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

DTD 처리 비활성화

DTD 선언 자체를 금지

factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

스키마 유효성 검사

문서 구조를 엄격하게 제한

SchemaFactory를 사용한 검증

크기 제한 설정

메모리 소비 및 서비스 거부 공격 방지

파서별 속성 설정 (예: setAttribute("http://apache.org/xml/features/..."))

마지막으로, XML 처리 라이브러리는 정기적으로 최신 보안 패치가 적용된 버전으로 업데이트해야 한다. 로깅을 통해 의심스러운 XML 처리 시도를 모니터링하고, 필요 이상의 상세한 오류 메시지를 외부에 노출하지 않도록 해야 한다. 이러한 조치들은 XML의 강력한 기능을 유지하면서도 관련 보안 취약점으로 인한 위험을 현저히 낮춘다.

8. 관련 문서

  • Wikipedia - XML

  • MDN Web Docs - XML 소개

  • W3Schools - XML Tutorial

  • W3C - Extensible Markup Language (XML)

  • Oracle - Java API for XML Processing (JAXP)

  • Microsoft Learn - XML 문서

  • IBM Developer - XML 기술 자료

리비전 정보

버전r1
수정일2026.02.14 23:09
편집자unisquads
편집 요약AI 자동 생성