본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

XML 구조 — 의미적 태그 + 사용자 정의 완전 정리

by 왕진 2026. 6. 11.
반응형

 

 

Web Development · XML

XML 구조 —
의미적 태그 + 사용자 정의 완전 정리

데이터를 자기설명적으로 묶는 자료구조 언어
시작 오늘 분석할 코드

HTML이 화면 표시용이라면 XML은 데이터 구조용이다. 같은 학생 정보를 XML로 표현하면 어떤 모습일까.

<?xml version="1.0" encoding="utf-8" ?> <?xml-stylesheet type="text/css" href="student2.css"?> <studentinfo> <student_heading> <major>전공</major> <name>이름</name> <age>나이</age> <gender>성별</gender> </student_heading> <student> <major>컴퓨터학과</major> <name>홍길동</name> <age>25세</age> <gender></gender> </student> <student> <major>철학과</major> <name>홍리라</name> <age>21세</age> <gender></gender> </student> </studentinfo>
트리 구조로 본 XML
studentinfo ├── student_heading │ ├── major: 전공 │ ├── name: 이름 │ ├── age: 나이 │ └── gender: 성별 ├── student │ ├── major: 컴퓨터학과 │ ├── name: 홍길동 │ ├── age: 25세 │ └── gender: 남 └── student ├── major: 철학과 ├── name: 홍리라 ├── age: 21세 └── gender: 여

용어 핵심 키워드
XMLeXtensible Markup Language — 데이터 구조화
선언문<?xml ?> — 버전과 인코딩 명시
사용자 정의 태그<major>, <name> 등 — 임의 명명
루트 요소하나만 — 본 코드는 studentinfo
중첩태그 안에 태그 — 트리 구조
xml-stylesheetCSS 연결 — XML도 표시 가능

1 XML과 HTML — 같은 듯 다른 듯
HTML
  • 태그가 고정 — div, p, span...
  • 화면 표시 목적
  • 의미보다 모양
  • 닫는 태그 일부 생략 가능
XML
  • 태그가 자유 — 사용자 정의
  • 데이터 구조화 목적
  • 의미가 명확 (자기설명적)
  • 닫는 태그 반드시 필수
💡 한 줄 요약 — HTML은 "어떻게 보일지"를 적고, XML은 "이게 무엇인지"를 적는다.

2 선언문 — <?xml ?>

XML 파일의 가장 위 한 줄은 항상 선언문이다.

<?xml version="1.0" encoding="utf-8" ?>
  • version="1.0" — 거의 모든 XML이 이 버전
  • encoding="utf-8" — 한글, 특수문자를 표현할 인코딩
  • 물음표(?)로 감싸 일반 태그와 구분

3 사용자 정의 태그 — 자기설명적

HTML은 <div> 같이 의미 없는 태그를 쓴다. XML은 내용에 맞게 태그를 만들 수 있다.

// 같은 데이터, HTML식 <div class="name">홍길동</div> // XML식 — 태그 자체가 의미 <name>홍길동</name>

이게 "자기설명적(self-describing)"의 의미다 — 태그만 봐도 무엇인지 안다. 다른 시스템(서버, 앱)에 전달해도 의미가 보존된다.


4 루트 요소 — 정확히 하나

XML은 최상위에 단 하나의 요소만 허용한다. 본 코드의 <studentinfo>가 그것이다.

// ⭕ 정상 — 루트 하나 <studentinfo> <student/> <student/> </studentinfo> // ❌ 오류 — 루트 두 개 <student/> <student/>

반응형
5 엄격한 문법

HTML은 관대하다 (<br> 닫기 생략 OK). XML은 엄격하다.

  • 모든 태그를 반드시 닫아야 한다<tag>...</tag> 또는 <tag/>
  • 대소문자 구분 — <Name><name>은 다른 태그
  • 속성 값은 따옴표 필수 — id="1" (id=1 안 됨)
  • 중첩 순서 정확히 — <a><b></a></b> 안 됨
한 가지라도 어기면 파싱 실패 — 브라우저는 빨간 에러를 띄우고 표시 안 한다. HTML과 가장 큰 차이.

6 XML에 CSS 적용

XML도 CSS로 화면 표시가 가능하다 — <?xml-stylesheet?>로 연결한다.

<?xml-stylesheet type="text/css" href="student2.css"?>

다만 이건 드물게 쓰는 패턴이다. 보통 XML은 데이터 교환용이고, 화면 표시는 변환 후 HTML이 한다.


7 XML이 어디에 쓰이는가
  • 설정 파일 — Maven pom.xml, Spring 설정, Android AndroidManifest.xml
  • RSS 피드 — 블로그·뉴스 구독 형식
  • SOAP API — 기업용 웹 서비스
  • Office 파일 내부 — .docx, .xlsx는 사실 XML zip
  • SVG — 벡터 이미지도 XML 기반

8 XML vs JSON
구분 XML JSON
크기 크다 (태그 두 번) 작다 (간결)
가독성 좋음 (자기설명) 좋음 (간결)
JS 호환 파싱 필요 JSON.parse 한 줄
스키마 XSD로 강력 JSON Schema (옵션)
모던 사용 레거시 / 엔터프라이즈 웹 API의 표준
현대 웹은 거의 JSON을 쓴다. XML은 레거시·엔터프라이즈 시스템·설정 파일에 남아 있다.

9 자주 하는 실수
실수 증상 해결
닫는 태그 누락 파싱 실패 모든 태그 닫기
루트 요소 두 개 오류 하나로 감싸기
속성에 따옴표 없음 오류 id="1" 형태
대소문자 혼용 다른 태그로 인식 일관되게
특수문자 그대로 < > & 파싱 충돌 &lt; &gt; &amp; 사용

핵심 한 줄 요약

XML데이터 구조화 언어 — 자기설명적 태그
사용자 정의 태그<name>, <major> 임의로 명명
루트 하나최상위 요소 정확히 하나
엄격한 문법닫기 / 따옴표 / 대소문자 / 중첩
선언문 ?xml?version + encoding 명시
대안현대 웹은 JSON 우세
반응형

댓글