2025-09-07 10:11
Tags: 확장자
XML
- 사람과 기계가 모두 이해할 수 있는 형태로 데이터를 저장하고 전송하기 위해 만들어진 마크업 언어
- HTML과 달리 태그가 미리 정해져 있지 않아, 사용자가 데이터 구조에 맞춰 직접 태그를 정의하는 강력한 유연성을 제공
- 현재는 JSON에 많은 자리를 내주었지만, 여전히 설정 파일, 문서 표준, 레거시 시스템 등에서 중요한 역할을 수행
핵심 철학
-
데이터의 ‘표현’과 ‘내용’을 분리한다: 데이터가 어떻게 보이는지가 아니라, 데이터가 무엇인지를 설명하는 데 집중
-
확장 가능하다 (Extensible): HTML처럼 정해진 태그만 쓰는 것이 아니라, 사용자가 데이터의 구조에 맞게 직접 태그를 만들어서 사용할 수 있습니다.
구조와 문법
구조
- 요소 (Element): XML 문서를 구성하는 가장 기본적인 단위
- 시작 태그(Opening Tag), 내용(Content), 종료 태그(Closing Tag)로 이루어집니다.
<name>신짱구</name>
에서<name>
은 시작 태그,신짱구
는 내용,</name>
은 종료 태그입니다.
- 속성 (Attribute): 요소에 대한 추가적인 정보를 제공하며, 시작 태그 안에
이름="값"
형태로 표현됩니다.<character id="jjanggu">
에서id="jjanggu"
가 속성입니다.- 언제 속성을 쓰고, 언제 요소를 쓸까?
- 일반적으로 데이터 자체는 요소로, 데이터에 대한 메타데이터(데이터를 설명하는 데이터)는 속성으로 표현
- 예를 들어, 책의 ‘제목’은 요소로, 책의 ‘ISBN’ 번호는 속성으로 표현할 수 있습니다.
- 프롤로그 (Prologue):
- XML 문서의 가장 첫 줄에 오는 선언부입니다.
- 이 문서가 어떤 XML 버전을 따르고 어떤 방식으로 인코딩되었는지를 명시합니다.
<?xml version="1.0" encoding="UTF-8"?>
문법
-
하나의 루트 요소 (Root Element): 모든 XML 문서는 모든 요소를 감싸는 단 하나의 최상위 요소(루트 요소)를 가져야 합니다.
-
종료 태그 필수: 모든 태그는 반드시 짝이 맞는 종료 태그를 가져야 합니다. (
<p>
만 쓰고 닫지 않는 HTML과 다릅니다.) 내용이 없는 태그는<br/>
와 같이 셀프 클로징(Self-closing)할 수 있습니다. -
올바른 중첩 (Nesting): 태그는 올바른 순서로 포함되어야 합니다.
<b><i>텍스트</b></i>
와 같은 순서는 허용되지 않습니다.<b><i>텍스트</i></b>
처럼 나중에 연 태그를 먼저 닫아야 합니다. -
대소문자 구분:
<name>
과<Name>
은 서로 다른 태그로 인식됩니다. -
속성값은 따옴표로: 모든 속성값은 반드시 큰따옴표(
"
)나 작은따옴표('
)로 감싸야 합니다.
트리 구조
- 부모-자식 관계가 있는 계층적인 트리 구조를 가짐
- 최상위에는 루트 요소가 있고, 그 아래로 자식 요소들이 나무의 가지처럼 뻗어 나가는 형태
- 이러한 구조 덕분에 데이터를 탐색하고 특정 부분에 접근하기가 매우 용이
항목 | XML | JSON |
---|---|---|
가독성 | 태그 때문에 상대적으로 장황함 | 간결하고 사람이 읽기 편함 |
문법 | 엄격하며, 종료 태그가 필수 | 더 단순하고 유연함 |
파싱 속도 | DOM/SAX 파서 필요, 상대적으로 무거움 | 자바스크립트에서 네이티브하게 지원, 매우 빠름 |
데이터 타입 | 기본적으로 모두 텍스트. XSD로 정의 필요 | String, Number, Boolean, Array, Object 지원 |
주석 | <!-- 주석 --> 형태로 지원 | 공식적으로 지원하지 않음 |
확장성/검증 | 네임스페이스, XSD 등 강력한 검증 기능 | 스키마를 통한 검증 기능이 있지만 XML만큼 표준화되진 않음 |