맨위로가기

XML

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

XML은 SGML의 응용 프로파일로, 데이터를 구조화하고 표현하기 위한 마크업 언어이다. 1990년대 중반 월드 와이드 웹의 성장에 따라 SGML의 문제점을 해결하기 위해 개발되었다. XML은 텍스트 기반이며, 다양한 마크업 언어의 기반이 되며, 스키마 언어를 제공하여 문서의 유효성을 검사한다. XML은 웰 폼(well-formed) 규칙과 유효성(validity) 규칙을 가지며, 여러 관련 규격과 프로그래밍 인터페이스를 통해 활용된다. XML은 장황함, 복잡성, 처리 비용 등의 이유로 비판을 받기도 한다.

더 읽어볼만한 페이지

  • 표현 계층 프로토콜 - MIME
    MIME은 다양한 인터넷 프로토콜에서 메시지의 형식과 내용을 설명하는 인터넷 표준으로, 메시지 내용의 타입과 서브타입을 정의하는 `Content-Type` 헤더와 바이너리 데이터 변환 방식을 지정하는 `Content-Transfer-Encoding` 헤더 등을 포함하여 다양한 메시지 타입과 첨부 파일, 문자 인코딩을 지원한다.
  • 표현 계층 프로토콜 - 애플 파일링 프로토콜
    애플 파일링 프로토콜(AFP)은 애플 기기 간 파일 공유를 위해 개발된 프로토콜로, AppleTalk에서 TCP/IP를 지원하며 유니코드, POSIX 권한, Time Machine 등을 지원한다.
  • 데이터 모델링 언어 - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 데이터 모델링 언어 - 데이터 정의 언어
    데이터 정의 언어(DDL)는 SQL에서 테이블, 열, 데이터 형식 등을 정의하고 데이터베이스 스키마를 수정하는 데 사용되는 명령어 집합이며, `CREATE`, `DROP`, `ALTER`, `TRUNCATE` 등의 명령어를 포함하고 데이터 구조를 정의하는 다양한 형식 언어들을 포괄하는 의미로도 사용된다.
  • 데이터 직렬화 포맷 - S-표현식
    S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다.
  • 데이터 직렬화 포맷 - YAML
    YAML은 2001년에 제안된 데이터 직렬화 형식으로, 가독성이 좋고 다양한 프로그래밍 언어에서 사용되며 JSON과 유사하지만, 주석 및 확장 기능 등을 제공하며 직렬화 속도가 느리다는 특징을 갖는다.
XML - [IT 관련 정보]에 관한 문서
기본 정보
Extensible Markup Language (XML) 로고
Extensible Markup Language (XML) 로고
종류마크업 언어
확장 기반SGML
확장 대상XHTML
RSS
Atom
KML
상세 정보
개발W3C (World Wide Web 컨소시엄)
첫 발표1998년 2월 10일
상태게시됨, W3C 권고
시작 년도1996년
편집자팀 브레이
진 파올리
마이클 스퍼버그-맥퀸
Eve Maler
François Yergeau
존 W. 코원
관련 표준W3C XML 스키마
약칭XML
도메인직렬화
버전1.1 (2판)
버전 날짜2006년 9월 29일
파일 확장자.xml
MIME 형식application/xml, text/xml (더 이상 사용되지 않음)
Uniform Type Identifierpublic.xml
파일 종류public.text
매직 넘버
개방 여부
사용료
공식 웹사이트W3C XML 공식 웹사이트

2. 역사

SGML의 다재다능함은 인터넷의 성장 이전인 1980년대 말에 초기 디지털 미디어 출판사들에 의해 인지되었다.[99][100] 1990년대 중순, 일부 SGML 실천자들은 당시 새로운 월드 와이드 웹을 경험하였고 웹이 성장할수록 마주칠 가능성이 있던 문제들 중 일부를 SGML이 해결해줄 것이라 믿었다. 댄 코놀리는 1995년에 W3C의 활동 목록에 SGML을 추가하였다. 1996년 중반 썬 마이크로시스템즈의 엔지니어 존 보삭이 선언문을 만들고 협업자들을 모집하였을 때 XML 개발이 시작되었다. 보삭은 SGML과 웹에 모두 경험이 있는 사람들의 작은 공동체와 잘 어울렸다.[101]

주요 디자인 결정은 1996년 7월과 11월 사이에 도달했으며,[102] 당시 XML 사양의 최초 워킹 드래프트가 출판되었다.[103] 추가 디자인 작업이 1997년에 계속되었으며 XML 1.0은 1998년 2월 10일 W3C 권고안이 되었다.

XML은 11명의 구성원으로 구성된 작업 그룹에 의해 컴파일되었으며,[34] 대략 150명의 관심 그룹이 지원했다. 기술적인 논쟁은 관심 그룹 메일링 리스트에서 이루어졌으며, 문제는 합의 또는 실패 시 작업 그룹의 과반수 투표로 해결되었다. 설계 결정과 그 근거에 대한 기록은 마이클 스퍼버그-맥퀸이 1997년 12월 4일에 작성했다.[35] 제임스 클라크는 작업 그룹의 기술 리더로, 특히 빈 요소 <empty /> 구문과 "XML"이라는 이름을 기여했다. 고려되었던 다른 이름으로는 "MAGMA"(Minimal Architecture for Generalized Markup Applications), "SLIM"(Structured Language for Internet Markup) 및 "MGML"(Minimal Generalized Markup Language)이 있었다. 사양의 공동 편집자는 원래 팀 브레이와 마이클 스퍼버그-맥퀸이었다. 프로젝트 중간에 브레이가 넷스케이프와 컨설팅 계약을 맺으면서 마이크로소프트의 격렬한 항의를 받았다. 브레이는 일시적으로 편집자직에서 사임해 달라는 요청을 받았다. 이로 인해 작업 그룹에서 격렬한 논쟁이 벌어졌고, 결국 마이크로소프트의 장 파올리를 세 번째 공동 편집자로 임명함으로써 해결되었다.

XML 작업 그룹은 주로 이메일과 주간 전화 회의를 통해 소통했다. 주요 설계 결정은 1996년 8월부터 11월까지의 짧은 기간 동안 집중적인 작업을 통해 이루어졌으며,[36] 이때 XML 사양의 첫 번째 작업 초안이 발표되었다.[37] 1997년까지 추가적인 설계 작업이 진행되었다.

