맨위로가기

JAXP

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

1. 개요

JAXP(Java API for XML Processing)는 자바 플랫폼에서 XML 문서를 처리하기 위한 API이다. DOM, SAX, StAX, XSLT 인터페이스를 제공하며, XML 문서의 파싱, 변환 등 다양한 기능을 수행한다. JAXP는 XML 문서의 메모리 내 표현을 제공하는 DOM 인터페이스, 순차적 이벤트 처리를 위한 SAX 인터페이스, DOM과 SAX의 중간 형태인 StAX 인터페이스, 그리고 XML 변환을 위한 XSLT 인터페이스를 포함한다.

더 읽어볼만한 페이지

  • 자바 사양 요청 - 자바 플랫폼, 마이크로 에디션
    자바 ME는 임베디드 및 모바일 장치에서 자바 앱을 실행하는 플랫폼으로, 피처폰에서 주로 사용되었으며 다양한 프로파일과 에뮬레이터, 개발 도구를 제공하고 JSR을 통해 기능이 확장된다.
  • 자바 사양 요청 - 자바 커뮤니티 프로세스
    자바 커뮤니티 프로세스는 자바 기술 명세의 개발 및 관리를 담당하는 조직으로, 자바 기술 표준화와 발전에 기여해왔으나 운영 방식에 대한 비판과 여러 논란에 직면해 있다.
  • 자바 플랫폼, 엔터프라이즈 에디션 - IBM 웹스피어
    IBM 웹스피어는 IBM에서 출시한 기업용 소프트웨어 제품군 브랜드로, 다양한 애플리케이션 인프라, 비즈니스 프로세스 통합, 정보 통합 및 개발 도구를 포함한다.
  • 자바 플랫폼, 엔터프라이즈 에디션 - 자카르타 서버 페이지
    자카르타 서버 페이지(JSP)는 웹 애플리케이션 개발에 사용되는 서버 측 스크립팅 기술로, 서블릿으로 변환되어 실행되고 HTML 형태로 결과를 반환하며, 지시어, 스크립틀릿, 표현식, 액션 등의 문법 요소, 표현 언어(EL), JSTL을 통해 동적인 웹 페이지를 구현하고 개발 편의성을 높였다.
JAXP

2. 역사

JAXP는 자바 플랫폼에서 XML 문서를 처리하기 위한 표준 API로 개발되었다. 초기 JSR(Java Specification Request) 5를 시작으로, JSR 63과 JSR 206 등을 통해 여러 버전에 걸쳐 기능이 확장되고 개선되었다. 주요 자바 플랫폼 버전인 J2SE 5.0 및 Java SE 6 등에 포함되면서 자바 개발 환경의 중요한 부분을 차지하게 되었다. 자세한 버전별 정보는 아래 '버전 역사' 섹션에서 확인할 수 있다.

2. 1. 버전 역사

JAXP API 역사
JAXP 버전발표일자바 플랫폼관련 JSR
JAXP 1.4Java SE 6JSR 206
JAXP 1.3J2SE 5.0, Java EE 5JSR 206
JAXP 1.2JSR 63
JAXP 1.1JSR 63
JAXP 1.0JSR 5


3. 인터페이스

JAXP는 XML 문서를 처리하기 위한 여러 인터페이스를 제공한다. 주요 인터페이스는 다음과 같다.


  • DOM 인터페이스: XML 문서 전체를 메모리에 읽어 들여 트리 구조로 표현하는 방식이다. 문서 전체 구조를 파악하고 수정하기 용이하지만, 메모리 사용량이 많을 수 있다.[1] DocumentBuilderFactory를 통해 DocumentBuilder를 생성하고, 이를 이용해 Document 객체를 얻는다. 각 노드는 Node 인터페이스를 구현하며, 대표적으로 요소(element) 노드와 텍스트(text) 노드가 있다.
  • SAX 인터페이스: XML 문서를 순차적으로 읽으면서 특정 이벤트가 발생할 때마다 콜백 함수를 호출하는 방식이다. 문서 전체를 메모리에 저장하지 않아 메모리 효율성이 좋고 빠르지만, 문서 구조를 임의로 탐색하기는 어렵다.[1] SAXParserFactory를 통해 SAXParser를 생성하고, DefaultHandler의 메서드를 오버라이드하여 이벤트를 처리한다. 주요 이벤트 처리 메서드로는 문서 시작/종료(startDocument(), endDocument()), 요소 시작/종료(startElement(), endElement()), 텍스트 내용(characters()) 등이 있다.
  • XSLT 인터페이스: XML 문서를 다른 형식(XML, HTML, 텍스트 등)으로 변환하는 기능을 제공한다. javax.xml.transform 패키지를 통해 관련 기능을 사용할 수 있다.

