XML
XML(엑스엠엘)은 Extensible Markup Language의 약자로서, 홈페이지 제작에 사용되는 "확장된 HTML 언어"이다. HTML 언어는 미리 정의된 태그만 사용할 수 있지만, XML 언어는 필요한 태그(tag)를 개발자가 새로 정의하여 사용할 수 있다. 다양한 시스템을 연계하여 데이터를 주고받기 위해 XML 기반의 SOAP 또는 REST 방식을 사용한다.
개요
W3C에서 여러 특수 목적의 마크업 언어를 만드는 용도에서 권장되는 다목적 마크업 언어이다. 첨언하자면 마크업 언어는 태그 등을 이용하여 데이터의 구조를 기술하는 언어의 한 가지이다. 가장 친숙하고 흔하게 접할 수 있는 마크업 언어로 HTML이 있다. 또한 XML은 SGML의 단순화된 부분집합으로, 다른 많은 종류의 데이터를 기술하는 데 사용할 수 있다.
등장배경
XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌다. XML을 이용하면 어디부터 어디까지가 데이터 이름이고 어디부터 어디까지가 실제 데이터이며 어디부터 어디까지가 데이터 단위인지도 표현이 가능하다. 즉, 데이터에 의미를 부여하는 메타데이터를 기술할 수 있다. XML은 바로 이러한 목적으로 탄생했다.
역사
XML은 SGML의 애플리케이션 프로파일이다.
동적 정보 표시를 위한 SGML의 다재다능함은 인터넷의 성장 이전인 1980년대 말에 초기 디지털 미디어 출판사들에 의해 인지되었다. 1990년대 중순, 일부 SGML 실천자들은 당시 새로운 월드 와이드 웹을 경험하였고 웹이 성장할수록 마주칠 가능성이 있던 문제들 중 일부를 SGML이 해결해줄 것이라 믿었다. 댄 커널리는 1995년 당시 직원으로 있었을 때 SGML을 W3C의 활동 목록에 추가하였다. 작업은 1996년 중순 썬 마이크로시스템즈의 엔지니어 존 보삭이 선언문을 만들고 협업자들을 모집하였을 때 시작되었다. 보삭은 SGML과 웹에 모두 경험이 있는 사람들의 작은 공동체와 잘 어울렸다.
주요 디자인 결정은 1996년 7월과 11월 사이 도달했으며, 당시 XML 사양의 최초 워킹 드래프트가 출판되었다. 추가 디자인 작업이 1997년에 계속되었으며 XML 1.0은 1998년 2월 10일 W3C 권고안이 되었다. [1]
특징
- XML은 구조적인 데이터를 위한 것이다.
- XML은 다소 HTML 같이 보인다.
- XML은 텍스트이며, 읽히는 것만을 뜻하지 않는다.
- XML은 크기가 커진다.
- XML은 기술의 집합이다.
- XML은 새로운 기술이 아니라 발전한 기술이다.
- XML은 HTML에서 XHTML로 이끌었다.
- XML은 모듈식이다.
- XML은 RDF와 시맨틱 웹의 토대이다.
- XML은 라이선스 제약이 없으며, 플랫폼이 독립적이고, 많은 지원이 있다.[1]
활용
XML은 어디까지나 구조를 가지면서 메타데이터를 기술할 수 있는 다목적 문서 형식 표준이다. 이를 원하는 용도에 맞게 DTD, XML Schema를 작성하고 표준으로 제정하면 XML에 기반한 특수 목적용 마크업 언어가 된다. (무리가 있는 비유지만) XML과 XML을 사용하는 다른 마크업 언어는 마치 한국어와 한국어로 쓰인 시, 소설, 수필, 학술논문, 영화대본, 신문기사 등과 유사한 관계라고 할 수 있다.
누구나 알 수 있는 이러한 것의 대표적인 예로 초기의 RSS를 들 수 있다. 처음엔 이름이 RDF Site Summary 였으나, 나중에 Rich Site Summary 로 변경되면서 XML 형식도 약간 변경이 되었는데, 이는 초기버젼이 Resource Description Framework(RDF)라는 XML 기반의 의미 정보를 엄격하게 기술하는 마크업 언어로 되어있었기 때문이다.
그 밖에 Java로 웹 어플리케이션을 작성해 본 사람이면 web.xml 설정파일이 친숙할텐데, 이것도 Oracle(과거 Sun Microsystems)에서 XML Schema로 형식을 규정한 JSP/Servlet Web Application 표준 설정 파일이다.
C#에서는 프로그램 설정에 사용하는 App.config, WPF에서 사용하는 Xaml 파일이 있다.[1]
종류
DOM : XML 문서가 전부 메모리로 올라가 객체 모델로 만들어진다. W3C의 공식 표준이며, W3C가 표준화한 API들의 기반이다. 문서가 통째로 메모리에 올라가 조직화하기 때문에 문서 요소를 임의로 접근하고 사용하기에 용이하다. 그러나 이는 반대로 단점이 되기도 하는데, 논리 구조를 통째로 메모리에 올려놓고 연산하기 때문에 XML 데이터의 양이 많으면 메모리 부족으로 인해 고생하게 된다.
SAX : XML 문서를 애플리케이션에서 사용하기 위한 API. DOM과 비교해 저수준의 인터페이스를 가지고 있으며 처리해야 할 파일이 클 때 적합하다. XML의 구조에 따라 이벤트가 발생하며, 프로그래머는 이 이벤트를 처리하는 이벤트 핸들러를 작성하여 필요한 데이터를 추출할 수 있다. 이러한 이유로 데이터 내용을 조직하는 기능은 DOM만 못하다. XML 문서를 통으로 메모리상에 논리 구조를 유지하면서 올리고 작업할 수 없기 때문이다. 그러나 이러한 이벤트 기반 처리 방식은 역시 읽어서 처리해야 하는 XML 데이터가 매우 클 때 장점으로 발휘한다. 일단 어떻게든 다른 대용량 비휘발성 저장공간(데이터베이스, NoSQL 등)에 입력하는 데 SAX를 쓰고, 데이터 조작은 해당 저장공간에서 하면 되기 때문이다.
또한 SAX 파서는 내 결함 성을 갖게 만들 수 있게 되어 일부 손상된 XML도 읽어서 처리할 수 있다.
둘 다 모두 실제 구현체가 아닌 인터페이스 수준으로 느슨하게 정의되어 있다. 그래서 프로그래밍 언어/플랫폼별로 실제 사용 방법이 약간 다를 수 있다. XML이 초기에 널리 퍼진 이유 중 하나는 대부분 언어에서 기본으로 지원하는 구조화된 데이터를 읽는 기본 API 보다 훨씬 복잡한 형태의 구조화된 데이터를 읽고 쓰는데 편리했기 때문이다. 지금은 웹 관련 한정으로 JSON이 더 많이 쓰이고 있다.
문제점
대안
평가
각주
참고자료
같이 보기