XML과 DOM, SAX 방식

    현재의 웹 생태계는 어느덧, API를 웹상으로 호출하는 방식의 시대로 패러다임이 변화하고 있다.

    정부 3.0의 정부 데이터를 공개를 시작으로 SECaaS, OPEN API, 기타 서비스 클라우드를 콜하는 것까지 공개된 혹은 사용량만큼의 금액을 지불하고 사용하는 시대로의 패러다임이 전환되었다.


    현재 다니고 있는 회사 역시, 예전처럼 직접 개발자가 코딩을 하여 API를 붙여주는 방식을 벗어나서, REST 기반의 API를 알려주어서 고객이 직접 페이지를 붙이는 작업의 비율이 점점 올라가고 있는 추세이기도 하다.



    현재, 웹에서 API를 Call하는 방식중 가장 많이 사용한 것이 JSON 방식이기는 하나, XML도 무시못할 수준이기도 해서, XML에 대해서 설명해보고자 한다.



    XML(eXtensible Markup Language)는 W3C에서 개발된, 다목적 Markup 언어이다.

    HTML는 한계가 존재하였고, 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있는 구조는 아니었기에 만들어졌다.




    XML의 기본개념

    • XML은 구조적인 데이터를 위한 것이다.
    • XML은 다소 HTML 같이 보인다.
    • XML은 텍스트이며, 읽히는 것만을 뜻하지 않는다.
    • XML은 크기가 커진다.
    • XML은 기술의 집합이다.
    • XML은 새로운 기술이 아니라 발전한 기술이다.
    • XML은 HTML에서 XHTML로 이끌었다.
    • XML은 모듈식이다.
    • XML은 RDF와 시맨틱 웹의 토대이다.
    • XML은 라이선스 제약이 없으며, 플랫폼이 독립적이고, 많은 지원이 있다.

    XML의 구성도




    XML의 주요 용어


    Tag(태그) : <로 시작해서 >로 끝나는 마크업 구조이다. (ex: <title></title>)

    Content(내용) : 태그안에 존재하는 value이다. 

    Attribute(속성) : 이름/값 짝으로 이루어진 마크업 구조로 시작 태그 또는 빈 엘리먼트 태그 속에 위치한다. <thread count="4"/> 일 경우, 애트리뷰트 이름은 thread이고 값은 4이다.



    XML의 형식을 사용하는 언어

    • RDF
    • RSS
    • Atom
    • MathML
    • XHTML
    • SVG


    XML은 다양한 값들을 표현할 수 있기 때문에, 많은 언어에서 선택하고 있다.



    XML을 파싱하는 방법


    핵심적인 것은 XML을 어떻게 파싱하는지이다.

    사실 많은 사람들이 XML의 파싱 방법에 대해서 고민을 하지 않고, 인터넷 블로그에 떠돌아다니는 방식으로 파싱하고 사용하고 있다.


    물론 간단한 설정파일이라고 한다면, 어떤 방식을 사용하든 프로그램에 영향을 주지 않겠지만, XML이 DATA가 되는 경우에는 경우가 다르다.


    XML의 파싱 기법은 DOM과 SAX 방식이 존재하는데 각각의 의미는 아래와 같다.


    가. DOM (Document Object Model) 방식


    DOM방식은 메모리에 모두 로드를 한 후 파싱한다. 

    메모리에 모두 로드되어 있기 때문에 검색, 수정 등 방식이 빠르고, SAX보다 파싱하기 용이하다.



    나. SAX(Simple API for XML) 방식


    SAX 방식은 라인을 하나하나 순차적으로 읽어가며 파싱을 수행한다.




    그럼 어느 경우에는 어떤 방식을 사용해야 하는가??


    위 내용을 본 것처럼, DOM과 SAX 방식은 장단점이 명확하다.

    DOM 방식은 메모리에 올려둔 후 처리를 하기 때문에 메모리에 올리는 과정이 별도로 들어가게 되지만, XML을 여러번 핸들링 해야 할 경우, DOM 방식은 SAX보다 확실히 유리하다.


    반대로, SAX는 한번 읽고나서 끝이라고 생각하면 이해가 쉽다. DOM처럼 전체를 메모리에 올리지 않기 때문에 메모리의 사용량이 적으며, 별도의 작업이 추가적으로 들어가지 않는다.


    1. XML 문서를 수정하는 등의 추가적인 핸들링 작업이 들어갈 경우 DOM 방식을 사용한다.
    2. 단순히 데이터를 파싱하여, 화면에 View하는 경우는 SAX 방식을 사용한다.
    3. 대용량의 데이터로 인해서, 메모리에 문제가 발생할 경우, SAX 방식을 사용한다.
    4. XML 문서의 구조가 복잡할 경우, DOM 방식을 사용한다.
    5. 단순한 설정을 읽는 경우는 SAX 방식을 사용한다.


    머리속에서 어떤 것을 사용할 지 아직도 정리가 되지 않았다면 이것만 생각해보자.


    그냥 단순히 Config 형태의 값을 읽거나, 데이터를 뿌리는 정도의 핸들링이라면 SAX로 가는 것이고,

    문서의 수정, 검색등이 존재한다면 DOM으로 가자...


    물론, 개발의 퍼포먼스 등과 복잡한 구조일 경우는 또다른 경우의 수가 생기는 문제가 발생한다.

    사실 이러한 고민을 하는 개발을 크게 많지가 않다. 일반적으로 설정값을 읽는 경우가 대부분이기 때문이다.



    그러면, 다시 돌아가서 정말 간단히 설정만 읽는 경우거나 혹은 저용량의 데이터를 뿌리는 구조인데 구조가 복잡하다면??


    답은 SAX 뿐만 아니라 DOM 방식도 될 수가 있다. 설정과 데이터를 간단히 뿌리는 것이 SAX가 유리할 수 있지만, 그 외에 개발의 기간 및 유지보수성도 포함될 수 있기 때문에 답이 정해질 수 없는 것이다.





    댓글

    Designed by JB FACTORY