자바 캔 ( Java Can Do IT ) : : ' XSLT ' 태그 의 글 목록 
 ' XSLT ' 에 해당 되 는 글 1 건 
 2000 . 11 . 04 XML 의 소개 와 XML 관련 기술 
 XML 의 소개 와 XML 관련 기술 
 Java 2000 . 11 . 04 08 : 13 
 XML 과 XML 관련 기술 에 대해서 간략 하 게 알아보 며 , 자바 와 XML 사이 의 관계 에 대해서 알아본다 . 
 XML 은 무엇 인가 ? 
 XML ! XML ! XML ! 만약 여러분 이 IT 세상 의 흐름 과 함께 하 고 있 다면 XML 에 대한 많 은 것 들 에 대해서 들 어 보 았 을 것 이 며 , 이제 막 개발자 의 세계 에 발 을 들여놓 았 다 하 더라도 적어도 한번 정도 는 ' XML ' 이 란 단어 를 들 어 보 았 을 것 이 다 . 현재 마이크 로 소프트 , 썬 마이크 로 시스템즈 , 오라클 , IBM 과 같 은 IT 분야 를 대표 하 는 대부분 의 기업 들 은 XML 을 분석 ( parsing ) 하 고 변환 ( transformation ) 할 수 있 는 여러 도구 들 을 제공 하 고 있 으며 , 최근 에 각 기업 이 내 놓 고 있 는 제품 들 은 XML 을 여러 형태 로 사용 하 고 있 다 . 이러 한 XML 영역 의 증가 추세 는 앞 으로 더욱 가증 될 것 으로 예상 된다 . 이번 Article 에서 는 초보 개발 자 뿐 만 아니 라 아직 까지 XML 이 무엇 인지 에 대해서 자세 하 게 알 지 못하 는 개발자 들 을 위해 XML 이 무엇 인지 , 어디 서 XML 을 사용 하 는지 그리고 XML 을 왜 사용 하 는 지 에 대한 전반 적 인 내용 을 간략 하 게 알아볼 것 이 다 . 
 XML 은 ' Extensible Markup Language ' 이 다 . 우리 말 로 하 자면 ' 확장 가능 한 마크업 언어 ' 정도 가 될 것 이 다 . XML 은 앞서 나온 SGML 과 마찬가지 로 다른 언어 를 정의 할 때 사용 되 는 메타언어 ( metalanguage ) 이 다 . 하지만 , XML 은 SGML 보다 훨씬 더 간단 하 다 . 또한 , 오늘날 가장 많이 사용 되 고 있 는 마크업 언어 인 HTML 의 확장 성 이 거의 없 는 반면 에 XML 은 거의 무한 의 확장 성 을 갖 고 있 다 . 이러 한 XML 의 확장 성 은 XML 이 문법 ( grammar ) 이나 ' 태그 집합 ( tag set ) ' 을 규정 하 지 않 은 마크업 언어 이 기 때문 에 가능 하 다 . 간단히 비교 를 하 기 위해 HTML 과 비교 해 보 자 . 현재 나와 있 는 HTML 규약 은 사용 자 가 사용 할 수 있 는 태그 및 속성 의 종류 를 제한 하 고 있 다 . 다시 말 해서 , HTML 은 미리 정의 된 태그 집합 과 문법 을 갖 고 있 다 . 예 를 들 어 , HTML 에서 < table > 태그 를 사용 할 수 는 있 지만 , < furniturelist > 태그 를 사용 할 수 는 없 다 . HTML 문서 를 사용 하 는 어플리케이션 ( 거의 웹 브라우저 일 것 이 다 ) 에 대해 < table > 태그 는 특정 한 의미 를 지니 며 표 의 시작 을 나타낼 때 사용 되 는 반면 에 , < furniturelist > 태그 는 HTML 문서 를 사용 하 는 어플리케이션 에 대해 어떤 의미 도 갖 지 않 으며 웹 브라우저 는 이 태그 를 처리 하 지 않 고 무시 할 것 이 다 . 이 는 HTML 을 정의 할 때 , HTML 규약 에 사용 가능 한 태그 집합 을 정의 했 기 때문 에 그렇 다 . 따라서 새로운 태그 를 추가 하 거나 불 필요 한 태그 를 삭제 하 기 위해서 는 새로운 버전 의 HTML 규약 을 발표 해야 만 한다 . 또한 , HTML 은 언어 에 정의 된 태그 의 올바른 사용법 을 정의 한 ' 문법 ( grammar ) ' 을 갖 고 있 다 . 예 를 들 어 , < tr > 태그 는 반드시 < table > 태그 에 중첩 되 어야 하 며 , < table > 태그 는 width , border , cellpadding 과 같 은 속성 의 값 을 지정 할 수 는 있 지만 type 이 라는 속성 을 지정 할 수 는 없 다 . 
 반면 에 XML 은 미리 정의 된 태그 집합 이나 문법 을 규정 하 고 있 지 않 기 때문 에 HTML 과 는 달리 완전 한 확장 성 을 가진다 . XML 문서 작성자 는 원 하 는 태그 를 사용 할 수 있 으며 , 태그 에 원하 는 속성 을 지정 할 수 있 으며 , 원 하 는 형태 로 태그 를 중첩 시킬 수 있 다 . 즉 , 자신 만 의 태그 집합 과 문법 을 만들 수 있 다는 것 이 다 . 예 를 들 어 다음 의 간단 한 XML 문서 를 살펴보 자 . 
 < furniture - list > 
 < productName > XX 책상 </ productName > 
 < drawer > 4 </ drawer > 
 < hasBookshelf > true </ hasBookshelf > 
 < hasLamp > true </ hasLamp > 
 < target > 학생 </ target > 
 < price > 130000 </ price > 
 < productName > 듀오 의자 </ productName > 
 < target > 모두 </ target > 
 < price > 35000 </ price > 
 < productName > 에이스 침대 </ productName > 
 < target > 모두 </ taget > 
 < price > 280000 </ price > 
 </ furniture - list > 
 예제 XML 문서 를 보 면 HTML 과 는 많이 다르 다는 것 을 알 수 있 다 . 여기 서 사용 된 < table >, < size >, < target > 과 같 은 태그 는 문서 작성자 가 만든 것 이 며 , 각 태그 간 의 중첩 관계 역시 작성자 에 의해 구성 된 것 이 다 . 이것 이 바로 XML 의 힘 이 다 . 여러분 은 XML 규약 이 요구 하 는 일반 적 인 구조 에 따라 XML 문서 를 만드 는 한 , 다양 한 방법 으로 데이터 의 내용 을 정의 할 수 있 으며 , 이 에 따라 데이터 를 표현 하 는 데 있 어 HTML 로 는 불 가능 한 유연 성 을 갖 게 된다 . 
 이러 한 XML 의 유연 성 은 XML 의 가장 큰 장점 중 의 하나 이 면서 동시 에 단점 이 되 기 도 한다 . 한 가지 목적 을 위해 여러 다양 한 방법 을 사용 할 수 있 기 때문 에 , 데이터 의 표현 과 변환 을 처리 하 기 위한 많 은 다른 규약 들 이 존재 하 며 , 이러 한 규약 을 통해서 XML 은 유연 성 에 의해 발생 하 는 단점 을 보완 하 고 있 다 . 실제로 XML 기술 이 라고 하 면 , 단순히 XML 을 의미 하 기 보 다는 XML 및 XML 관련 기술 을 의미 하 는 경우 가 더 많 다 . 
 XML 을 HTML 과 비교 할 때 , 또 하나 의 큰 차이점 은 XML 은 표현 ( presentation ) 을 위한 데이터 가 아닌 내용 을 위한 데이터 라는 점 이 다 . HTML 의 경우 < code > 와 < strong > 은 그 태그 의 값 이 각각 프로그래밍 코드 와 강조 된 것 이 라는 것 을 나타내 는 내용 기반 의 태그 인 반면 에 < b > 와 < i > 는 태그 는 내용 을 어떻게 출력 하 라는 표현 에 중점 을 태그 이 다 . 즉 , 표현 과 내용 이 하나 의 문서 에 혼합 되 어 있 는 것 이 다 . 따라서 , XML 문서 를 작성 할 때 표현 을 어떻게 할 것 인가 에 대해서 는 전혀 생각 할 필요 가 없 으며 , 단지 내용 을 어떻 게 XML 문서 로 나타낼 것 이 가 엔 대해서 만 생각 하 면 된다 . 
 XML 에 대해서 이해 하 기 위해서 는 XML 뿐 만 아니 라 XML 관련 기술 에 대해서 도 이해 하 고 있 어야 한다 . 이제 부터 XML 과 관련 된 기술 들 에 대해 간단 하 게 알아보 도록 하 자 . 
 XML 은 모든 XML 관련 기술 의 핵심 이 다 . XML 은 핵심 언어 자체 를 정의 하 고 메타데이터 타입 의 구조 를 정의 한다 . XML 에 기반 한 모든 다양 한 기술 을 통해서 개발자 와 콘 텐트 관리자 들 은 데이터 관리 와 전송 측면 에 있 어서 전 에 없 던 유연 성 을 제공 받 게 되 었 다 . 현재 1 . 0 규약 의 권고 안 ( Recommendation ) 이 나온 상태 이 다 . XML 1 . 0 규약 은 http : / / www . w 3 . org / TR / REC - xml 에서 참조 할 수 있 다 . 
 참고 로 , DTD 는 XML 형식 이 아닌 그것 만 의 규약 을 갖 고 있 다 . 예 를 들 면 DTD 는 다음 과 같 은 형태 로 구성 되 어 있 다 . 
 <! ELEMENT furniture - list ( table | chair | bed ) +> 
 <! ELEMENT table ( productName , drawer , hasBookshelf , hasLamp , target , price ) > 
 <! ATTLIST tale 
 class ( 보급 형 , 고급 형 ) " 보급 형 "> 
 <! ELEMENT productName # PCDATA > 
 <! ELEMENT drawer # PCDATA > 
 완전히 XML 과 다른 형태 로 XML 문서 의 문법 을 지정 하 는 것 을 알 수 있 다 . 이 에 따라 DTD 는 몇 가지 한계점 을 갖 고 있 으며 , 이 는 다음 과 같 다 . 
 계층 ( hierarchy ) 개념 이 없 다 . ( 즉 , 개 층 개념 이 없 다 ! ) 
 이름 공간 을 유연 하 게 처리 하 기 어렵 다 . 
 XML 문서 사이 에 연관 성 을 줄 수 있 는 방법 을 갖 고 있 지 않 다 . 
 이러 한 한계점 이 발생 하 게 된 원인 은 DTD 규약 을 처음 작성 할 때 지금 처럼 많 은 곳 에서 XML 이 사용 될 것 이 라고 예상 하 지 못했 기 때문 이 며 , 따라서 지금 처럼 한계 를 갖 게 되 는 것 은 어쩌면 당연 한 것 이 다 . 하지만 , 이러 한 한계점 은 개발자 들 을 괴롭히 는 요인 이 되 기 도 한다 . 따라서 이러 한 한계점 을 없애 야 할 필요 성 이 생겼으며 , 그것 들 을 해결 하 기 위해 나온 규약 이 바로 XML 스키마 ( Schema ) 이 다 . XML 스키마 에 대해서 는 잠시 뒤 에 알아보 기 로 하 자 . 
 이름 공간 ( Namespace ) 
 XSL 와 XSLT 
 XSL 은 ' Extensible Stylesheet Language ' 을 의미 하 며 , 한 형식 의 XML 데이터 를 다른 형식 으로 변환 하 고자 할 때 사용 된다 . 예 를 들 어 , 하나 의 XML 문서 를 HTML , PDF , PS 형태 로 변환 해야 한다고 가정 해 보 자 . 이 경우 우리 는 XML 문서 를 일일이 복사 하 여 각 포맷 에 알맞 게 변환 해야 할 것 이 다 . XSL 은 이렇게 일일이 복사 할 필요 없이 , 이러 한 종류 의 작업 을 수행 해 주 는 스타일 쉬 트 를 정의 해 주 는 방식 을 제공 한다 . 다시 말 하 면 , XSL 이 XML 데이터 를 표현 을 위한 포맷 으로 변경 해 준다는 것 이 다 . 앞 에서 XML 문서 는 내용 을 위한 데이터 라고 했 던 점 을 기억 할 것 이 다 . 그렇 다면 XML 문서 를 어떻게 웹 브라우저 와 같 은 클라이언트 프로그램 에서 표현 할 수 있 을 것 인가 ? 바로 XSL 을 통해서 가능 하 게 되 며 , XSL 은 내용 과 표현 을 완전히 분리 해 준다 . 문서 를 변환 하 기 위해 XSL 문서 는 ' 포맷 팅 객체 ( formatting object ) ' 를 포함 할 수 있 다 . 포맷 팅 객체 는 특정 한 이름 의 태그 이 며 , 이 태그 는 변환 할 문서 의 타입 에 맞 는 알맞 은 내용 으로 변경 될 수 있 다 . 예 를 들 어 XML 문서 를 PDF 로 변환 할 경우 포맷 팅 객체 에 해당 하 는 태그 는 PDF 에 알맞 은 정보 로 변경 될 것 이 다 . 
 XSLT 는 ' Extensible Stylesheet Language Transformation ' 를 의미 하 며 , 포맷 팅 객체 가 아닌 완전 한 텍스트 기반 의 변환 을 나타낸다 . 일반 적 으로 XML 문서 의 변환 은 텍스트 위주 로 이루어지 기 때문 에 , 따라서 XSLT 가 많이 사용 된다 . 
 XML 문서 를 다른 형식 으로 변환 하 는 것 은 보통 XML 문서 에 있 는 특정 요소 A 를 변환 될 문서 의 특정 요소 B 로 바꾼다는 것 을 의미 한다 . 이러 한 변환 을 처리 하 기 위해서 는 어떤 요소 를 변형 할 지 , 그리고 요소 의 어떤 속성 의 값 을 처리 할 지 , 혹은 각 요소 의 값 에 따라 어떤 형식 으로 변환 할지 를 결정 할 수 있 어야 한다 . 이러 한 요소 의 선택 문제 는 XPath 를 통해서 이루어지 며 XPath 에 대해서 는 잠시 뒤 에 알아본다 . 
 XSL 1 . 0 규약 은 http : / / www . w 3 . org / TR / xsl / 에서 참조 할 수 있 으며 , XSLT 1 . 0 규약 은 http : / / www . w 3 . org / TR / xslt 에서 참조 할 수 있 다 . 
 XML 스키마 ( Schema ) 
 앞 에서 DTD 는 그 자체 가 XML 로 되 어 있 지 않 으며 , 뿐 만 아니 라 그 에 따른 여러 가지 한계점 들 이 발생 한다고 하 였 다 . DTD 가 XML 의 계층 구조 를 공유 하 지 않 는 다 는 것 은 이미 앞 에서 DTD 의 한계점 에서 언급 한 바 있 다 . 이 외 에 도 DTD 는 XML 과 같 은 방법 으로 데이터 를 표시 할 수 조차 없 다 . 반면 에 DTD 이외 에 XSL , XHTML , 이름 공간 등 의 다른 XML 관련 규약 들 은 그것 의 목적 을 표시 하 기 위해서 XML 의 요소 , 속성 등 을 사용 한다 . 이러 한 상황 은 DTD 를 다소 이상 한 것 으로 만들 었 으며 , XML 문서 를 어떻게 작성 해야 한다는 것 을 정의 하 기 위해 일반 적 으로 DTD 를 사용 하 기 때문 에 어떤 혼동 을 일으키 기 도 했 다 . 
 XML 스키마 는 XML 문서 를 어떻게 작성 해야 한다는 것 을 정의 하 기 위해 XML 그 자체 를 사용 함 으로써 DTD 가 안 고 있 던 많 은 한계점 을 해결 하 였 다 . " 데이터 에 대한 데이터 를 정의 하 는 " 방법 으로서 XML 그 자체 를 사용 함 으로써 XML 스키마 는 계층 적 구조 를 사용 할 수 있 으며 , 확장 성 을 갖 게 되 었 으며 , 이름 공간 의 처리 역시 손쉽 게 할 수 있 게 되 었 다 . 
 XML 스키마 의 요구 안 을 http : / / www . w 3 . org / TR / NOTE - xml - schema - req 에서 참조 할 수 있 다 . 
 앞 에서 XSLT 에 대해서 언급 할 때 , XPath 를 사용 하 여 변환 할 대상 을 선택 하 였 다 . XPath 규약 은 XML 문서 에 있 는 특정 한 항목 을 어떻게 위치 시킬지 를 정의 하 고 있 으며 , XML 문서 에 있 는 어떤 ' 노드 ( node ) ' 를 참조 함 으로써 이것 을 하 게 된다 . XPath 는 XML 문서 를 트리 로 간주 하 며 , 따라서 여기 서 노드 는 요소 , 속성 또는 텍스트 데이터 를 포함 한 XML 데이터 의 일부 를 나타낸다 . 실제로 노드 를 위치 시키 기 위해서 XPath 는 표현식 을 사용 한다 . 이 표현식 이 어떻게 구성 되 는 지 에 대한 내용 은 http : / / www . w 3 . org / TR / xpath 에서 참고 할 수 있 다 . 
 XQL 은 ' Extensible Query Language ' 를 의미 하 며 , Query 에서 알 수 있 듯이 XQL 은 XML 문서 형식 을 사용 하 여 쉽 게 데이터베이스 질의 ( query ) 를 표현 할 수 있 도록 하 기 위해 설계 된 질 의 언어 ( query language ) 이 다 . XQL 은 질의 ( query ) 언어 를 표현 하 기 위해 XPath 개념 을 사용 하 고 있 다 . 왜 XPath 개념 을 사용 하 는지 알아보 기 위해 데이터베이스 의 특정 한 테이블 로부터 데이터 를 읽 어 오 는 SQL 문장 을 생각 해 보 자 . 
 위 의 SQL 문장 을 보 면 member _ table 이 라는 테이블 로부터 id 값 이 madvirus 인 행의 id , name , password 필드 값 을 읽 어 오 는 것 을 알 수 있 다 . 여기 서 중요 한 것 은 id , name , password 나 member _ table 과 같 은 것 들 이 모두 XML 문서 의 특정 한 노드 로 간주 될 수 있 다는 점 이 다 . ( 데이터베이스 와 XML 과 의 매핑 을 한번 생각 해 보 면 그럴 것 이 라는 것 을 알 수 있 을 것 이 다 ) . 또한 , XQL 은 질의 의 결과 집합 을 표준 XML 을 사용 하 여 표시 한다 . 이때 , XML 문서 는 XQL 에 특정 한 태그 집합 을 통해서 표현 된다 . 
 XSP 라는 단어 를 보 면서 JSP 나 ASP 와 비슷 한 기술 이 아닐까 라는 생각 을 할 지도 모르 겠 다 . 혹시 XSP 가 JSP 나 ASP 와 비슷 하 게 서버 사이드 스크립트 언어 를 나타내 는 것 이 아닐까 라고 생각 했 다면 , 어느 정도 맞 게 추측 한 것 이 다 . XSP 는 ' Extensible Server Pages ' 를 의미 한다 . XSP 는 XML 에 기반 하 고 있 으며 , 따라서 언어 에 독립 적 이 고 웹 페이지 와 웹 사이트 를 만드 는 데 있 어서 스크립트 언어 대신 사용 될 수 있 다 . 표현 과 내용 의 구분 에 있 어 완전 하 지 못한 JSP 에 비해 , XSP 는 완전 하 게 이 둘 을 구분 해 준다 . JSP 는 JSP 페이지 내 에 로직 부분 을 담 고 있 는 반면 에 XSP 는 로직 부분 을 로직 쉬 트 ( logicsheet ) 라는 것 에 정의 한다 . 로직 쉬 트 는 스타일 쉬 트 와 비슷 하 며 , 이 를 통해 XSP 는 표현 의 내요 을 완전히 분리 해 준다 . 이러 한 구분 은 개발자 들 이 동적 이나 동적 으로 내용 의 생 성 에 만 집중 할 수 있 도록 해 주 고 , 반면 에 XML 과 XSL 제작자 들 은 XSP 페이지 에 적용 할 XSL 스타일 쉬 트 를 변경 함 으로써 표현 과 스타일 만 을 처리 할 수 있 도록 해 준다 . 
 XSP 는 현재 웹 출판 프레임워크 ( Web Publishing Framework ) 인 아파치 코 쿤 ( Cocoon ) 에 속해 있 다 . XSP 에 대해 자세히 알 고자 하 는 사람 은 http : / / xml . apache . org / cocoon / xsp . html 을 참조 하 기 바란다 . 
 지금 까지 XML 과 관련 된 기술 에 대해서 알아보 았 다 . 이 외 에 도 XLink , XLL 과 같 은 많 은 XML 관련 규약 들 이 존재 하 지만 , 여기 서 는 자바 와 관련 해서 많이 사용 되 는 또는 사용 될 기술 들 에 대해서 만 알아보 았 다 . 
 XML 의 활용 
 XML 을 어떻게 사용 하 는가 
 XML 이 아무리 좋 은 개념 을 갖 고 있 다고 해도 개발자 들 이 익 숙환 프로그래밍 환경 에서 사용 할 수 없 다면 쓸모 없 는 기술 에 불과 할 것 이 다 . 다행 스럽 게 도 프로그래밍 에서 손쉽 게 XML 을 분석 하 고 , 처리 하 고 , 변환 할 수 있 도록 해 주 는 몇몇 API 가 발표 되 었 으며 , 자바 개발자 들 은 이러 한 API 중 에서 알맞 은 것 을 선택 해서 XML 을 이용 한 자바 프로그래밍 을 손쉽 게 할 수 있 다 . 이러 한 API 에 는 SAX , DOM , JAXP , JDOM 등 이 있 다 . 
 SAX 는 ' Simple API for XML ' 을 의미 하 며 , 그 이름 그대로 XML 을 위한 간단 한 API 를 제공 한다 . SAX 는 XML 데이터 를 분석 하 기 위한 이벤트 기반 의 구조 를 제공 하 며 , 이러 한 구조 는 크 게 문서 를 읽 어 나가 는 과정 과 데이터 를 사용 할 수 있 는 부분 으로 분리 된다 . 이벤트 는 XML 문서 를 순차 적 으로 처리 하 는 동안 각 단계 에서 발생 하 며 , SAX 는 각 이벤트 가 발생 할 때 호출 되 는 메소드 를 정의 하 고 있 다 . 예 를 들 어 , 한 요소 의 여 는 태그 를 만날 경우 startElement ( ) 메소드 를 호출 하 며 , 끝 태그 를 만날 경우 endElement ( ) 메소드 를 호출 한다 . 
 SAX 는 문서 를 읽 어 나가 는 과정 에서 발생 하 는 이벤트 를 위한 인터페이스 뿐 만 아니 라 , 잘 못 된 문서 나 비 적격 ( non well - formed ) 문서 와 같이 XML 을 분석 하 는 과정 에서 발생 할 수 있 는 다양 한 상황 을 처리 할 수 있 도록 해 주 는 에러 와 경고 집합 을 정의 하 고 있 다 . 
 DOM 은 ' Document Object Model ' 을 의미 한다 . SAX 가 단지 XML 문서 의 데이터 에 접근 하 기 위한 방법 을 제공 한다면 , DOM 은 그러 한 데이터 를 처리 하 는 방법 을 제공 하 기 위해 설계 되 었 다 . DOM 은 XML 문서 를 트리 형태 로 표현 한다 . 자바 를 비롯 한 프로그래밍 언어 에서 는 트리 구조 를 쉽 게 순회 하 고 처리 할 수 있 기 때문 에 , DOM 트리 ( XML 문서 를 DOM 으로 표현 한 것 을 DOM 트리 고 부른다 ) 를 쉽 게 처리 할 수 있 다 . SAX 와 달리 DOM 은 전체 XML 문서 를 메모리 에 읽 어 온 후 에 DOM 트리 를 구성 하 기 때문 에 , 한번 문서 를 읽 으면 매우 빠르 게 전체 문서 에 접근 할 수 있 다 . 
 DOM 이 전체 XML 문서 를 메모리 에 읽 어 온 후 에 DOM 트리 를 작성 한다는 것 이 빠르 게 XML 문서 의 각 요소 에 접근 할 수 있 다는 장점 을 제공 하 긴 하 지만 , 반면 에 결정 적 인 단점 을 제공 하 기 도 한다 . DOM 은 XML 문서 의 크기 에 비례 한 메모리 를 필요 로 하 기 때문 에 , XML 문서 의 크기 가 커질수록 많 은 메모리 를 요구 하 게 된다 . XML 문서 의 매우 클 경우 이 는 매우 많 은 양 의 시스템 자원 을 사용 하 게 되 며 , 따라서 시스템 의 전체 적 인 성능 저하 현상 을 일으키 기 도 한다 . 
 JAXP 는 썬 이 자바 에서 XML 분석 을 위해 내 놓 은 API 이 다 . JAXP 는 SAX 와 DOM API 를 대신 하 거나 완성 시킨 것 은 아니 지만 JAXP 는 자바 개발자 들 이 XML API 를 좀 더 쉽 게 사용 할 수 있 도록 하 기 위해 만든 편리 한 메소드 를 제공 하 고 있 다 . JAXP 는 이름 공간 을 지원 할 뿐 만 아니 라 SAX 와 DOM 권고 안 을 따르 고 있 다 . 또한 , JAXP 는 교체 가능 ( pluggability ) 계층 을 통해서 XML 을 따르 는 모든 파서 를 사용 할 수 있 도록 해 준다 . 
 현재 EJB 1 . 1 규약 과 Tomcat 은 XML 형식 의 설정 및 배치 ( deployment ) 파일 을 사용 하 고 있 으며 , 앞 으로 나올 J 2 EE 1 . 3 이나 J 2 SE 1 . 4 에 JAXP 가 추가 될 것 으로 예상 된다 . 
 현재 나와 있 는 XML API 중 에서 자바 개발자 들 에게 가장 흥미 를 끌 고 있 는 API 가 있 다면 , 바로 JDOM 이 다 . JDOM 은 일반 적 으로 SAX 와 DOM 을 대체 할 수 있 는 자바 중심 적 이 고 고 성능 의 API 를 제공 하 고 있 으며 , DOM 이나 SAX 에 기반 하 지 않 은 대신 개발자 가 DOM 의 특징 없이 트리 형태 로 XML 문서 를 처리 할 수 있 도록 해 준다 . 또한 SAX 와 같 은 고 성능 을 제공 하 기 때문 에 분석 과 출력 을 매우 빠르 게 할 수 있 도록 해 준다 . 또한 , DOM 과 달리 속성 이나 요소 집합 을 나타내 기 위해서 자바 2 의 콜렉션 클래스 를 사용 한다 . ( 참고 로 , DOM 은 속성 이나 요소 집합 을 나타내 기 위해서 Attributes 또는 Nodelist 와 같 은 별도 의 클래스 를 사용 한다 ) . 
 JDOM 은 자바 에 맞춰서 개발 된 API 이 기 때문 에 , SAX 나 DOM 과 달리 자바 에 최적 화 되 어 있 다 . 그 하나 의 예 로 자바 2 의 콜렉션 API 를 사용 하 는 것 을 들 수 있 다 . 또한 , JDOM 은 이미 증명 된 자바 디자인 패턴 에 따라 설계 되 었 으며 , 직접 적 으로 클래스 의 인 스턴스 를 생성 함 으로써 JDOM 의 구성 요소 ( 요소 , 주석 , 속성 , 기타 등등 ) 를 생성 할 수 있 도록 하 고 있 다 . 
 XML 을 어디 에 사용 하 는가 
 아직 까지 XML 을 미션 크리티컬 한 어플리케이션 에서 사용 하 지 는 않 고 있 다 . 하지만 , 자바 와 비교 해 보 면 XML 의 발전 속도 는 매우 빠른 편 이 며 , 점차 적 으로 XML 을 사용 하 는 분야 가 증가 하 고 있 다 . 실예 로 , 앞 으로 나올 ASP + 나 JSP 차기 버전 의 경우 페이지 자체 를 XML 로 작성 할 수 있 도록 하 고 있 다 . 또한 , XML 에 있 어서 중요 한 점 은 자바 와 찰떡궁합 을 이룬다는 점 이 다 . 이 에 대해서 는 이 Article 의 마지막 부분 에서 살펴볼 것 이 다 . 
 XML 을 현재 어느 분야 에서 사용 하 고 있 는 지 에 대해서 살펴보 도록 하 자 . 
 표현 에서 의 XML 
 XML 의 가장 큰 장점 은 내용 과 표현 을 분리 한다는 점 이 다 . 이 는 오늘날 과 같이 클라이언트 의 종류 가 다양 한 환경 에서 큰 힘 을 발휘 하 게 된다 . 예 를 들 어 , 클라이언트 의 종류 가 웹 브라우저 , 휴대 전화 와 같 은 무선 기기 , 자바 애플리케이션 이 라고 해 보 자 . 기존 의 방법 을 사용 하 려면 각각 의 클라이언트 에 대해서 각각 HTML , WML 그리고 자바 애플리케이션 에 알맞 은 어떤 형태 로 제공 해야 한다 . 내용 이 변경 되 거나 표현 부분 이 변경 되 는 경우 모두 각각 의 문서 를 변경 해 주 어야 한다 . 내용 을 변경 하 는 경우 에 도 이 각각 의 문서 를 변경 해야 한다는 것 은 매우 귀찮 은 일 일 수 있 으며 , 지원 해야 하 는 클라이언트 의 종류 가 세 가지 이상 으로 늘어날 경우 이 는 관리 에 있 어서 어려움 을 제공 하 는 원인 이 되 기 도 한다 . 또한 , 하나 의 문서 를 변경 하 기 위해서 는 개발자 와 페이지 디자이너 가 모두 필요 하 다는 것 도 문제 가 된다 . 
 XML 을 사용 하 면 이러 한 문제 의 상당히 많 은 부분 을 해결 할 수 있 게 된다 . 앞 에서 XSL / XSLT 에 대해서 설명 할 때 , XSL / XSLT 는 한 형식 의 문서 를 다른 형식 으로 변환 해 준다고 하 였 다 . 개발자 는 단순히 내용 을 저장 하 고 있 는 XML 문서 만 을 생성 하 면 되 며 , 페이지 디자이너 는 XML 문서 를 HTML , WML 그리고 자바 애플리케이션 에 알맞 은 형태 로 변환 해 주 는 XSL / XSLT 를 작성 하 기 만 하 면 된다 . 만약 사용 자 가 웹 브라우저 를 통해서 접속 했 다면 XML + HTML 로 변환 해 주 는 XSLT 를 통해서 HTML 문서 를 제공 해 주 며 , 휴대 전화 로 접속 했 다면 XML + WML 로 변환 해 주 는 XSLT 를 통해서 WML 문서 를 제공 해 줄 것 이 다 . 즉 , 하나 의 XML 문서 를 통해서 여러 개 의 표현 을 만들 어 낼 수 있 는 것 이 다 . 현재 이러 한 기능 을 제공 해 주 는 출판 프레임워크 가 개발 되 고 있 으며 , 대표 적 인 아파치 코 쿤 을 예 로 들 수 있 다 . 
 통신 에서 의 XML 
 어플리케이션 사이 에서 정보 를 주 고 받 기 위해서 XML 을 사용 할 수 있 다 . 각각 의 어플리케이션 은 자신 만 의 문서 형식 을 작성 할 필요 가 없 으며 , 단지 두 어플리케이션 이 알 고 있 는 DTD 나 스키마 에 맞춰서 XML 문서 를 작성 하 기 만 하 면 된다 . 뿐 만 아니 라 XML 로 정보 를 표현 하 기 때문 에 특별 한 어플리케이션 에 종속 되 지 않 으며 따라서 DTD 를 따르 는 모든 애플리케이션 에서 같 은 정보 를 사용 할 수 있 게 된다 . 또한 , XML 로 표현 된 정보 를 XSL / XSLT 를 사용 하 여 손쉽 게 어플리케이션 에 특정 한 형식 으로 변환 할 수 도 있 다 . 
 이러 한 XML 의 응용 범위 는 오늘날 인터넷 비니 지스 에 있 어서 핵심 으로 떠오르 고 있 는 B 2 B 로 확장 될 것 으로 예상 된다 . 즉 , 어플리케이션 사이 에서 뿐 만 아니 라 기업 간 에 XML 을 통해서 정보 를 주 고 받 을 것 이 다 . 이미 많 은 곳 에서 XML 을 이용 하 여 기업 간 에 정보 를 주 고 받 을 수 있 는 어플리케이션 을 개발 하 고 있 으며 몇몇 제품 은 이미 판매 되 고 있 다 . 오늘날 기업 간 에 정보 를 주 고 받 을 때 주로 사용 되 는 EDI 에 비해 XML 은 더욱 더 다양 한 형태 로 정보 를 주 고 받 을 수 있 도록 해 준다 . 
 설정 에서 의 XML 
 앞 에서 도 말 했 듯이 XML 은 설정 에 있 어서 유용 하 게 활용 할 수 있 다 . 이미 EJB 1 . 1 규약 과 앞 으로 정식 으로 발 펴 될 EJB 2 . 0 규약 에서 XML 을 사용 하 여 설정 및 배치 기술자 를 정의 하 고 있 으며 서블릿 2 . 2 역시 XML 을 사용 하 여 설정 과 배치 부분 을 기술 하 고 있 다 . 앞 으로 이러 한 설정 및 배치 와 관련 된 곳 에서 XML 의 사용 범위 는 점차 적 으로 증가 할 것 으로 예상 된다 . 
 자바 & XML 
 마지막 으로 자바 와 XML 과 의 관계 에 대해서 간략 하 게 알아보 자 . 이 두 기술 의 관계 를 다음 의 문구 로 간단 하 게 표현 할 수 있 다 . 
 자바 의 이 식성 은 별다른 설명 이 필요 없 을 정도 로 자명 하 다 . 자바 는 중간 코드 인 바이트코드 와 JVM 을 통해서 거의 완벽 한 이 식성 을 제공 하 고 있 으며 , 쓰레드 와 Native 메소드 와 같 은 몇 가지 문제점 을 제외 하 고 는 거의 모든 플랫폼 에서 특별 한 문제 없이 같 은 자바 코드 를 사용 할 수 있 게 되 었 다 . 
 XML 의 이 식성 은 자바 의 이 식성 보다 더욱 더 완벽 에 가깝 다 . 자바 를 실행 하 기 위해서 단지 플랫폼 에 알맞 은 JVM 이 있 으면 되 듯이 , XML 을 사용 하 기 위해서 는 표준 XML 을 지원 하 는 파서 , 처 리기 ( Processor ) 등 이 있 으면 된다 . XML 데이터 자체 는 플랫폼 에 어떠 한 플랫폼 에 도 영향 을 받 지 않 는다 . 
 자바 는 XML 을 사용 할 수 있 는 풍부 한 API 를 제공 하 고 있 으며 , 따라서 자바 와 XML 의 조화 는 어플리케이션 과 데이터 에 있 어서 완벽 한 이 식성 을 제공 해 주 며 , 이 는 앞 으로 개발 될 어플리케이션 ( 특히 엔터 프라이즈 어플리케이션 ) 에서 큰 힘 이 될 것 이 다 . 
 XML 파 서 ( Parser ) 와 처 리기 ( Processor ) 
 XML 을 실제 어플리케이션 환경 에서 사용 하 기 위해서 는 XML 을 분석 할 수 있 는 파서 ( parser ) 와 XSL / XSLT 를 사용 하 여 XML 을 변환 할 수 있 는 XML 처리 기 가 필요 하 다 . 여기 서 는 XML 을 분석 하 고 처리 할 수 있 도록 해 주 는 파서 와 처 리기 의 종류 를 나열 할 것 이 다 . 
 현재 사용 할 수 있 는 파서 에 는 다음 과 같 은 것 들 이 있 다 . 
 Apache Xerces : 
 IBM XML 4 J : 
 http : / / alphaworks . ibm . com / tech / xml 4 j 
 James Clark 의 XP : 
 http : / / www . jclark . com / xml / xp / index . html 
 Tim Bray 의 Lark : 
 http : / / www . openxml . org / 
 Oracle XML Developer ' s Kit for Java : 
 http : / / technet . us . oracle . com / tech / xml / xdk _ java . html 
 처리 기 ( Processor ) 
 현재 사용 할 수 있 는 처 리기 에 는 다음 과 같 은 것 들 이 있 다 . 
 Apache Xalan : 
 James Clark 의 XT : 
 http : / / www . jclark . com / xml / xt . html 
 LotusXSL : 
 http : / / users . iclway . co . uk / mhkay / saxon / 
 XML 1 . 0 규약 
 이름 공간 규약 
 XSL 규약 
 XSLT 1 . 0 규약 
 http : / / www . w 3 . org / TR / NOTE - xml - schema - req "> XML 스키마 규약 
 XPath 규약 
 썬 마이크 로 시스템즈 의 XML 관련 사이트 
 TAG namespace , XML , xsl , XSLT , 이름 공간