XML 1.0은 1998년 2월 10일에 W3C 권고안이 되었다. XML 1.1은 2004년 2월 4일에 처음 게시되었으며,[39] 현재는 2006년 8월 16일에 게시된 2판이 최신판이다.

3. 기본 개념

XML은 구조적인 데이터를 위한 것으로, 정보를 레이블링하고 분류하며 구조적으로 구성한다.[11] HTML과 유사한 마크업 언어이지만, 태그를 사용자가 정의할 수 있어 확장성이 뛰어나다. 텍스트 기반으로 사람이 읽을 수 있지만, 기계를 위한 처리도 고려되었다. 크기가 커지는 경향이 있지만, 압축 기술을 통해 완화할 수 있다.

XML은 XML 네임스페이스, XML 스키마, XSLT, XPath 등 다양한 기술의 집합이다. SGML에서 발전된 기술로, HTML에서 XHTML로 발전하는 데 중요한 역할을 했다. 모듈식으로 설계되어 다른 XML 기반 언어와 함께 사용하기 용이하다.

RDF시맨틱 웹의 토대가 되며, 라이선스 제약이 없고, 플랫폼 독립적이며, 많은 지원을 받고 있다.

XML의 주된 목적은 임의의 데이터를 직렬화하여 저장, 전송 및 재구성하는 것이다. 서로 다른 시스템이 정보를 교환하려면 파일 형식에 동의해야 하는데, XML은 이 과정을 표준화하여 정보를 표현하기 위한 공통어와 유사한 역할을 한다.[11]

마크업 언어로서 XML은 정보를 레이블링하고 분류하며 구조적으로 구성한다.[11] XML 태그는 데이터 구조를 나타내며 메타데이터를 포함한다. 태그 안에는 XML 표준에서 지정한 방식으로 인코딩된 데이터가 있다.[11] 추가적인 XML 스키마 (XSD)는 XML을 해석하고 유효성을 검사하는 데 필요한 메타데이터를 정의한다.[11] 기본 XML 규칙을 준수하는 XML 문서는 "구성이 올바르며", 스키마를 준수하는 XML 문서는 "유효하다."[11]

3. 1. XML 기반 언어

XML 기반 언어는 매우 다양하며, 대표적인 예시는 다음과 같다.

이 언어들은 단일하게 규정된 방식으로 정의되어, 사전 정보 없이도 해당 언어로 작성된 문서를 수정하거나 유효성을 검사하는 프로그램을 제작할 수 있다.

XML은 인터넷을 통한 데이터 교환에 널리 사용된다. RSS, Atom, Office Open XML, OpenDocument, SVG, COLLADA, XHTML 등 XML 구문을 사용하는 수백 가지의 문서 형식이 개발되었다.[12] XML은 SOAP, XMPP와 같은 통신 프로토콜의 기본 언어를 제공하며, AJAX 프로그래밍 기법에서 사용되는 메시지 교환 형식 중 하나이다.

Health Level 7, OpenTravel Alliance, FpML, MISMO, National Information Exchange Model 등 다양한 산업 데이터 표준이 XML 및 XML 스키마 사양을 기반으로 한다. 출판 분야에서는 Darwin Information Typing Architecture가 XML 산업 데이터 표준이며, XML은 다양한 출판 형식의 기반을 마련하는 데 널리 사용된다.