3. 1. DOM 인터페이스

DOM(Document Object Model) 인터페이스는 XML 문서 전체를 구문 분석하여, 문서 내 모든 요소에 해당하는 메모리 내 표현을 Document Object Model(DOM) Level 2 Core Specification에서 규정한 모델에 따라 구축하는 방식이다. 이 방식은 전체 XML 문서를 메모리에 로드하여 트리 구조로 만들기 때문에 문서 구조를 탐색하고 수정하기에 용이하다.

DOM 파서는 메모리 상에 Document 표현을 구축하므로 DocumentBuilder라고 불린다. 이 DocumentBuilderDocumentBuilderFactory에 의해 생성된다. DocumentBuilder는 XML 문서의 모든 노드를 포함하는 트리 구조 형태의 Document 인스턴스를 만든다.

트리 구조 내의 각 노드는 Node 인터페이스를 구현한다. XML 문서에서 발견되는 데이터 유형을 나타내는 다양한 유형의 트리 노드가 있으며, 그중 가장 중요한 노드 타입은 다음과 같다.

  • '''요소(element) 노드''': 속성(attribute)을 가질 수 있다.
  • '''텍스트(text) 노드''': 요소의 시작 태그와 종료 태그 사이에 있는 텍스트를 나타낸다.


모든 노드 타입의 목록은 Java 패키지 org.w3c.dom의 Javadoc 문서를 참고할 수 있다.

3. 2. SAX 인터페이스

SAX(Simple API for XML) 인터페이스는 XML 문서를 순차적으로 읽으면서 이벤트 방식으로 처리하는 파서이다. ''SAXParserFactory'' 클래스는 ''SAXParser''라고 불리는 SAX 파서를 생성하는 데 사용된다. DOM 파서와 달리, SAX 파서는 XML 문서 전체를 메모리에 트리 구조로 적재하지 않기 때문에, 일반적으로 처리 속도가 더 빠르고 메모리 사용량이 적다. 대신 SAX 파서는 문서를 읽어 나가면서 특정 이벤트가 발생할 때마다 미리 등록된 핸들러 객체의 메서드를 호출하는 콜백 방식을 사용한다. 이러한 문서 접근 방식을 스트리밍 XML이라고 한다.

파서는 ''DefaultHandler'' 클래스의 인스턴스를 핵심 핸들러로 사용한다. ''DefaultHandler'' 클래스는 ''ContentHandler'', ''ErrorHandler'', ''DTDHandler'', ''EntityResolver'' 인터페이스를 구현한다. 대부분의 경우, 개발자는 XML 문서의 내용을 처리하기 위해 ''ContentHandler'' 인터페이스에 정의된 메서드에 주로 관심을 갖게 된다. SAX 파서는 XML 문서를 파싱하면서 해당 요소들을 만날 때마다 이 인터페이스의 메서드들을 호출한다. 주요 메서드는 다음과 같다.

  • ''startDocument()'' 및 ''endDocument()'' : XML 문서의 시작과 끝에서 각각 호출된다.
  • ''startElement()'' 및 ''endElement()'' : XML 요소의 시작 태그와 종료 태그를 만날 때 각각 호출된다.
  • ''characters()'' : 요소의 시작 태그와 종료 태그 사이에 포함된 텍스트 데이터를 만날 때 호출된다.


개발자는 일반적으로 ''DefaultHandler'' 클래스를 상속받아 이러한 메서드들을 필요에 맞게 오버라이드하여 원하는 작업을 수행하는 사용자 정의 핸들러를 구현한다. 예를 들어, 파싱된 데이터를 데이터베이스에 저장하거나 다른 스트림으로 출력하는 등의 작업을 할 수 있다.

파싱 과정 중에 외부 문서 참조가 필요할 경우, XML 카탈로그를 사용하여 자주 접근하는 문서의 로컬 캐시를 관리할 수도 있다.

SAX 인터페이스는 2000년 5월 Java 1.3 버전과 함께 도입되었다.[2]

3. 3. StAX 인터페이스

