XML

00·2025년 1월 9일

XML

XML은 eXtensible Markup Language의 약자로, 데이터를 저장하고 전송하기 위한 목적으로 만들어진 마크업 언어이다. 사람과 기계 모두 읽기 쉬운 형태로 데이터를 저장하고 교환할 수 있도록 설계되었다.

HTML이 주로 보여주기 위한 것이랑은 다른 양상이다.

XML은 안드로이드 앱의 GUI(그래픽 유저 인터페이스), 서버프로그램의 AJAX에서도 사용된다.

XML의 특징

  • 확장 가능: 사용자가 직접 태그를 정의하여 데이터 구조를 만들 수 있다. 즉, 특정 분야나 목적에 맞게 데이터를 표현할 수 있는 유연성을 제공한다.
  • 구조화: XML 문서는 계층적인 구조로 이루어져 있어 데이터를 체계적으로 구성할 수 있다. 이는 데이터의 가독성과 관리 효율성을 높여준다.
  • 텍스트 기반: XML 문서는 텍스트 파일로 저장되기 때문에, 사람이 직접 읽고 편집할 수 있다. 또한, 다양한 시스템과 플랫폼에서 호환성이 높다.
  • 다목적: XML은 웹 페이지, 설정 파일, 데이터베이스, 문서 등 다양한 분야에서 데이터를 저장하고 교환하는 데 사용된다.

XML의 기본 구조

XML 문서는 태그(tag)를 사용하여 데이터를 표현한다. 태그는 <> 기호로 둘러싸인 이름으로, 데이터의 의미를 나타낸다.

<name>홍길동</name>
  • 이 예시에서 <name>은 태그이고, "홍길동"은 태그에 포함된 데이터이다.

  • XML 문서는 루트 요소(root element)라는 하나의 최상위 요소를 가지며, 그 아래에 여러 개의 자식 요소가 계층적으로 구성된다.

<person>
  <name>홍길동</name>
  <age>25</age>
</person>

이 예시에서 <person>은 루트 요소이고, <name><age>는 자식 요소이다.

XML의 용도

  • 웹 서비스: XML은 웹 서비스에서 데이터를 교환하는 데 널리 사용된다. SOAP(Simple Object Access Protocol)과 RESTful 웹 서비스는 XML을 사용하여 데이터를 주고받는다.
  • 설정 파일: XML은 애플리케이션의 설정 파일을 저장하는 데 사용된다. XML 파일은 사람이 읽기 쉽고 편집하기 쉬워서 설정 정보를 관리하는 데 유용하다.
  • 데이터베이스: XML은 데이터베이스에서 데이터를 저장하고 교환하는 데 사용된다. XML은 관계형 데이터베이스와 NoSQL 데이터베이스 모두에서 사용할 수 있다.
  • 문서: XML은 문서를 표현하는 데 사용된다. HTML과 유사하지만, XML은 사용자가 직접 태그를 정의할 수 있기 때문에 더욱 다양한 문서를 표현할 수 있다.

XML 관련 기술

  • DTD (Document Type Definition): XML 문서의 구조를 정의하는 언어이다.
  • XML Schema: XML 문서의 구조와 데이터 타입을 정의하는 언어이다.
  • XSLT (Extensible Stylesheet Language Transformations): XML 문서를 다른 형식으로 변환하는 언어이다.
  • XPath: XML 문서에서 특정 요소를 찾는 데 사용되는 언어이다.

XML의 장점

  • 데이터 교환: XML은 다양한 시스템과 플랫폼에서 호환되므로, 데이터 교환에 유용하다.
  • 데이터 구조: XML은 계층적인 구조로 데이터를 표현할 수 있으므로, 복잡한 데이터를 체계적으로 관리할 수 있다.
  • 가독성: XML은 텍스트 기반이므로, 사람이 읽고 이해하기 쉽다.
  • 확장성: 사용자가 직접 태그를 정의할 수 있으므로, 다양한 용도로 활용할 수 있다.

XML의 단점

  • 데이터 크기: XML은 태그를 사용하여 데이터를 표현하기 때문에, 데이터 크기가 커질 수 있다.
  • 처리 속도: XML 파싱은 텍스트 기반으로 이루어지기 때문에, 처리 속도가 느릴 수 있다.

