개발/개념 공부

Java XML 파서 비교 분석 – JAXB vs StAX vs SAX vs DOM

jineddy 2025. 4. 21. 09:47
728x90

XML은 여전히 다양한 시스템 통신과 설정 파일에 널리 사용되는 데이터 형식입니다. Java에서는 XML을 처리하기 위해 여러 가지 파싱 방식이 존재하며, 그 중 대표적인 방식은 JAXB, StAX, SAX, DOM입니다.

이번 글에서는 Java XML 파서 4종을 비교 분석하여, 언제 어떤 파서를 선택하면 좋을지 명확하게 알려드리겠습니다.

 

1. JAXB (Java Architecture for XML Binding)

JAXB는 XML과 Java 객체 간의 자동 바인딩을 제공하는 프레임워크입니다. 애너테이션 기반으로 XML ↔ 객체 간 매핑을 자동으로 처리해줍니다.

특징

  • Java 클래스와 XML 간의 마샬링/언마샬링 자동화
  • 애너테이션 사용
  • XML 스키마(XSD) 기반 클래스 생성 가능

 

장점

  • 코드가 간결하고 직관적
  • 객체 지향 개발과 친화적
  • 유지보수가 쉬움

 

단점

  • 대용량 XML 처리에 부적합 (메모리 소비 큼)
  • 복잡한 XML 구조나 유연성이 필요한 경우 어려움

 

사용 예시

@XmlRootElement
public class Person {
    private String name;
    private int age;
    // getter/setter
}

 

2. StAX (Streaming API for XML)

StAXPull 방식의 XML 파서입니다. 이벤트 기반 처리이면서도 개발자가 명시적으로 XML 흐름을 제어할 수 있어 유연성과 성능이 우수합니다.

특징

  • XMLStreamReader, XMLStreamWriter 사용
  • Forward-only, 읽기/쓰기 스트림
  • Pull 방식: 직접 next() 호출로 이벤트 수신

 

장점

  • 대용량 XML 처리에 적합
  • SAX보다 코드가 직관적
  • 메모리 사용량 최소화

 

단점

  • 객체 바인딩이 불편
  • XML의 전체 구조를 알기 어렵고 유지보수 힘들 수 있음

 

사용 예시

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("file.xml"));

※ XML 생성에는 매우 부적합 하다고 생각 됩니다.

 

3. SAX (Simple API for XML)

SAX는 이벤트 기반의 Push 방식 XML 파서입니다. XML 요소를 읽을 때마다 이벤트가 자동으로 발생하고, 개발자가 이를 처리하는 방식입니다.

특징

  • 순차적, 읽기 전용
  • 이벤트 핸들러 방식(startElement, endElement 등)

 

장점

  • 대용량 파일 처리에 적합
  • 메모리 효율적 (DOM보다 수천 배 빠를 수 있음)
  • 빠름

 

단점

  • 상태 추적이 어렵고 복잡함
  • 요소 간 관계를 파악하거나 구조를 기억하기 어려움

 

사용 예시

DefaultHandler handler = new DefaultHandler() {
    public void startElement(...) { ... }
};
SAXParser parser = factory.newSAXParser();
parser.parse(new File("file.xml"), handler);

※ 가장 빠르고 메모리를 효율적으로 쓰지만 그만큼 사용하기 어려운 면이 있다고 생각합니다. 개인적으로는 SAX보다는 StAX를 추천 합니다.

※ StAX와 마찬가지로 XML 생성에는 매우 부적합 하다고 생각합니다.

 

4. DOM (Document Object Model)

DOM은 XML 문서를 트리 구조로 메모리에 로드해서 전체 문서를 탐색하고 수정할 수 있는 방식입니다. 직관적인 문서 조작이 가능하지만, 메모리 사용량이 많습니다.

특징

  • 전체 문서를 메모리에 로딩 후 조작
  • DocumentBuilderFactory 사용

 

장점

  • 구조를 탐색하거나 수정하기 쉬움
  • 개발이 직관적
  • XPath와 잘 어울림

 

단점

  • 대용량 XML 비효율
  • 메모리 소비 큼

 

사용 예시

DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("file.xml"));

※ XPath 방식에 익숙하다면 가장 직관적인 방식이라고 생각하고, 서명 또는 암호화가 필요할 경우 태그 지정에 이 방식을 사용하고있어 XML을 다룰 일이 많은 업무라면 반드시 익혀야 할 파싱 방식입니다.

 

XML 파서 비교 표

파서 방식 메모리 사용 성능 사용 난이도 객체 바인딩 특징
JAXB 객체 바인딩 중간 중간 쉬움 O 자동 매핑
StAX Pull 이벤트 낮음 높음 보통 X 스트리밍
SAX Push 이벤트 매우 낮음 매우 높음 어려움 X 빠르고 가벼움
DOM 트리 기반 쉬움 X 구조 탐색 / 수정 가능

 

언제 어떤 XML 파서를 써야 할까?

  • 객체 ↔ XML 자동 변환 : JAXB
  • 대용량 XML, 빠른 처리 : StAX, SAX
  • 구조 탐색/수정 : DOM

 

결론

Java에서 XML을 파싱할 때는 상황에 맞는 파서를 선택하는 것이 핵심입니다. 단순하게 XML을 Java 객체로 바꾸려면 JAXB, 성능이 중요하다면 StAX나 SAX, 구조를 다루고 수정하려면 DOM을 고려하세요.

XML은 점점 JSON으로 대체되는 추세이지만, 여전히 엔터프라이즈 환경이나 레거시 시스템에서는 XML이 강력한 역할을 합니다. 지금 이 기회를 통해 Java XML 파서의 차이와 사용법을 제대로 이해해 보세요.

저는 프로젝트에서 XML을 생성할땐 JAXB, 서명할땐 DOM, 파싱하여 데이터를 처리할땐 StAX를 사용했습니다.

 

관련글

[개발/Java] - JAVA에서 XML 전자문서에 디지털 서명하는 방법 (PKCS12 인증서 사용)

 

 

 

728x90