XML Parser(DOM / SAX)와 JSON Parser
XML Parser
XML과 DTD를 읽어 문서의 정확성을 검증하고 문서 내용과 문서 구조에 접근할 수 있게 해주는 Library 형태의 프로그램
XML 문서가 XML의 Constraints를 따르는지 검사하고 Application에게 XML 문서의 data 또는 자료 구조를 제공하며 Element, Attributes, Entity등의 정보 생성
XML Parser가 Application에게 Parsing한 결과를 넘겨주는 방법으로 Tree 기반 Parser와 Event 기반 Parser 두 가지로 분류할 수 있다
XML 파서가 필요한 이유
XML(eXtensible Markup Language)는 웹 서비스의 기본 데이터 format으로 server와 client의 중요한 통신 수단
서버는 클라이언트의 요청을 받아들여 처리하고 그 결과를 XML로 리턴하며 클라이언트는 XML을 분석하여 처리 결과를 얻게됨
웹 서버에서 주고받는 XML 문서를 빠르고 정확하게 읽는 부분이 중요하다
XML 자체는 단순한 text format이지만 규칙이 엄격하여 정확한 정보를 빼내기 어려우므로 XML 문서를 대신 읽어주는 XML Parser가 필요하다
XML 프로세싱 방법
방법 A: XML 브라우저 이용 – 별도 프로그램 없이 XML 브라우저에 전적으로 의존
간단한 XML 문서는 가능하지만 다양한 XML 응용에는 힘들다
방법 B: XML 프로세스 API 이용 – 이벤트 기반 SAX(Simple API for XML)
객체 모델 기반 DOM(Document Object Model)
XML Parsing 방법(DOM / SAX)
DOM과 SAX는 하나의 API로 XML 문서를 구조화해서 XML 문서를 원하는 방법으로 활용(필요한 Data를 가져오거나 수정)하는 API
DOM이나 SAX는 XML 문서에 있는 Data를 효과적으로 다루기 위해서 필요
특정 node에 있는 Data만 가져오고 특정한 Attribute의 값을 수정할 때 DOM과 SAX를 이용해서 이런 작업들을 method 몇 개를 활용해서 쉽게 할 수 있다
DOM Parser
정의: Tree 기반 API
W3C에서 공식 표준으로 규정한다
XML 문서를 해석한 후, 해석 결과를 메모리에 DOM(Document Object Model) 이라는 객체 트리 구조로 생성시키는 파서
전체 구조를 파악한 후 정보를 구하는 방식
XML 문서 전체를 Parsing하여 메모리에 올려놓고 요청되는 node data를 메모리에서 끌어당기는 Pull 방식 사용
IDL(Interface Description Language / Interface Definition Language)로 정의되어 있다
node 단위로 데이터 처리
문서의 구조 정보와 내용을 객체로 이용
메모리 적재 방식
저용량 문서에 적합
장점: 문서의 모든 내용을 메모리에 트리 형태로 펼친 후 읽으므로 속도가 대단히 빠르고(일단 처음 메모리에 펼친 후) 임의의 노드를 여러 번 읽을 수 있다
성능이 좋다
XML 문서의 구조를 그대로 적용할 수 있으며 임의의 엘리먼트나 속성에 바로 접근할 수 있고 값의 수정이 가능-데이터의 재가공 용이
node 삽입 가능
DOM 구조를 여러 번 이용하는 경우 효과적
(처음 메모리에 XML 문서를 모두 로드한 후 값을 읽으므로)XML 문서가 메모리에 모두 로드되어있으므로 노드의 검색, 수정, 구조 변경 등이 빠르고 용이(XML 편집이 가능)
직관적이고 SAX보다 파싱하기 단순
단점: 전체 문서를 다 읽어서 트리를 완성한 후 읽기가 가능하므로 처음 시작이 다소 느리다
문서가 커지면 메모리를 많이 소비
문서를 한 번만 읽어 처리해야할때는 비효율적
이런 경우 사용: 문서의 일부를 두 번이상 읽어야 할 때
문서를 수정해야 할 때
문서의 구조적인 처리가 필요할 때
문서의 용량이 크지 않을 때
SAX Parser
정의: 문서를 순서대로(순차적으로) 읽으며 이벤트를 발생하는 방식, Event 기반
자료 구조를 만들지 않고 XML 문서를 스캔해가며 순차적으로 이벤트를 발생해서 XML 문서에 접근할 수 있게 해주는 API
XML 문서를 전체 메모리에 올려 Parsing하는 방식이 아닌 XML 문서를 순차적으로 읽어들여 Event를 해당 Procedure에게 처리하라고 밀어주는 방식을 이용
XML 시작과 끝에서 이벤트 생성(노드가 열리고 닫히는 부분에서 이벤트 발생)
XML 문서를 하나의 긴 문자열로 간주
라인 인터프리터 방식
대용량 문서에 적합
장점: 메모리를 거의 사용하지 않으며 기동 속도가 빠르다
중간에 파싱을 그만둘 수도 있다
딱 한번만 문서를 읽는다면 DOM보다 훨씬 빠르며 원하는 node만 골라읽을 수 있다
mobile 환경에서는 주로 XML 문서를 읽기만 하므로 SAX Parser가 더 유용할 수 있다
단점: 읽기전용(node 삽입, 수정 불가능)
느리다
문서의 일부분에 대한 임의 접근 불가
이벤트 및 작업 상태를 직접 보관해야한다
단순하게 어떤 요소를 읽었는지의 정보만 줄 뿐 이 요소가 어떤 요소의 일부인가 하는 등의 문맥 정보를 자동으로 유지해 주지는 않는다
발생한 이벤트를 핸들링하여 변수에 저장, 활용하는 것이므로 복잡하고 노드 수정이 어렵다
DOM보다 어렵고 복잡 -> 직관적이지 않다
한번 처리 후 수정 불가
문서의 구조에 대한 정보 파악이 불리
이런 경우 사용: XML 문서를 순차적으로 일괄 처리하는 경우
상대적으로 XML 문서 구조가 간단하고 그 구조 자체가 주요 관심사가 아닌 경우
동일 오류 처리하는 경우
엘리먼트를 일부 추출하는 경우
ps. 크기가 큰 XML을 DOM 방식, SAX 방식 각각 비교할 경우 SAX 방식이 더 빠른 속도를 보여준다
JSON Parsing
JSON 정의: 웹에서 정보를 주고 받는 경량화된 방법
XML보다 좀 더 간략화된 정보 전달 방법
프로그래밍 언어의 변수를 전달하는데 효율적
자바스크립트에서 주로 사용되나 다른 언어에서도 사용 가능
장점: XML Parser가 아닌 자체 format을 가지고 있다
data file은 단순한 Unicode 방식 -> 읽을 수 있고 직접 편집도 가능
단순한 text 파일이라 네트워크로 전송하기 편리 -> text를 읽고 쓸 수 있는 모든 언어나 플랫폼에서 사용가능
header, namespace와 같은 형식적인 정보나 구두점이 거의없고 순수 정보만있으므로 일반적으로 XML보다 길이가 짧다
대부분의 언어에 JSON Parser가 Library로 제공되므로 직접 문자열을 Parsing할 필요가 없다
RFC 4627로 format이 규격화되어 있어 나름대로 표준이 정립되어 있다
단점: 형식이 함축적이어서 XML보다 가독성이 떨어짐
XML과 JSON의 비교
XML은 표현력이 풍부하고 규칙이 엄격해서 기계화가 가능하고 이기종간의 통신에도 가장 좋지만
지원이 제한된 모바일 환경에서는 사정이 달라질 수 있다
이유: XML은 SGML을 간략화한 format임에도 워낙 기능이 많아 Parser가 정밀하게 분석하려면 시간이 꽤 걸리며 DOM Parser는 모든 문서를 메모리에 다 올려야 하므로 메모리도 많이 소모
모바일 환경에서 XML의 비효율성은 치명적
그래서 XML보다 좀 더 간략화된 정보 전달 방법이 고안되었고 그 방법 중 하나가 JSON이라고 할 수 있다
'IT > HTML' 카테고리의 다른 글
Parsing (파싱) 이란? Parser (파서) 란? (10) | 2017.11.10 |
---|---|
Web Browser HTML Rendering 순서 (0) | 2017.11.10 |
DOM(Document Object Model) 이란? DOM Tree 란? (0) | 2017.11.10 |
innerHTML과 outerHTML 차이 (0) | 2017.11.10 |