XML은 데이터를 저장하고 교환하는 데 널리 사용되는 마크업 언어이다. XML의 장점과 단점을 이해하고 적절히 활용하면 데이터 관리 및 교환 효율성을 높일 수 있다.


XML 트리구조

XML 문서는 마치 나무처럼 계층적인 구조를 가지고 있어서, 이를 XML 트리라고 부른다.

  • 루트 요소: 트리의 뿌리에 해당하는 요소로, XML 문서에는 단 하나의 루트 요소만 존재해야 한다.
  • 요소: XML 문서를 구성하는 기본 단위로, 시작 태그와 종료 태그로 둘러싸인 데이터를 포함한다. 요소(Element) 이름은 대소문자를 구분하고, 공백을 포함할 수 없다. 또한 XML 예약어(예: xml, xmlns)로 시작할 수 없다.
  • 속성: 요소에 추가적인 정보를 제공하는 이름-값 쌍이다.

XML 트리 구조 예시

<book>
  <title>XML 기본</title>
  <author>John Doe</author>
  <isbn>978-0-321-77640-2</isbn>
  <publisher>
    <name>출판사</name>
    <location>서울</location>
  </publisher>
</book>

이 예시에서 <book>은 루트 요소이고, <title>, <author>, <isbn>, <publisher>는 자식 요소이다. <publisher> 요소는 다시 <name><location>이라는 자식 요소를 가진다.

XML 문법