StAX(Streaming API for XML)는 DOM(Document Object Model)과 SAX(Simple API for XML) 인터페이스의 중간 지점에 해당하는 방식으로 설계되었다. 비유적으로 설명하면, 프로그램 진입점은 XML 문서 내의 특정 지점을 나타내는 커서와 같다. 애플리케이션은 이 커서를 앞으로 이동시키면서, 필요에 따라 파서로부터 정보를 '가져오는(pull)' 방식으로 작동한다. 이는 SAX와 같은 이벤트 기반 API와는 다른 방식이다. SAX는 파서가 애플리케이션에 데이터를 '밀어넣는(push)' 방식으로 동작하며, 이 때문에 애플리케이션은 문서 내 위치를 추적하기 위해 이벤트 처리 사이에 상태 정보를 유지해야 할 필요가 있다.

3. 4. XSLT 인터페이스

XSLT(XML Stylesheet Language for Transformations)는 XML 문서를 다른 형태의 데이터로 변환하는 데 사용되는 언어이다. JAXP는 애플리케이션에서 XSLT 변환을 사용할 수 있도록 `javax.xml.transform` 패키지 안에 인터페이스를 제공한다. 이 인터페이스는 원래 TrAX(Transformation API for XML)라고 불렸으며, 여러 자바 XSLT 프로세서 개발자들의 비공식적인 협력을 통해 개발되었다.

주요 인터페이스 기능은 다음과 같다.

  • 애플리케이션이 사용할 XSLT 프로세서를 동적으로 선택할 수 있게 해주는 팩토리 클래스인 `TransformerFactory`가 있다. `TransformerFactory.newInstance()` 메서드를 호출하거나, 특정 팩토리 클래스 이름과 클래스 로더를 지정하여 `TransformerFactory.newInstance(String factoryClassName, ClassLoader classLoader)` 메서드를 호출함으로써 인스턴스를 얻을 수 있다.
  • `TransformerFactory`는 스타일시트의 컴파일된 형태를 나타내는 `Templates` 객체를 생성하는 `newTemplates(Source source)` 메서드를 제공한다. 이 `Templates` 객체는 스레드에 안전(thread-safe)하여 여러 소스 문서에 동일한 스타일시트를 적용하거나, 동일한 소스 문서에 다른 매개변수를 사용하여 적용하는 등 직렬 또는 병렬로 반복해서 사용할 수 있다. 또한 `TransformerFactory`는 `newTransformer(Source source)`나 `newTransformer()` 메서드를 통해 직접 `Transformer` 객체를 생성할 수도 있다.
  • `Templates` 객체는 스타일시트의 실행 가능한 형태인 `Transformer` 객체를 생성하는 `newTransformer()` 메서드를 가지고 있다. 이 `Transformer` 객체는 여러 스레드 간에 공유할 수는 없지만, 단일 스레드 내에서는 직렬로 재사용할 수 있다. `Transformer`는 스타일시트 매개변수 설정, 직렬화 옵션(예: 출력 시 들여쓰기 여부) 설정, 그리고 실제 변환을 실행하는 `transform(Source xmlSource, Result outputTarget)` 메서드를 제공한다.


변환의 입력과 출력을 나타내기 위해 두 개의 추상 인터페이스인 `Source`와 `Result`가 정의되어 있다. 이는 각 프로세서가 자신이 처리할 수 있는 `Source` 또는 `Result`의 종류를 선택할 수 있도록 하는, 자바 인터페이스의 일반적이지 않은 사용 방식이다. 즉, 특정 프로세서가 모든 종류의 `Source`나 `Result` 구현을 반드시 받아들여야 하는 것은 아니다. 실제로 대부분의 JAXP 프로세서는 표준적인 여러 종류의 소스(`DOMSource`, `SAXSource`, `StreamSource`)와 결과(`DOMResult`, `SAXResult`, `StreamResult`)를 지원하며, 필요에 따라 자체적인 구현을 추가할 수도 있다.

4. JAXP와 한국

주어진 원본 소스(`source`) 내용이 비어 있어, 'JAXP와 한국' 섹션에 대한 내용을 작성할 수 없다. 원본 자료가 제공되면 해당 내용을 바탕으로 섹션을 작성할 수 있다.

참조

[1] 웹사이트 The Java Community Process(SM) Program - JSRS: Java Specification Requests - detail JSR# 206 https://www.jcp.org/[...]
[2] 웹사이트 XML Parsing Specification http://jcp.org/en/js[...] 2000-03-21



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

문의하기 : help@durumis.com