 |
|
소개
XML은 애플리케이션 간의 통신방법으로서 사실상의 표준(혹은 표준 중 하나)이 되어왔다. 같은 장비에서 실행되고 있는 애플리케이션, 혹은 다른 곳에 있는 웹 서비스, 지불 게이트웨이, 배송 게이트웨이, 아니면 다른 무작위 데이터 소스 등, 좋고 싫은 걸 떠나서 어떤 식으로든 알게 되는 것이 XML이다. 그런데 레일스 프레임워크로 XML을 다루는 튜토리얼을 쓴다는 것이 어찌 보면 아이러니다. 레일스는 "재미있게, 그리고 XML 때문에 생고생하는 다른 대부분의 프레임워크보다 더 적은 코드로 실세계의 애플리케이션을 만들어낼 수 있는 오픈소스 웹 프레임워크, 레일스를 배우세요" 같은 말(Loud Thinking에서 인용)로 유명해진 프레임워크이기 때문이다. 우리는 여기서 이 튜토리얼에서 다루는 XML 처리가 레일스와는 무관하다는 것에 주목할 필요가 있다. 여기서 사용할 XML API들은 모두 어떤 루비 애플리케이션에서든 사용할 수 있다. 레일스는 처리할 XML 파일의 업로드 및 여러분이 작성한 코드와의 상호작용을 쉽게 하기 위한 맥락으로 사용할 것이다.
루비
아직 모르는 독자들을 위해 설명하자면, 루비는 유키히로 마츠모토(일명 마츠)가 만든 동적 타입 스크립트 언어다. 1993년에 개발을 시작하여 1995년에 처음으로 공개 버전이 발표되었다. 루비는 클로저(closures), 콜백(callbacks), 오리 타입(duck typing, 역자 주: 루비는 실제 객체의 타입이 무엇인지 신경 쓰지 않는다. 단지 그 객체가 어떤 메서드를 가지고 있는지에만 의존하는데, 이것을 오리 타입이라고 부른다. 즉 오리처럼 뒤뚱거리며 걷고 꽥꽥거린다면, (객체의) 타입과는 상관없이 그냥 오리로 취급해도 무방하다는 뜻이다.)과 같은 훌륭한 기능들과 더불어, 레일스라는 놀라울 정도로 유연한 프레임워크를 그 위에 올릴 수 있는 언어다.
레일스
레일스는 데이비드 하이네마이어 한슨이 만들었고 2004년에 첫 버전이 발표되었으며 모델, 뷰, 컨트롤러 아키텍처(MVC architecture) 기반의 웹 애플리케이션을 만들기 위한 프레임워크다. 설정(configuration)보다는 관례(convention)에 의한 프로그래밍을 강조하고, 완전히 자동화된 객체-관계 매핑 및 영속성 등 놀라울 정도로 멋지고 다양한 기능들을 제공한다. 이 튜토리얼에서는 레일스의 기본 기능들, 즉 간단한 컨트롤러와 뷰를 활용하여 XML 파싱을 시연해볼 것이다.
루비와 XML
루비는 XML을 파싱하고 생성하기 위한 다양한 API들을 제공한다. REXML은 루비에 내장된 표준 API인 반면, 빌더와 Hpricot 같은 프레임워크들은 젬으로 제공된다. 젬은 특정 포맷을 따르는 필수적인 써드파티 API나 라이브러리들이며, 손쉽게 다운로드해 설치할 수 있다(JAR 파일로 제공되는 서드파티 자바 API와 개념적으로 유사하다).
REXML
REXML은 XML을 파싱하고 만들기 위한 루비 표준 라이브러리다. 루비 언어 코어 배포판(Ruby Core language distribution)에 포함되어 있기 때문에 언제든지 사용할 수 있다.
빌더
빌더는 XML 컨텐츠를 생성하기 위한 써드파티 젬이며 점점 더 인기를 얻어가고 있다. XML을 생성하는 데 루비의 method_missing 콜백을 활용하여 문법이 매우 깔끔하고 코드를 작성하거나 읽기 쉽다.
Hpricot
Hpricot은 "why the lucky stiff"에 의해 만들어진 빠른 HTML 파서로서 XML도 파싱할 수 있다. 빌더와 마찬가지로 인기를 더해가고 있다.
#{random_xml_util}
루비에서 XML 파싱을 위한 다른 API들이 더 있지만 이 튜토리얼에서는 다루지 않겠다. 더 알고 싶다면 RubyForge를 방문해 찾아보기 바란다.
|