XML 문서를 작성할 때는 다음과 같은 문법 규칙을 따라야 한다.

  1. 모든 XML 요소는 종료 태그를 가져야 한다: <name>홍길동</name>과 같이 시작 태그 <name>과 종료 태그 </name>를 사용하여 요소를 감싸야 한다.
  2. XML 태그는 대소문자를 구분한다: <name><Name>은 서로 다른 태그로 인식된다.
  3. XML 요소는 중첩될 수 있다: <person><name>홍길동</name></person>과 같이 요소 안에 다른 요소를 포함할 수 있다.
  4. XML 속성값은 따옴표로 감싸야 한다: <person name="홍길동"></person>과 같이 속성값은 반드시 큰따옴표(") 또는 작은따옴표(')로 감싸야 한다.
  5. XML 문서는 반드시 하나의 루트 요소를 가져야 한다: 모든 XML 요소는 하나의 루트 요소 아래에 포함되어야 한다.

XML 문법을 준수하여 작성된 XML 문서는 데이터를 구조적으로 표현하고, 다양한 시스템과 애플리케이션에서 데이터를 교환하는 데 유용하게 사용될 수 있다.


속성

XML에서 속성은 요소에 대한 추가적인 정보를 제공하는 역할을 한다. 이름-값 쌍으로 구성되며, 요소의 시작 태그 안에 위치한다.

<person name="홍길동" age="25">
  </person>

이 예시에서 name="홍길동"age="25"<person> 요소의 속성이다. name은 속성 이름이고, "홍길동"은 속성값이다.

속성 사용 시 주의 사항

  • 속성값은 반드시 큰따옴표(") 또는 작은따옴표(')로 둘러싸야 한다.
  • 하나의 요소에 같은 이름의 속성을 여러 개 사용할 수 없다.
  • 속성은 요소의 내용을 설명하는 데 사용되며, 요소의 자식 요소로 표현할 수 없는 경우에 사용하는 것이 좋다.

프롤로그

XML 문서의 맨 처음에는 선택적으로 프롤로그를 포함할 수 있다. 프롤로그는 XML 선언과 문서 타입 선언으로 구성된다.

  • XML 선언: XML 버전, 인코딩 방식 등을 지정한다.
    <?xml version="1.0" encoding="UTF-8"?>
    현재 사용되는 버전은 1.0이고, 한글의 사용을 위해서는 UTF-8로 설정해야 한다. UTF-8은 대부분의 문자를 표현할 수 있고, 메모리 사용도 가변적이므로 거이ㅡ 모든 XML 문서가 표준 인코딩으로 사용하고 있다. 또한 HTML5, CSS, PHP, JavaScript 등에서도 문제없이 사용할 수 있다.
  • 문서 타입 선언: XML 문서의 구조를 정의하는 DTD (Document Type Definition) 또는 XML Schema를 지정한다.
    <!DOCTYPE book SYSTEM "book.dtd">

주석

XML 문서에는 주석을 추가할 수 있다. 주석은 `` 기호로 둘러싸인 텍스트로, 문서의 내용에 영향을 미치지 않는다. 파싱등에서도 제외된다. XML은 태그 안에 !(느낌표)를 사용하면 주석이 된다. '<'를 입력하고 Tab 키를 누르면 주석이 자동 생성된다.

<!-- 주석-->

XML 속성, 프롤로그, 주석을 적절히 사용하면 XML 문서의 가독성과 유지보수성을 향상시킬 수 있다.


요소 vs 속성

요소, 속성

XML에서 요소와 속성은 모두 데이터를 저장하는 데 사용되지만, 그 역할과 사용 방법에 차이가 있다.

요소는 XML 문서의 기본적인 구성 요소로, 데이터를 계층적으로 저장하는 데 사용된다. 시작 태그와 종료 태그로 둘러싸여 있으며, 태그 사이에 데이터 또는 다른 요소를 포함할 수 있다.

<name>홍길동</name>
<address>
  <city>서울</city>
  <street>강남대로</street>
</address>

속성은 요소에 대한 추가적인 정보를 제공하는 데 사용된다. 이름-값 쌍으로 구성되며, 요소의 시작 태그 안에 위치한다.

<person name="홍길동" age="25"></person>

요소와 속성의 주요 차이점

  • 계층 구조: 요소는 XML 문서의 계층 구조를 구성하는 데 사용되지만, 속성은 계층 구조에 포함되지 않는다.
  • 데이터 타입: 요소는 다양한 타입의 데이터를 저장할 수 있지만, 속성은 문자열 값만 저장할 수 있다.
  • 중복: 요소는 같은 이름의 자식 요소를 여러 개 가질 수 있지만, 속성은 같은 이름의 속성을 여러 개 가질 수 없다.
  • 순서: 요소의 순서는 중요하지만, 속성의 순서는 중요하지 않다.

속성의 장점

  • 간결성: 속성을 사용하면 요소 수가 줄어드므로, 요소에 비해 간결하게 데이터를 표현할 수 있다.
  • 검색: 속성값을 사용하여 요소를 쉽게 검색할 수 있다.

속성의 단점

  • 속성은 문자열 값만 저장할 수 있다.
  • 속성은 순서가 중요하지 않다.
  • 같은 이름의 속성을 여러 개 사용할 수 없다.
  • 나중에 추가 확장이 불가능하다.
  • 트리 구조를 포함할 수 없다.
  • 하나의 요소에 여러개의 속성을 사용할 경우 가독성이 떨어진다.

요소와 속성의 사용 예시

  • 요소는 책 제목, 저자, 출판사와 같이 문서의 주요 내용을 저장하는 데 사용된다.
  • 속성은 책의 ISBN, 출판일과 같이 요소에 대한 추가적인 정보를 제공하는 데 사용된다.

어떤 경우에 요소를 사용하고 어떤 경우에 속성을 사용해야 할까?

  • 데이터가 계층적인 구조를 가지고 있거나, 여러 개의 값을 가질 수 있는 경우에는 요소를 사용하는 것이 좋다.
  • 데이터가 단순한 문자열 값이고, 요소에 대한 추가적인 정보를 제공하는 경우에는 속성을 사용하는 것이 좋다.

요소와 속성을 적절히 사용하면 XML 문서를 더욱 효율적으로 구성하고 관리할 수 있다.


네임스페이스

사용 목적

XML 네임스페이스는 XML 문서에서 요소나 속성의 이름이 중복되는 것을 방지하기 위해 사용한다. 마치 여러 사람이 모여서 회의를 할 때, 이름이 같은 사람이 있으면 서로 혼동될 수 있으므로, 각자 소속된 부서를 함께 말하여 구분하는 것과 같은 원리이다.

XML 네임스페이스는 URI (Uniform Resource Identifier)형식으로 정의되며, 일반적으로 URL (Uniform Resource Locator)을 사용한다. URI는 인터넷에서 자원을 식별하는 데 사용되는 문자열이다.

XML 네임스페이스 선언

XML 네임스페이스는 xmlns 속성을 사용하여 선언한다. xmlns 속성은 요소의 시작 태그 안에 위치하며, 다음과 같은 형식을 가진다.

xmlns:접두사="네임스페이스"
  • 접두사(네임스페이스 이름): 네임스페이스를 식별하기 위해 사용하는 네임스페이스의 짧은 이름이다.
  • 네임스페이스: 네임스페이스를 나타내는 URI이다.

네임스페이스 사용

네임스페이스를 선언한 후에는 접두사를 사용하여 요소와 속성을 네임스페이스에 연결할 수 있다.

<root xmlns:my="http://www.example.com/my">
  <my:element1>...</my:element1>
</root>

이 예시에서 my:element1 요소는 http://www.example.com/my 네임스페이스에 속한다.

네임스페이스는 요소 이름 앞에 '네임스페이스 이름:'을 사용한다. 네임스페이스를 사용하기 위해서는 먼저 네임스페이스를 정의해 주어야 한다.

<root xmlns:h="http://www.w3.org/TR/html4/" 
      xmlns:f="https://www.w3schools.com/furniture">

  <h:table>
    <h:tr>
      <h:td>Apples</h:td>
      <h:td>Bananas</h:td>
    </h:tr>
  </h:table>

  <f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>

</root>

이 예시에서 xmlns:h="http://www.w3.org/TR/html4/"h라는 접두사를 http://www.w3.org/TR/html4/ 네임스페이스에 연결한다. 따라서 <h:table> 요소는 http://www.w3.org/TR/html4/ 네임스페이스에 속하는 table 요소를 나타낸다. 마찬가지로 <f:table> 요소는 https://www.w3schools.com/furniture 네임스페이스에 속하는 table 요소를 나타낸다.

이처럼 XML 네임스페이스를 사용하면 같은 이름의 요소나 속성이라도 서로 다른 네임스페이스에 속하면 구분할 수 있으므로, 이름 충돌을 방지할 수 있다.

디폴트 네임스페이스

모든 요소 앞에 '네임스페이스 이름:'을 붙여야 하는 번거로움이 있다. 따라서 상위요소에 디폴트 네임 스페이스를 정해두고, 그 하위요소에서는 네임스페이스명이 없는 요소를 사용하게 한다.

디폴트 네임스페이스는 접두사 없이 요소를 네임스페이스에 연결하는 방법이다. 디폴트 네임스페이스는 xmlns 속성에 접두사 없이 네임스페이스를 지정하여 선언한다.

<table xmlns="http://www.example.com/my">
  <element1>...</element1>
  <td>...</td>
</root>

이 예시에서 element1 요소는 http://www.example.com/my 네임스페이스에 속한다. 위와 같이 디폴트 네임스페이스를 사용하면

의 모든 하위 요소에 자동적으로 네임 스페이스가 적용되므로, 일일이 네임스페이스 이름:요소명처럼 사용해 줄 필요가 없어진다.

XML 네임스페이스의 장점

  1. 요소 간 충돌 방지: 같은 이름의 요소가 하나의 디렉토리 안에 여러 개면 어떤 요소를 지칭하는지 알 수 없는 경우가 생긴다. 또 서로 다른 XML에서 같은 이름의 요소를 사용하더라도, 네임스페이스를 사용하여 요소 이름의 충돌을 방지할 수 있습니다. 마치 서로 다른 반에 같은 이름의 학생이 있더라도, 반 이름을 함께 사용하면 학생을 구분할 수 있는 것과 같다.
  2. 모듈화: XML 문서를 여러 개의 모듈로 나누어 관리할 수 있다. 서로 다른 네임스페이스를 사용하여 XML 문서의 각 부분을 구분하면, 코드의 가독성과 유지보수성을 향상시킬 수 있다. 큰 프로젝트를 여러 개의 작은 모듈로 나누어 개발하는 것과 같다.
  3. 재사용성: 네임스페이스를 사용하면 XML 요소를 재사용할 수 있다. 예를 들어, 여러 XML 문서에서 공통으로 사용하는 요소들을 하나의 네임스페이스로 정의하고, 각 문서에서 해당 네임스페이스를 참조하여 요소를 재사용할 수 있다. 마치 여러 프로그램에서 공통으로 사용하는 라이브러리를 import 하여 사용하는 것과 같다.
  4. 확장성: 기존 XML 문서에 새로운 네임스페이스를 추가하여 기능을 확장할 수 있다.
  5. 호환성: 서로 다른 네임스페이스를 사용하는 XML 문서를 통합할 수 있다.

XML 네임스페이스는 XML 문서를 구조화하고 관리하는 데 유용한 도구이다.

0개의 댓글