SSAFY11th-book-study / book-study

0 stars 0 forks source link

[7.2.1] JAXB와 XML API 비교 #74

Open a-young-kim opened 2 months ago

a-young-kim commented 2 months ago

p. 568 DOM과 같은 전통적인 XML API와 비교했을 때 JAXB의 장점은 XML 문서정보를 거의 동일한 구조의 오브젝트로 직접 매핑해 준다는 것이다. DOM은 XML 정보를 마치 자바 리플랙션 API를 사용해서 오브젝트를 조작하는 것처럼 간접적으로 접근해야 하는 불편이 있다. 이 부분에서 다음과 같은 의문이 생겼습니다.

  1. 해당 문단에서 말하는 DOM이라는 것은 무엇인가요?
  2. 싸피에서 mapper.xml을 구현하여 자동으로 매핑을 시켜주었는데 해당 방식과 JAXB의 차이는 무엇인가요?
gmelon commented 2 months ago
  1. xml을 파싱한 DOM은 js에서의 화면 DOM 트리와 유사하게 아래와 같은 구조를 가집니다 image

단순히 xml에 작성한 태그들의 관계를 표현한게 DOM 이라고 이해했습니다. DOM 방식의 XML API는 아래와 같이 간접적으로 문자열 또는 관계만을 이용해 파싱해야 하지만

NodeList childeren = root.getChildNodes(); // 자식 노드 목록 get
        for(int i = 0; i < childeren.getLength(); i++){
            Node node = childeren.item(i);
            if(node.getNodeType() == Node.ELEMENT_NODE){ // 해당 노드의 종류 판정(Element일 때)
                Element ele = (Element)node;
                String nodeName = ele.getNodeName();
                         ...

JAXB를 사용하면 컴파일 타임에 XML의 구조를 분석하여 DTO 같은 클래스를 만들어주기 때문에 명시적으로 자바 객체를 다루는 것 처럼 편하게 사용할 수 있다고 얘기하는 것 같습니다.

  1. JAXB는 XML을 파싱하는 API이고, MyBatis는 XML을 파싱하여 sql문을 실행해주고 이것저것 해주는 프레임워크 입니다. 책에서 작성했던 XmlSqlService가 간단한 버전의 MyBatis라고 할 수 있을 것 같습니다. 다만 gpt한테 물어보니 MyBatis는 내부적으로 JAXB를 사용하진 않는다고 합니다. 자체 개발한 모델을 사용한다고 하네요.