XML 응용 분야 중 하나는 IWXXM 표준 기반의 운영 기상(OPMET) 정보 전송이다.[13] XML을 적용한 마크업 언어는 매우 많으며( #XML의 응용 절 참조), XHTML[50], DocBook, RSS, MathML, ebXML, SVG, MusicXML 등이 그 예이다. XML은 이러한 개별 XML에 대한 구문 규칙을 나타내는 스키마 언어도 제공한다. 스키마 자체도 XML의 XML Schema 외에, XML이 아닌 표기법으로 간결하고 이해하기 쉽게 작성할 수 있는 RELAX NG도 있다.

4. 중요 용어

다음은 XML 문서에서 사용되는 주요 용어들이다.


  • '''(유니코드) 문자''': XML 문서는 유니코드 문자로 이루어진 문자열이다.
  • '''프로세서(processor)와 애플리케이션(application)''': ''프로세서''는 마크업을 분석하고 구조화된 정보를 ''애플리케이션''에 넘긴다. 이 프로세서는 흔히 ''XML 파서''라고 불린다.
  • '''마크업(markup)과 내용(content)''': XML 문서를 구성하는 문자들은 ''마크업''과 ''내용''으로 나뉜다. 마크업은 `<`로 시작하여 `>`로 끝나거나, `&`로 시작하여 `;`로 끝나는 문자열이다.
  • '''태그(tag)''': `<`로 시작하여 `>`로 끝나는 마크업 구조이다. 시작 태그, 끝 태그, 빈 엘리먼트 태그의 세 가지 종류가 있다.
  • '''엘리먼트(element)''': 문서의 논리 요소로서, 시작 태그로 시작하여 짝이 되는 끝 태그로 끝나거나, 빈 엘리먼트 태그만으로 이루어진다.
  • '''애트리뷰트(Attribute)''': 이름/값 짝으로 이루어진 마크업 구조로 시작 태그 또는 빈 엘리먼트 태그 속에 위치한다.
  • '''XML 선언''': XML 문서는 자신에 대한 정보(버전, 인코딩 등)를 선언하는 것으로 시작할 수 있다.


```xml


5. 문자와 이스케이프

XML 문서는 유니코드 문자로만 구성된다. 특별히 제외된 제어 문자(control characters)를 제외하면, 유니코드에 정의된 어떤 문자든 XML 문서 내용에 나타날 수 있다.

XML은 문서의 ''인코딩''을 인식하고 출력하는 기능을 포함한다. 또한, XML은 직접 포함하기 어려운 문자를 표현하기 위한 ''이스케이프'' 기능을 제공한다. 예를 들어 다음과 같은 경우가 있다.


  • `<` 와 `&` 문자는 주요 구문 표시자이므로, CDATA 섹션 외부의 콘텐츠에는 직접 나타날 수 없다.
  • 일부 문자 인코딩은 유니코드의 하위 집합만 지원한다.
  • 작성자가 해당 문자를 입력할 수 없는 경우도 있다.
  • 글리프가 다른 문자와 시각적으로 구별하기 어려운 경우도 있다.


XML에서는 이러한 문제를 해결하기 위해 다음과 같은 5개의 미리 정의된 엔티티를 제공한다.

실체 참조실체실체의 설명
`&lt;`<보다 작음 (less than)
`&gt;`>보다 큼 (greater than)
`&amp;`&앰퍼샌드 (ampersand)
`&apos;`'아포스트로피 (apostrophe)
`&quot;`"쿼테이션 마크 (quotation mark)



예를 들어, "AT&T"와 같이 회사 이름에 앰퍼샌드를 표현하기 위해 `&amp;`를 사용할 수 있다.

```xml

<회사이름>AT&amp;T

```

미리 정의된 엔티티 외에도, ''숫자 문자 참조''를 사용하여 허용된 모든 유니코드 문자를 표현할 수 있다. 예를 들어, 유니코드에서 16진수 4E2D 또는 10진수 20,013인 중국어 문자 "中"은 `&#20013;` 또는 `&#x4e2d;`로 표현할 수 있다.

하지만, `&#0;` (널 문자)는 숫자 문자 참조를 사용하더라도 XML에서 허용되지 않는 제어 문자 중 하나이므로 사용할 수 없다.[19]

5. 1. 인코딩 감지

유니코드 문자 집합은 UTF-8, UTF-16 등 다양한 방식으로 부호화(인코딩)될 수 있다.[104] XML은 유니코드가 정의한 어떤 인코딩이든 사용하는 것을 허용하며, 문자들이 유니코드에 나타나는 다른 인코딩도 사용할 수 있다. XML은 XML 프로세서가 사전 지식 없이 어느 인코딩이 사용되고 있는지 결정하는 메커니즘을 제공한다.[105]

5. 2. 주석 사용

주석은 다른 마크업 바깥 어디에나 나타날 수 있다. XML 선언 전에는 주석이 올 수 없다. 주석은 ``로 끝난다. SGML과의 호환성을 위해 "--"(이중 하이픈) 문자열은 주석 내에서 허용되지 않으며[20], 주석은 겹쳐질 수 없다. 앰퍼샌드는 주석 내에서 특별한 의미를 갖지 않으므로, 엔티티 및 문자 참조는 인식되지 않으며, 문서 인코딩의 문자 집합 외부의 문자를 나타낼 방법이 없다.

유효한 주석의 예는 다음과 같다.

``

5. 3. 국제어 사용

XML 1.0과 XML 1.1은 요소 이름, 속성, 주석, 문자 데이터, 처리 명령어에서 거의 모든 유니코드 문자를 직접 사용할 수 있도록 지원한다.[11] 이는 XML이 다양한 언어의 텍스트를 포함하는 문서를 작성하는 데 매우 유용하다는 것을 의미한다. 예를 들어, 다음과 같이 한자키릴 문자를 포함하는 XML 문서를 작성할 수 있다.

```xml



<俄语>данные



UTF-8UTF-16과 같은 유니코드 문자 인코딩을 지원하므로, XML은 영어 외 다른 언어를 쉽게 다룰 수 있게 되었다.[51]

6. 웰 폼(Well-formed) 문서와 유효 XML 문서

XML 명세는 XML 문서를 잘 구성된 텍스트로 정의하며, 이는 명세에 제공된 구문 규칙 목록을 충족함을 의미한다.[106]

핵심 사항은 다음과 같다.


  • 문서는 올바르게 인코딩된 합법적인 유니코드 문자만 포함한다.
  • `<` 및 `&`와 같은 특수 구문 문자는 마크업 경계 역할을 수행할 때를 제외하고는 나타나지 않는다.
  • 요소를 구분하는 시작 태그, 종료 태그 및 빈 요소 태그는 올바르게 중첩되어 있으며, 생략된 태그가 없고 겹치는 태그도 없다.
  • 태그 이름은 대소문자를 구분한다. 시작 태그와 종료 태그는 정확히 일치해야 한다.
  • 태그 이름은 `!"#$%&'()*+,/;<=>?@[\]^`

    ~` 문자를 포함할 수 없으며 공백 문자를 포함할 수 없으며, "-" ".", 또는 숫자 숫자로 시작할 수 없다.
  • 단일 루트 요소가 다른 모든 요소를 포함한다.


  • XML 문서의 정의는 well-formedness 규칙을 위반하는 텍스트를 제외한다. 즉, XML이 아니다. 이러한 위반 사항을 발견한 XML 프로세서는 이러한 오류를 보고 정상적인 처리를 중단해야 한다.[21]

    XML 명세는 유효한 XML 문서를 잘 구성된 XML 문서로 정의하며, 이는 또한 문서 형식 정의 (DTD) 규칙을 준수한다.[23][24]

    XML 문서의 정당성 수준에는 정형 XML 문서와 유효한 XML 문서의 두 가지 수준이 있다.

    ; 정형 XML 문서

    : 정형 XML 문서(well-formed XML document)는 XML의 구문 규칙 전부를 준수한다. 예를 들어, 문서 내의 어떤 요소가 시작 태그는 있지만 대응하는 종료 태그가 누락된 경우, 해당 문서는 '''정형'''(well-formed)이 아니다. 정형이 아닌 문서는 XML 문서로 간주되지 않는다.[106]

    ; 유효한 XML 문서

    : 유효한 XML 문서(valid XML document)는 정형 XML 문서로서의 조건을 만족하는 것에 더해, 문서의 논리적 구조를 규정하는 규칙을 준수한다. 이러한 규칙은 RELAX NG나 XML Schema, Document Type Definition(DTD, 문서 형식 정의) 등의 스키마 언어로 정의된 스키마로 정한다. 예를 들어, 어떤 XML 문서가 스키마에 정의되지 않은 요소(태그)를 포함하고 있는 경우, 해당 XML 문서를 유효하다고 할 수 없다.

    7. 스키마(Schema)와 유효화(Validation)

    XML 문서는 잘 구성된(Well-formed) 형태일 뿐만 아니라, 유효(Valid)할 수도 있다. 유효하다는 것은 문서가 DTDXML 스키마와 같은 스키마에 정의된 규칙을 따른다는 것을 의미한다. 예를 들어, 문서에 정의되지 않은 태그가 포함되어 있으면 유효하지 않다.[106]

    XML 프로세서는 유효성을 검사하는 유효화 프로세서와 그렇지 않은 비유효화 프로세서로 분류된다.[106] 유효화 프로세서는 유효성 오류를 보고할 수 있지만, 정상적인 처리는 계속할 수 있다.

    DTD는 스키마 또는 문법의 한 예시이다.[106] XML 1.0 발표 이후, XML 스키마 언어 분야의 연구가 활발히 진행되었다. 이러한 스키마 언어들은 일반적으로 문서에서 사용 가능한 엘리먼트 종류, 엘리먼트에 적용 가능한 속성 종류, 나타나는 순서, 허용되는 부모-자식 관계 등을 제한한다.

    XML의 주요 목적은 임의의 데이터를 직렬화하여 저장, 전송 및 재구성하는 것이다. 서로 다른 시스템이 정보를 교환하려면 파일 형식에 동의해야 하는데, XML은 이 과정을 표준화하여 정보를 표현하기 위한 공통어와 유사한 역할을 한다.[11]

    마크업 언어로서 XML은 정보를 레이블링하고 분류하며 구조적으로 구성한다.[11] XML 태그는 데이터 구조를 나타내며 메타데이터를 포함한다. 태그 안에는 XML 표준에서 지정한 방식으로 인코딩된 데이터가 있다.[11] XML 스키마(XSD)는 XML을 해석하고 유효성을 검사하는 데 필요한 메타데이터를 정의하며, 이를 표준 스키마라고도 한다.[11] 기본 XML 규칙을 준수하는 XML 문서는 "구성이 올바르며", 스키마를 준수하는 XML 문서는 "유효하다."[11]

    7. 1. Document Type Definition (DTD)

    SGML에서 유래한 문서 형식 정의(Document Type Definition, DTD)는 XML을 위한 가장 오래된 스키마 언어이다.

    DTD의 장점은 다음과 같다:

    • XML 1.0 표준에 포함되어 있어 널리 지원된다.[50]
    • 엘리먼트 기반 스키마 언어들에 비해 매우 간결하여 한 화면에 더 많은 정보를 표현할 수 있다.[50]
    • 문서 형식을 정의함으로써, 문서에 대한 모든 제약을 하나의 컬렉션에 모은다.[50]


    DTD의 제한점은 다음과 같다:

    • XML 네임스페이스와 같은 XML의 새로운 기능들에 대한 직접적인 지원이 없다.[50]
    • 표현성이 부족하다. XML DTD는 SGML DTD보다 간단해서 정규 문법으로는 표현하지 못하는 구조가 있다. DTD는 기초적인 자료형만을 지원한다.[50]
    • 가독성이 부족하다. DTD 설계자는 전형적으로 파라미터 엔티티를 많이 사용하는데, 이는 복잡한 문법을 정의하기는 쉽게 하지만 명료성이 떨어진다.[50]

    7. 2. XML 스키마

    W3C에서 개발한 DTD의 후속 스키마 언어이다. 비공식적으로 '''XSD'''라고 불리기도 하는데, 이는 XML 스키마의 인스턴스 (스키마)를 의미하는 "XML Schema Definition"의 두문자어이다.

    XML 스키마는 DTD보다 강력한 기능을 제공하고, 풍부한 데이터형을 다룰 수 있다. 또한 XML 문서의 논리적 구조에 대해 DTD보다 더 자세한 제약을 기술할 수 있으며, XML 기반 형식을 사용하므로 일반적인 XML 도구로 처리할 수 있다는 장점이 있다.[50] DTD보다 상세한 유효성 검증의 틀 안에서 유효성 검증이 이루어지며, XML을 이용한 마크업 언어의 스키마 기술 능력도 DTD에 비해 매우 높다.[50]

    하지만 XML 스키마의 유효성 검증기를 구현하는 작업에는 단순히 XML 문서를 읽는 능력보다 훨씬 많은 지식과 능력이 필요하다. XML 스키마에 대해서는 찬반 양론이 존재하며, 다음과 같은 비판도 있다.

    • XML 스키마의 사양은 매우 방대하여 이해하기 어렵고, 유효성 검증기를 구현하는 것도 어렵다.
    • XML 스키마로 스키마를 기술할 때 XML에 준거한 구문으로 기술해야 하는 것은 장황하여, 스키마를 이해하고 기술하는 것을 DTD보다 힘들게 만든다.
    • XML 문서의 구문 분석을 한 후에 행하는 XML 스키마의 스키마에 의한 유효성 검증은 비용이 많이 들 수 있다. 특히 크기가 큰 XML 문서의 유효성 검증을 할 때에는 심각한 문제가 될 수 있다.
    • XML 스키마의 데이터 모델링 능력은 매우 제한되어 있다. 속성의 내용에 따라 그 요소의 내용 모델을 변경할 수 없다.
    • XML 스키마에서의 형 파생 모델은 매우 제한된 능력밖에 없다. 특히 확장에 의한 파생은 상당히 사용하기 어렵다.
    • 데이터베이스와 연동하기 위한 데이터 전송 기능은 불가해한 생각에 의해 실현되고 있다. nillability(SQL 데이터베이스 용어로 말하는 NULL에 상당하는 상태를 취할 수 있다는 특성)는 갖추고 있지만, 출판 업계의 요구는 충족하지 못한다.
    • key/keyref/uniqueness의 기구는 데이터형을 고려하지 않는다.
    • 스키마 검증 후 정보 집합 (PSVI, Post Schema Validation Infoset)의 개념은 표준 XML 표현이나 응용 프로그래밍 인터페이스(API)를 갖지 않는다. 이 때문에 유효성의 재검증을 하지 않는 경우 벤더 비의존적인 생각에 반한다.

    7. 3. RELAX NG

    RELAX NG (정규 언어 for XML 차세대)는 OASIS에서 개발하고, ISO/IEC 19757 – DSDL의 표준(파트 2: ''정규 문법 기반 유효성 검사'')으로 지정된 스키마 언어이다.[56] RELAX NG 스키마는 XML 기반 구문 또는 보다 간결한 비 XML 구문으로 작성할 수 있으며, 두 구문은 동형이며 제임스 클락의 변환 도구인 [http://www.thaiopensource.com/relaxng/trang.html Trang]은 정보 손실 없이 두 구문 간에 변환할 수 있다.

    RELAX NG는 XML 스키마보다 간단한 정의 및 유효성 검사 프레임워크를 가지고 있어 사용 및 구현이 더 쉽다.[56] 또한 데이터 유형 프레임워크 플러그인을 사용할 수 있는 기능을 갖추고 있다.[56] 예를 들어, RELAX NG 스키마 작성자는 XML 문서의 값이 XML 스키마 데이터 유형의 정의를 준수하도록 요구할 수 있다.[56]

    7. 4. Schematron

    Schematron은 XML 문서 내 패턴의 존재 또는 부재에 대한 단언을 만드는 언어이다.[53] 일반적으로 XPath 표현식을 사용한다. Schematron은 현재 ISO/IEC 19757 – ISO/IEC 19757 – DSDL의 3부: ''규칙 기반 유효성 검사'') 표준이다.[53]

    8. 관련 규격


    • XML 네임스페이스는 동일한 문서가 서로 다른 어휘에서 가져온 XML 요소와 속성을 포함할 수 있도록 하여 이름 충돌이 발생하지 않도록 한다. XML 네임스페이스는 XML 규격 자체의 일부는 아니지만, 사실상 모든 XML 소프트웨어가 XML 네임스페이스를 지원한다.[11]
    • XML 기본은 `xml:base` 속성을 정의하며, 단일 XML 요소 범위 내에서 상대 URI 참조를 해결하기 위한 기준으로 설정할 수 있다.
    • XML 정보 집합(XML 인포셋)은 ''정보 항목'' 측면에서 XML 문서에 대한 추상 데이터 모델이다. 인포셋은 XML 언어의 규격에서 해당 언어가 허용하는 XML 구문에 대한 제약 조건을 설명하는 데 편리하게 사용된다.
    • XSL(확장 가능한 스타일시트 언어)은 XML 문서를 변환하고 렌더링하는 데 사용되는 언어군으로, 세 부분으로 나뉜다.
    • XSLT(XSL 변환)는 XML 문서를 다른 XML 문서나 HTML, 일반 텍스트 또는 XSL-FO와 같은 다른 형식으로 변환하기 위한 XML 언어이다. XSLT는 입력 XML 문서의 구성 요소, 주로 요소와 속성을 주소 지정하는 데 사용하는 XPath와 매우 밀접하게 결합되어 있다.
    • XSL-FO(XSL 서식 객체)는 XML 문서를 렌더링하기 위한 XML 언어이며, 종종 PDF를 생성하는 데 사용된다.
    • XPath(XML 경로 언어)는 XML 문서의 구성 요소(요소, 속성 등)를 주소 지정하기 위한 비 XML 언어이다. XPath는 다른 핵심 XML 규격 및 XML로 인코딩된 데이터에 접근하기 위한 프로그래밍 라이브러리에서 널리 사용된다.
    • XQuery(XML 쿼리)는 XPath 및 XML 스키마에 강력하게 기반을 둔 XML 쿼리 언어이다. XML에 접근, 조작 및 반환하는 방법을 제공하며, 주로 XML 데이터베이스에 대한 쿼리 언어로 간주된다.
    • XML 서명은 XML 콘텐츠에 대한 디지털 서명을 생성하기 위한 구문 및 처리 규칙을 정의한다.
    • XML 암호화는 XML 콘텐츠를 암호화하기 위한 구문 및 처리 규칙을 정의한다.
    • XML 모델(파트 11: ISO/IEC 19757 – DSDL의 ''스키마 연결'')은 모든 XML 문서를 위에 언급된 스키마 유형 중 하나와 연결하는 수단을 정의한다.

    9. 프로그래밍 인터페이스

    XML 처리를 위한 다양한 API가 개발되었으며, 일부는 표준화되었다.[52]

    XML 처리를 위한 기존 API는 다음과 같이 분류된다.


    • 프로그래밍 언어에서 액세스할 수 있는 스트림 지향 API (예: SAX, StAX)
    • 프로그래밍 언어에서 액세스할 수 있는 트리 탐색 API (예: DOM)
    • XML 데이터 바인딩 (XML 문서와 프로그래밍 언어 객체 간의 자동 변환 제공)
    • XSLTXQuery와 같은 선언적 변환 언어
    • LINQ 및 Scala와 같은 범용 프로그래밍 언어에 대한 구문 확장


    스트림 지향 API는 더 적은 메모리를 필요로 하며, XML 문서의 선형 탐색을 기반으로 하는 특정 작업의 경우 다른 대안보다 빠르고 간단하다. 트리 탐색 및 데이터 바인딩 API는 일반적으로 훨씬 더 많은 메모리를 사용해야 하지만 프로그래머가 사용하기에 더 편리하다고 여겨진다. 일부는 XPath 표현식을 사용하여 문서 구성 요소의 선언적 검색을 포함한다.

    프로그래머응용 소프트웨어가 XML 문서를 처리하는 전통적인 수단은 다음과 같다.

    • 프로그래밍 언어와 SAX API를 사용한다.
    • 프로그래밍 언어와 DOM API를 사용한다.
    • 변환 엔진과 필터를 사용한다.


    최근에는 다음과 같은 XML 문서 처리 기법도 개발되어 사용되고 있다.

    • 풀 파싱(Pull Parsing)
    • 데이터 바인딩(Data Binding)


    Simple API for XML(SAX)는 어휘 분석을 수행하고 이벤트 구동으로 처리하는 API이다. SAX를 사용하면 XML 문서는 처음부터 순차적으로 읽히며, 그 내용은 프로그래머가 구현한 핸들러 객체의 다양한 메서드에 대한 콜백으로 보고된다. SAX를 사용한 XML 문서 처리는 빠르며, 적은 컴퓨터 자원을 효율적으로 사용하여 매우 큰 크기의 XML 문서를 처리할 수 있다.

    SAX를 사용할 때 XML 문서에 대해 임의 접근을 수행하여 정보를 가져오기가 어렵다. 따라서 SAX를 사용할 때 프로그래머는 XML 문서의 어느 부분이 현재 처리 대상이 되는지 파악하기 위한 기구를 구현해야 한다. SAX는 처리 대상이 되는 XML 문서 중 특정 종류의 정보가 어느 부분에 나타나는지에 관계없이 항상 동일하게 처리되는 경우에 사용하는 것이 바람직하다.

    문서 객체 모델(DOM)은 인터페이스 지향의 API로, XML 문서의 각 부분을 표현하는 노드 객체들의 집합으로 이루어진 트리 구조처럼, XML 문서 전체를 탐색할 수 있도록 설계되었다. DOM을 사용하면 XML 문서에 대해 임의 접근을 수행하여 정보를 쉽게 가져올 수 있다.

    DOM에서 XML 문서 전체에 해당하는 `Document` 객체는 XML 문서를 XML 프로세서가 처리하여 생성할 수도 있고, 프로그래머가 프로그래밍하여 생성할 수도 있다. DOM의 `Node` (노드)의 다양한 유형의 자료형은 DOM 사양에서 추상적으로 인터페이스로 정의되어 있다. `Node` 자료형의 구현프로그래밍 언어에 고유한 언어 바인딩을 제공한다.

    DOM 구현은 크기가 큰 XML 문서를 처리할 때 많은 메모리를 사용한다. 이는 DOM 구현이 일반적으로 XML 문서 전체에서 객체의 트리 구조를 구축하여 메모리에 로드(전개)한 다음 DOM을 통해 처리할 수 있도록 하기 때문이다.

    자바에서는 표준 라이브러리를 구성하는 여러 패키지에서 DOM이 구현되어 있으며, 자바 프로그래머는 표준 라이브러리의 DOM을 사용할 수 있다. DOM 사양은 월드 와이드 웹 컨소시엄(W3C)에서 제정되었으므로 DOM의 핵심인 `Node` 및 `Document`와 같은 인터페이스와 직렬화 (출력)와 같은 기능을 제공하기 위한 인터페이스는 패키지 `org.w3c.dom.*`에 포함되어 있다.

    풀 파싱은 XML 문서를 처음부터 순서대로 읽어 이터레이터 패턴의 디자인 패턴을 사용하여 항목의 일련의 흐름으로 취급하는, 최근에 서서히 보급되어 온 기법이다.[60][61] 풀 파싱 기법으로 재귀 하강 파서를 구현할 수 있다.

    재귀 하강 파서에서는 파싱을 실행하는 프로그램이 파싱 대상이 되는 XML 문서의 구조와 유사하다. 그리고 파싱의 중간 결과를 얻을 수 있는데, 이 중간 결과는 파싱을 실행하는 메서드 내의 지역 변수(로컬 변수)로 사용할 수 있다. 또는 낮은 수준의 메서드의 인수로 전달하거나, 높은 수준의 메서드로의 반환 값으로 반환할 수 있다.

    풀 파싱 기법을 제공하는 구현은 다음과 같다.

    • XML 스트리밍 API (StAX) - 자바
    • SimpleXML - PHP
    • `System.Xml.XmlReader` - .NET 프레임워크


    예를 들어, 자바의 StAX 프레임워크에서는 본질적인 「반복자」(이터레이터)를 작성하여 사용할 수 있다. 풀 파싱으로 생성되는 「반복자」는 XML 문서 내의 다양한 요소, 속성, 데이터를 순서대로 방문한다. 「반복자」를 사용하는 프로그램은 처리 중에 현재 항목(예: 요소의 시작, 요소의 종료, 텍스트)을 조사하고, 그 특성(예: 요소의 이름, 네임스페이스, 속성 값, 텍스트 내용)을 조사한다. 그리고 반복자에게 「다음」항목으로 이동하도록 지시할 수도 있다. 프로그램은 이처럼 XML 문서를 훑어보면서 문서에서 정보를 추출할 수 있다.

    풀 파싱 기법의 두드러진 장점은 XML 문서를 파싱하는 DOM 기법에 비해 매우 빠르고, 메모리 사용량이 매우 적다는 것이다. 또 다른 장점은, 재귀 하강 방식은 파싱을 실행하는 프로그램 내에서 데이터를 형식화된 변수로 보관하는 데 적합하다는 것이다. SAX에서는 예를 들어, 프로그래머가 직접 처리 중인 요소의 조상 요소군을 저장하는 스택 내에 중간 데이터를 보관하는 코드를 프로그래밍해야 하는 경우가 많다. 이에 반해, 풀 파싱 기법을 사용하여 XML 문서를 처리하는 프로그램은 SAX를 사용하는 프로그램보다 훨씬 단순하고 이해하기 쉬우며 유지보수가 용이한 경우가 많다.

    XML 문서를 처리하는 또 다른 API는 XML 데이터 바인딩이며, XML 데이터 바인딩을 사용하면 XML 문서를 해당 문서 형식에 맞는 강력한 형식의 프로그래밍 언어 데이터 구조 (프로그램의 소스 코드)를 생성할 수 있다. 인터페이스 지향적인 DOM과는 대조적인 방법이다. 데이터 바인딩의 구현 예는 다음과 같다.

    • Relaxer[62]
    • Java Architecture for XML Binding (JAXB)[63]

    10. 비판

    XML과 그 확장 기능은 장황함, 복잡성, 중복성으로 인해 비판을 받아왔다.[45] XML의 트리 모델을 프로그래밍 언어나 데이터베이스의 타입 시스템에 매핑하는 것은 어려울 수 있으며, 특히 XML이 응용 프로그램 간에 고도로 구조화된 데이터를 교환하는 데 사용될 때 더욱 그렇다. 이는 XML의 주요 설계 목표가 아니었다.

    JSON, YAML, S-표현식과 같은 더 간단한 대안들이 제시되기도 한다.[47] 이들은 문서보다는 고도로 구조화된 데이터를 나타내는 데 초점을 맞춘다. 그러나 W3C 표준화 XML 스키마 사양은 더 간단한 직렬화 형식에 비해 더 광범위한 구조화된 XSD 데이터 유형을 제공하며, XML 네임스페이스를 통해 모듈성과 재사용성을 제공한다.

    XML 문서의 구문이 중복되어 저장 장치, 전송 및 처리 비용 측면에서 효율적인 운영에 악영향을 미칠 수 있다는 비판도 있다.[81][82][83] 또한, XML은 전신인 표준 범용 마크업 언어보다 단순화되었지만, 그 처리가 가볍지 않아 인터넷 프로토콜 등 속도와 경량화가 요구되는 분야에서는 채택이 보류되는 경우가 종종 있다.[86]

    XML이 채택하고 있는 계층적 데이터 모델은 관계형 모델이나 객체 지향 그래프에 비해 제한이 크다는 지적도 있다.[87][88]

    참조

    [1] IETF XML Media Types Internet Engineering Task Force 2014-07-01
    [2] 웹사이트 What is XML ? https://www.geeksfor[...] 2024-10-11
    [3] 웹사이트 Extensible Markup Language (XML) 1.0 (Fifth Edition) http://www.w3.org/TR[...] World Wide Web Consortium 2010-08-22
    [4] 웹사이트 Extensible Markup Language (XML) 1.0 https://www.w3.org/T[...] 1998-02-10
    [5] 웹사이트 XML and Semantic Web W3C Standards Timeline https://web.archive.[...] 2016-08-14
    [6] 웹사이트 Document license – 2015 version https://www.w3.org/C[...] 2020-07-24
    [7] 웹사이트 1.0 Origin and Goals http://www.w3.org/TR[...] W3C 2016-08-14
    [8] 논문 Extremes of XML https://web.archive.[...] 2013-06-01
    [9] 웹사이트 What is XML (Extensible Markup Language)? https://www.techtarg[...] 2024-10-10
    [10] 웹사이트 XML Definition & Facts Britannica https://www.britanni[...] 2024-10-10
    [11] 서적 XML for Dummies Wiley 2005
    [12] 웹사이트 XML Applications and Initiatives http://xml.coverpage[...] 2017-11-16
    [13] 논문 IWXXM Amendment (ICAO Meteorological Information Exchange Model) http://dx.doi.org/10[...] 2024-03-01
    [14] 웹사이트 Characters http://www.w3.org/TR[...] World Wide Web Consortium 2012-11-23
    [15] 웹사이트 Characters http://www.w3.org/TR[...] World Wide Web Consortium 2010-08-22
    [16] 웹사이트 Characters vs. Bytes http://www.tbray.org[...] 2017-11-16
    [17] 웹사이트 Autodetection of Character Encodings (Non-Normative) http://www.w3.org/TR[...] W3C 2017-11-16
    [18] 웹사이트 Extensible Markup Language (XML) 1.0 (Fifth Edition) http://www.w3.org/TR[...] 2017-11-16
    [19] 웹사이트 W3C I18N FAQ: HTML, XHTML, XML and Control Codes http://www.w3.org/In[...] 2017-11-16
    [20] 웹사이트 Extensible Markup Language (XML) http://www.w3.org/TR[...] 2017-11-16
    [21] 웹사이트 The history of draconian error handling in XML http://diveintomark.[...] 2013-07-18
    [22] 웹사이트 There are No Exceptions to Postel's Law [dive into mark] http://diveintomark.[...] 2013-04-22
    [23] 웹사이트 XML Notepad https://web.archive.[...] 2017-11-16
    [24] 웹사이트 XML Notepad 2007 https://www.microsof[...] 2017-11-16
    [25] 웹사이트 Push, Pull, Next! http://www.xml.com/p[...] 2017-11-16
    [26] 웹사이트 XML Serialization in the .NET Framework http://msdn.microsof[...] 2009-07-31
    [27] 웹사이트 Processing XML with E4X https://web.archive.[...] Mozilla Foundation 2010-07-27
    [28] 웹사이트 XML Shell: Core Syntax http://www.xmlsh.org[...] 2010-08-22
    [29] 웹사이트 Resource Description Framework (RDF): Concepts and Abstract Syntax http://www.w3.org/TR[...] W3C 2010-08-22
    [30] 논문 ISO/IEC 19757-3 ISO/IEC 2006-06-01
    [31] 논문 A conversation with Tim Bray: Searching for ways to tame the world's vast stores of information https://web.archive.[...] Association for Computing Machinery's "Queue site" 2006-04-16
    [32] 서적 Interactive multimedia https://archive.org/[...] Cobb Group
    [33] 웹사이트 XML is 10 http://drmacros-xml-[...] 2017-11-16
    [34] 문서 The working group was originally called the "Editorial Review Board." http://www.w3.org/TR[...]
    [35] 웹사이트 Reports From the W3C SGML ERB to the SGML WG And from the W3C XML ERB to the XML SIG http://www.w3.org/XM[...] W3C 2009-07-31
    [36] 웹사이트 Oracle Technology Network for Java Developers – Oracle Technology Network http://java.sun.com/[...] 2017-11-16
    [37] 웹사이트 Extensible Markup Language (XML) http://www.w3.org/TR[...] W3C 1996-11-14
    [38] 웹사이트 Closing Keynote, XML 2006 http://2006.xmlconfe[...] 2006.xmlconference.org 2006-12-07
    [39] 웹사이트 Extensible Markup Language (XML) 1.0 (Third Edition) http://www.w3.org/TR[...] W3C 2010-08-22
    [40] 웹사이트 Extensible Markup Language (XML) 1.1 (Second Edition), Rationale and list of changes for XML 1.1 http://www.w3.org/TR[...] 2012-01-20
    [41] 서적 Effective XML https://archive.org/[...] Addison-Wesley
    [42] 웹사이트 Extensible Markup Language (XML) 1.1 (Second Edition) http://www.w3.org/TR[...] W3C 2010-08-22
    [43] 웹사이트 Extensible Markup Language, SW (XML-SW) http://www.textualit[...] 2002-02-10
    [44] 웹사이트 MicroXML Community Group https://www.w3.org/c[...] 2023-08-05
    [45] 웹사이트 XML: The Angle Bracket Tax http://www.codinghor[...] 2008-05-11
    [46] 웹사이트 The Myth of Self-Describing XML http://workflow.heal[...] 2003-09
    [47] 웹사이트 What usable alternatives to XML syntax do you know? https://stackoverflo[...]
    [48] 웹사이트 XML stands for Extensible Markup Language. The X is for the first syllable of Extensible. eXtensible is a spelling error. http://lists.xml.org[...]
    [49] 웹사이트 拡張可能なマーク付け言語 (XML) 1.0 http://xml.coverpage[...] World Wide Web Consortium
    [50] 문서 XHTML에 대한 설명
    [51] 문서 XML 문서 처리에 대한 설명
    [52] 문서 XML 문서 처리 방법
    [53] 문서 혼합 내용이 아닌 XML 요소에 대한 설명
    [54] 서적 株式会社日本ユニテック
    [55] 서적 株式会社日本ユニテック
    [56] 서적 株式会社日本ユニテック
    [57] 서적 株式会社日本ユニテック
    [58] 웹사이트 xml-dev - Fw: An I-D for text/xml, application/xml, etc http://lists.xml.org[...]
    [59] 웹사이트 JavaプラットフォームAPI仕様 http://java.sun.com/[...]
    [60] 서적 Learning XSLT O'Reilly Media
    [61] 웹사이트 Push, Pull, Next! http://www.xml.com/p[...]
    [62] 웹사이트 http://www.asahi-net[...]
    [63] 웹사이트 http://java.sun.com/[...]
    [64] 보고서 平成22年度 新ICT利活用サービス創出支援事業(電子出版の環境整備)メタデータ情報基盤構築事業)報告書 https://dl.ndl.go.jp[...] 인포콤 주식회사 2011-03-31
    [65] 웹사이트 JIS X 4160:2007「XMLパス言語」附属書 B https://webdesk.jsa.[...]
    [66] 웹사이트 XML Schema 1.1 Part 1: Structures https://www.w3.org/T[...]
    [67] 웹사이트 RELAX NG and W3C XML Schema http://www.imc.org/i[...] 2002-06-04
    [68] 웹사이트 A conversation with Tim Bray: Searching for ways to tame the world’s vast stores of information https://dl.acm.org/d[...] Association for Computing Machinery's "Queue site"
    [69] 서적 Interactive multimedia Cobb Group
    [70] 문서 XML Working Group에 대한 설명 및 참고 링크
    [71] 웹사이트 Reports From the W3C SGML ERB to the SGML WG And from the W3C XML ERB to the XML SIG https://www.w3.org/X[...]
    [72] 웹사이트 Extensible Markup Language (XML) - W3C Working Draft 14-Nov-96 https://www.w3.org/T[...]
    [73] 웹사이트 W3CがXML 1.0を勧告 https://internet.wat[...] INTERNET Watch 2012-09-05
    [74] 간행물 拡張可能なマーク付け言語(XML)1.0 2005
    [75] 웹사이트 Extensible Markup Language (XML) 1.1 (Second Edition) - Rationale and list of changes for XML 1.1 https://www.w3.org/T[...] W3C 2006-12-21
    [76] 서적 Effective XML http://www.cafeconle[...] Addison-Wesley 2004
    [77] 뉴스 Small company makes big claims on XML patents - CNET News.com https://archive.is/2[...]
    [78] 뉴스 XML co-inventor Bray responds to patent assault | Between the Lines | ZDNet.com https://www.zdnet.co[...]
    [79] 웹사이트 XML-QL Proposal discussing XML benefits https://www.w3.org/T[...]
    [80] 서적 Processing XML with Java(tm): a guide to SAX, DOM, JDOM, JAXP, and TrAX Addison-Wesley
    [81] 웹사이트 Efficient XML Interchange Evaluation https://www.w3.org/T[...] 2009-04-07
    [82] 서적 XML in a Nutshell: A Desktop Quick Reference O'Reilly
    [83] 웹사이트 Parsing Performance Report https://fi.dev.java.[...]
    [84] 서적 Database Programming Languages: 10th international symposium, DBPL 2005 Trondheim, Norway Springer
    [85] 웹사이트 YAML Specification http://yaml.org/spec[...]
    [86] RFC
    [87] 문서 階層型モデルは木構造の固定的な単一の視点による見方しか提供しない
    [88] 서적 Digital Libraries: People, Knowledge, and Technology Springer
    [89] 서적 Voice, text, hypertext: emerging practices in textual studies University of Washington Press
    [90] 웹사이트 http://www-128.ibm.c[...]
    [91] 웹사이트 The Myth of Self-Describing XML http://workflow.heal[...] 2007-05-12
    [92] 문서 多義語
    [93] 웹사이트 Does XML Suck? http://xmlsucks.org/[...] 2007-12-15
    [94] 웹인용 XML 1.0 Specification http://www.w3.org/TR[...] World Wide Web Consortium 2010-08-22
    [95] 웹사이트 XML and Semantic Web W3C Standards Timeline https://web.archive.[...] 2012-02-04
    [96] 웹인용 W3C DOCUMENT LICENSE http://www.w3.org/Co[...]
    [97] 웹인용 XML 1.0 Origin and Goals http://www.w3.org/TR[...] 2009-07
    [98] 간행물 ISO/IEC 19757-3 ISO/IEC 2006-06-01
    [99] 웹사이트 A conversation with Tim Bray: Searching for ways to tame the world's vast stores of information http://www.acmqueue.[...] Association for Computing Machinery's "Queue site" 2005-02
    [100] 서적 Interactive multimedia https://archive.org/[...] Cobb Group
    [101] 웹사이트 XML is 10 http://drmacros-xml-[...] 2017-11-16
    [102] 웹사이트 Oracle Technology Network for Java Developers - Oracle Technology Network - Oracle http://java.sun.com/[...] 2017-11-16
    [103] 웹사이트 Extensible Markup Language (XML) http://www.w3.org/TR[...] W3.org 1996-11-14
    [104] 웹인용 Characters vs. Bytes http://www.tbray.org[...]
    [105] 웹인용 Autodetection of Character Encodings http://www.w3.org/TR[...]
    [106] 문서 파서: 컴퓨터에 입력된 정보를 번역, 처리하는 프로그램



    본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
    모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
    하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
    따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

    문의하기 : help@durumis.com