IT 기술/Developer article

[소개] IBM DeveloperWorks : PHP에서 풀(pull) 방식으로 XML 구문을 분석하는 방법 (한글)

ㅇㅔ ㄷㅡ 2008. 3. 17. 13:54
 최근에 IBM DeveloperWorks에 올라온 글중에서 PHP 관련 글을 소개하려합니다.
"PHP에서 풀(pull) 방식으로 XML 구문을 분석하는 방법 (한글)  스트리밍 방식으로 메모리 효율을 높인다"라는 제목의 글은 PHP 5에서 추가된 XMLReader 라이브러리를 이용하여 글의 제목처럼 메모리 효율을 올리는 방법에 대한 글입니다.

PHP가 5 버전에 이르러서 많은 변화가 있었는데 실무에서 PHP 개발을 하지 않은지가 오래되서 그런지(요 2년사이에는 기능 수정하는 정도만 했었습니다.) XMLReader라는 라이브러리는 좀 생소하군요.

원문 : PHP에서 풀(pull) 방식으로 XML 구문을 분석하는 방법 (한글)  (부제 : 스트리밍 방식으로 메모리 효율을 높인다)

 아래는 문서의 앞부분을 발췌한 것입니다.

PHP 5는 XML(eXtensible Markup Language)을 읽는 클래스인 XMLReader를 새롭게 지원한다. SimpleXML이나 DOM(Document Object Model)과는 달리 XMLReader는 스트리밍 모드에서 동작한다. 즉, 문서를 처음부터 끝까지 읽어들인다는 뜻이다. 또한 문서를 끝까지 읽기 전에 이미 읽어들인 부분만으로도 작업이 가능하다. 따라서 속력이 매우 빠르고, 효율성이 높으며, 메모리가 크게 절약된다. 처리할 문서가 클수록 메모리 효율과 속력은 더욱 중요한 요인이다.

libxml

여기서 소개하는 XMLReader API는 Gnome 프로젝트의 C/C++용 libxml 라이브러리를 사용한다. 구체적으로 보면 libxml의 XmlTextReader API를 호출하는 PHP 레이어일 뿐이다. XmlTextReader는 .NET의 XmlTextReaderXmlReader 클래스를 모델로 삼았다(코드를 공유하지는 않는다).

푸시(push) 모델을 사용하는 SAX(Simple API for XML)와는 달리, XMLReader는 풀(pull) 모델을 사용하는 구문분석기다. 즉, 여러분이 만든 프로그램에 통제권이 있다는 뜻이다. 구체적으로 설명하자면, 구문분석기가 프로그램으로 이벤트를 밀어주는 방식이 아니라, 프로그램에서 다음 이벤트를 명시적으로 가져오는 방식이다. 프로그램이 발생하는 이벤트에 반응하기보다 프로그램에서 내용을 요청한다고 보면 된다. 디자인 패턴 관점에서 보면, XMLReader는 Observer 패턴이 아니라 Iterator 패턴을 구현한 클래스라고 하겠다.