Hi~ Summers!!

XML을 저장하는 다양한 방법 본문

개발/기타

XML을 저장하는 다양한 방법

eNaNII 2006. 6. 19. 14:02
이번 호에서는 정보를 표현하기에 뛰어난 장점을 가지면서 e비즈니스 문서 거래의 표준으로 자리잡은 XML(eXtensible Markup Language)을 저장하기 위한 저장장치를 선택하는 기준은 무엇이며 어떤 방법으로 저장하고 다시 읽어 들이는지에 대해 케이스 별로 살펴본다.

XML은 e비즈니스에서 데이터의 표현 수단으로 많이 쓰이며 기업간 문서 교환의 표준으로 자리를 잡아가고 있다. 중요한 정보를 가지는 XML에 대해 생성, 수정 및 삭제에 대한 라이프 사이클을 관리하고 내용 정보에 대한 검색 기능은 해당 애플리케이션에서 많이 요구된다. 이번 호에서는 상위 애플리케이션에서 필요에 의해 XML 문서를 생성, 저장 및 관리할 경우 애플리케이션에 맞는 최적의 저장장치를 선택하는 기준과 저장 방법에 대해 설명한다.

XML의 저장장치를 선택하는 기준
이 글에서는 XML의 저장장치로 파일 시스템, 데이터베이스 시스템, XML 전용 저장장치를 예로 설명한다. 저장장치는 XML을 저장하는 애플리케이션의 목적에 적합해야 하고 성능 상에 문제가 없어야 하며 가격 또한 저렴하면 더욱 좋을 것이다.
XML의 저장장치 선택시 필요 이상의 비용을 들여 값비싼 저장장치를 구매하고 실제 사용할 경우 단순한 저장 및 업데이트 기능을 한다면 그 저장장치는 제 가치를 발휘하지 못할 것이다. 마찬가지로 대용량의 데이터가 지속적으로 발생하며 다수의 사용자가 동시 접속하여 처리 속도가 빠르고 안전한 저장장치가 필요로 한데 비용만을 생각하여 트랜잭션에 대한 지원이나 시스템 클러스터링 등의 고가용성을 보장받지 못하는 저장장치를 사용한다면 차후 정보 손실 및 사용자 증가 및 데이터 증가에 대한 대비가 되지 못할 것이다.

파일 시스템으로도 XML을 저장할 수 있다
가장 오래된 저장장치로 파일 시스템을 예로 들 수 있다. XML을 파일 시스템을 이용해서도 저장, 검색, 복원이 가능하다. 다음은 파일 시스템을 이용하여 XML을 저장 관리할 수 있는 경우를 예로 나타낸다.

짾 시스템 환경을 XML로 표현하고 파일 시스템에 저장하라
XML이 보편화되기 이전의 많은 프로그램들은 자신의 시스템 환경 정보들을 고유의 방식과 표기법을 이용하여 저장 관리했다. 이에 대해 그 프로그램을 사용하는 개발자는 각각의 환경 설정법에 대해 배우고 익혀야 했다. 최근 대부분의 시스템들은 그 시스템을 운영하는데 필요한 정보들을 XML로 저장하여 시스템 환경이 추가되거나 변경돼도 별 문제 없이 적용할 수 있다. 또한 사용자들도 그 환경 변수를 쉽게 이해할 수 있다.

짿 데이터 건수가 방대하지 않고 보존 기간이 짧은 데이터는 XML로 표현하고 파일 시스템에 저장하라
응용 애플리케이션에서 다루는 데이터들은 3개월 이상 보존돼야 하는 데이터, 매일 정보가 변경되며 하루가 지난 정보는 의미가 없는 데이터, 몇일 내지 몇주 정도의 보존 기간을 필요로 하는 데이터 등 그 성격에 따라 관리해야 하는 데이터의 양은 상대적으로 적거나 방대할 수 있다.
데이터의 양이 아주 많은 경우는 저장장치에 저장하고 이를 메모리에 버퍼링하는 등 복잡한 캐시 로직 등을 지원하는 데이터베이스 시스템이 필요하나 데이터 양이 적은 경우는 전체 혹은 일부를 메모리로 로딩하여 파일 시스템을 이용하여 쉽게 구현할 수 있다.
예를 들어, 국내 프로야구 구단 전체의 선수 목록에 대한 정보는 그 데이터가 방대하지 않으며 관리의 어려움은 많지 않을 것이다. 이러한 정보들은 XML 표현으로 저장하고자 한다면 파일 시스템의 기능으로도 충분한 역할을 할 수 있다.

쨁 시스템 메모리에 전체를 로딩하여 연산을 할 수 있다면 파일 시스템에 저장하라
필자가 대학시절 인텔 8086 CPU를 보유한 컴퓨터의 메모리를 업그레이드한 경험이 있다. 당시 불과 1MB 남짓한 메모리를 지금의 512MB 가격으로 구매한 것이다. 당시 값비싼 메모리는 큰 프로그램을 로딩하기 위해 사용했다면 상대적으로 가격이 싸진 최근에는 데이터를 가장 빠른 매체에 저장하기 위해서도 사용될 수 있다. 디스크에 저장된 모든 데이터를 메모리에 모두 로딩하여 서비스를 지원하는 시스템들이 있으며 메모리 상주 데이터베이스 시스템을 예로 들 수 있다.
XML을 저장하는 시스템을 구축할 경우 전체 데이터가 시스템 메모리에 충분히 저장되고 메모리 기반으로 빠르게 관리될 수 있다면 굳이 값비싼 저장장치를 이용하지 않고도 목적을 이룰 수 있다. 물론 파일 시스템이 지원하는 기능과 메모리 기반에 데이터를 운영하고 그 메모리 상의 데이터를 처리하는 알고리즘은 시스템 구축시 시스템 아키텍트가 설계해야 할 몫이다.

파일 시스템이 데이터베이스 시스템에 비해 검색 기능이나 관리 기능에서 부족하지만 특별한 기능과 성능이 요구되지 않는다면 파일 시스템을 XML의 저장소로 충분히 활용할 수 있다. 10여명의 동호회 정보를 유지 보수하는 게시판을 구축한다고 했을 때 수천 만원대의 대용량 데이터베이스를 구매하여 사용하지 않는 것과 마찬가지로 데이터의 양이 적거나 검색 등의 기능이 파일 시스템으로도 가능하다면 XML의 저장장치로 파일 시스템을 선택할 수 있다.

DB를 이용하여 XML을 다양한 방식으로 저장하자
데이터베이스 시스템은 실 세계의 정보를 엔티티와 관계 구조로 해석하여 여러 개의 테이블과 제약조건 및 테이블간의 관계로 저장 및 관리하며 SQL(Structured Query Language)이라는 뛰어난 질의 언어를 사용할 수 있도록 제공한다.
XML은 하나의 루트 노드를 가지며 각 노드는 N개(N>=0)의 자식 노드와 속성을 가지는 구조를 가진다. 이러한 XML의 구조는 데이터베이스의 관계형 모델과 일치하지 않을 수 있다. 하지만 데이터 모델의 차이를 구조간의 맵핑 방법을 이용한다면 데이터베이스는 XML의 좋은 저장 매체가 될 수 있다. 데이터베이스 시스템 벤더들은 이러한 XML의 데이터 모델과 관계형 데이터 모델의 차이를 극복하기 위해 XML 자체를 NUMBER, VARCHAR 타입 등과 같이 하나의 데이터 타입으로 사용할 수 있는 XML 타입을 지원하거나 준비하고 있다. 다음은 데이터베이스 시스템을 이용하여 XML을 관리하는 예를 나타낸다.

짾 저장할 대상이 되는 XML이 표현하는 정보가 기존 데이터베이스 시스템의 정보와 1:1로 맵핑이 가능하다면 XML에서 데이터베이스로, 데이터베이스에서 XML로 정보 맵핑 방법을 이용하라
XML 데이터를 구분해 보면 한 권의 책의 내용 전체를 표현하는 비교적 정보가 많고 복잡하며 문서에 가까운 XML 데이터가 있을 수 있으며, 반대로 상품 구매 요청 정보 및 전자상거래 전문과 같은 짧으면서 비교적 정보가 메시지에 가까운 XML 데이터가 있을 수 있다. 전자의 경우를 문서 기반 XML(document-oriented XML), 후자의 경우를 메시지 기반 XML(message-oriented XML)로 나누기도 한다.
데이터베이스는 후자의 경우인 메시지 기반 XML 형식의 데이터를 저장하기에 더 적합하다. XML은 기업간의 메시지 교환의 표준으로 자리매김하고 있으며 기존 기업내 데이터에 대한 XML로의 저장 요구뿐만 아니라 XML로의 변환 요구 또한 많다. 기업내의 모든 정보가 데이터베이스로 잘 구현되어 있고 그 사용상에 문제점이 없다면 굳이 XML 기반으로 데이터 모델을 바꿔 저장할 필요성은 없다. 단지 XML이 필요한 부분에 대해 적합하게 데이터의 변환을 통해 메시지 교환의 요구사항을 충족할 수 있을 것이다.
메시지 기반 XML과 같이 XML의 내부 구성 정보가 데이터베이스의 하나의 레코드 컬럼과 같이 간략히 표현되며 데이터베이스 시스템의 정보 모델과 1:1로 맵핑이 가능하다면 XML 데이터의 생성 및 저장은 XML과 데이터베이스 테이블간의 관계 맵핑으로 가능하다.

짿 XML 데이터 전체에 대한 검색이 아닌 일부 메타 정보에 대해 검색 서비스를 제공하는 애플리케이션에서는 일부 메타 정보를 저장할 테이블을 생성하여 검색 서비스를 제공하라
XML은 해당 XML 문서를 유일하게 식별하여 검색 키로 사용되고 다른 XML 문서와 구분을 가능하도록 하는 주요 메타 정보와 나머지 구성 정보로 나눠질 수 있다.
예를 들어 고객 정보를 고객 이름, 주소, 주민등록번호 등으로 표현하면 고객 정보 내의 모든 필드들은 정보를 구분하고 검색하는 데 사용될 수 있다. 반면 월간지 정보를 제목, 발행일, 출판사, 각 장의 제목, 각 장의 내용 및 단락 등으로 표현한다고 하면 제목, 발행일, 출판사, 장 제목 등은 검색이나 구분의 목적으로 사용될 수 있지만 장의 내용 및 단락의 내용 등은 그렇지 못하다.
이와 같이 데이터의 일부 정보가 메타 정보의 역할을 하여 검색 서비스 등에 사용하고 나머지 부분에 대해서는 저장과 관리를 목적으로 사용한다면 그 일부 데이터에 대해 테이블을 설계하고 저장 관리하며 나머지 정보 혹은 XML 문서 전체에 대해서는 데이터베이스의 LOB(Large Object) 타입 등으로 저장하여 데이터의 변경, 검색, 생성 등을 지원할 수 있다.

쨁 데이터베이스 시스템이 제공하는 XML 관련 기능을 최대한 활용하라
앞에서 설명한 두 가지 방법 이외에도 데이터베이스 시스템을 이용하여 정보를 저장하는 경우는 더 많이 있다. 여기에 데이터베이스 시스템이 제공하는 XML 지원 방법을 잘 이해하여 사용하는 것도 하나의 방법이 될 수 있다. 데이터베이스 시스템이 지원하는 XML 지원 방법 중 XML 타입의 지원 기능과 XML과 테이블 맵핑 자동화 기능 등을 사용하여 데이터도 저장하고 XML 문서도 저장할 수 있다.
데이터베이스 시스템은 기본적인 VARCHAR, NUMBER 등의 타입 외에도 크기가 큰 데이터의 저장을 위해 LOB 등의 타입을 지원한다. LOB 필드는 수GB의 데이터를 저장할 수 있다. 일부 데이터베이스 시스템은 LOB 등에 저장된 데이터에 대해 형태소 분석 기능 등을 부여하여 ‘내용 검색’ 기능을 제공하기도 한다. 내용 검색의 기능을 통해 ‘컴퓨터라는 단어와 IT라는 단어를 같이 가진 책의 장을 찾고 그 장을 포함하는 책 이름과 해당 부분을 출력하라’와 같은 질의어가 지원된다.

XML 전용 저장장치를 이용하여 파싱된 형태로 저장하자
XML 전용 저장장치란 주로 객체지향 데이터베이스 시스템 벤더들이 XML을 저장하기 위해 개발한 상용 XML 저장 엔진을 말한다. 최근 데이터베이스 시스템 벤더들도 XML 타입을 지원하고 있다. 이 글에서는 XML 타입을 지원하며 XML 트리 형태의 구조를 저장하고 XML 트리 구조에 대한 검색이 가능한 시스템을 XML 전용 저장장치라 정의한다. XML 전용 저장장치의 주요 특색은 다음과 같다.

◆ Store XML as parsed : 말뜻을 풀어보면 XML을 파싱하여 그 결과인 DOM(Document Object Model) 구조를 트리형태 그대로 저장하고 XML 문서의 구조를 다른 변환 과정 없이 직접 접근하여 빠른 속도로 XML로 복원 및 변경이 가능하도록 한다. 일반적인 관계형 데이터베이스의 저장 방식과는 차이가 있으며 주로 객체지향 데이터베이스 시스템 혹은 객체-관계형 데이터베이스 시스템 기반으로 구축된다.
◆ XPath 혹은 XQL 기반의 질의 언어 제공 : 하나의 XML 문서는 DOM을 이용하여 그 내부 구조를 네비게이팅할 수 있겠지만 여러 개의 XML 문서에 대해 적합한 조건을 만족하는 XML 문서를 찾는다는 것은 DOM 네비게이션 방법으로는 불가능하다. XML 전용 저장장치는 XPath 혹은 XQuery 기반 혹은 이를 확장한 질의 언어를 제공한다. 이러한 질의 언어를 통해 트리 구조의 정보를 쉽고 빠르게 검색할 수 있다.
◆ XML 관련 표준 기술들을 지원한다 : XML 전용 저장장치는 앞의 두 가지 기술을 주요 기술로 제공하며 그 외에 XML 관련 표준들 또한 지원한다. 그러한 기술로는 XSL, XSLT, SAX, SOAP 등이 있다.

파일 시스템에 XML을 저장하는 방법
이제 파일 시스템에 XML을 저장하는 방법에 대해 예제를 중심으로 살펴보자. <그림 1>은 사원 및 부서 정보를 XML 파일들로부터 읽어 들이고 해당 정보를 메모리 상에 정보 모델(Information Model)로 맵핑한 후 일상적인 변경 및 검색 기능을 제공하는 파일 시스템 기반의 XML 저장 모델의 한 예를 도식화한 것이다.
<그림 1>의 XML 문서를 파일로부터 로딩하는 과정(<그림 1>의 즇단계), 정보 모델로부터 XML 파일로 다시 저장하는 과정(즊), 정보 모델에서 해당 데이터를 생성(즋), 데이터를 검색(즍), 데이터를 변경(즎)하는 방법을 바로 이어 각각 설명한다.

XML 문서를 로딩하는 방법
XML 문서를 읽어서 정보 모델로 변환하기 위해서는 XML 파서를 이용하여 파싱한 후 다양한 방법으로 구조를 파악하여 필요 정보를 생성해야 한다. 구조를 파악하는 방법으로는 크게 세 가지 방법이 있다.

짾 DOM API 사용
짿 SAX API 사용
쨁 XPath API 사용

여기서는 세 가지 방법 중에서 사용법이 가장 쉬운 XPath API를 이용하여 XML 문서를 로딩하는 방법을 소개한다. XPath API를 사용하기 위해서는 아파치 소스 그룹에서 제공하는 XSLT 처리 모듈인 Xalan(http://xml.apache.org/ xalan-j/index.html)을 사용한다.

XPath API의 사용에 필요한 클래스
프로그래밍 언어로는 자바를 사용하며 Xalan을 사용하기 위해 다음과 같이 XML 파싱과 XPath API 관련 클래스들을 임포트해야 한다.

// XPath API를 사용하기 위해 필요로 하는 클래스들
// JAXP packages
import javax.xml.parsers.*;
// DOM packages
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.w3c.dom.*;
// XPath API
import org.apache.xpath.XPathAPI;
// IO & Util API
import java.io.*;
import java.util.*;
XPath API의 사용 방법
<리스트 1>은 XPath API를 이용하여 XPath 표현을 입력받아 해당하는 정보를 인출하는 세 가지 방법을 나타낸 것이다. XPath 표현법에 대해서는 W3C의 XPath 부분(http://www.w3c.org/TR/xpath)을 참고하기 바란다. 다음은 <리스트 1>의 각 함수에 대한 설명이다.

◆ parse() : XML 정보를 가진 파일을 입력으로 받아 파싱하는 함수
◆ XPathSelectSingleNode() : 파싱된 이후의 DOM 구조의 특정 노드와 XPath를 입력으로 받아 XPath에 해당하는 하나의 노드만을 찾아서 그 값을 스트링으로 변환하여 리턴하는 함수
◆ XPathSelectNodeList() : DOM 구조의 특정 노드와 XPath를 입력으로 받아 XPath에 해당하는 모든 노드들의 리스트를 리턴하는 함수
◆ XPathSelectNodeListStr() : 앞의 세 번째의 노드 리스트의 값을 스트링 배열로 리턴하는 함수

XPath API를 이용하여 Employee.xml 파일로부터 정보를 생성하는 방법
다음은 사원 정보를 표현한 간단한 XML 문서이다.



1
Hong Kil Dong
SALESMAN
1
1990-10-01
1300

다음은 사원 정보 XML 문서에 대해 XPath를 적용하여 Employee 자바 객체를 생성하는 방법을 나타낸다. XML 내의 사원 정보의 각 구성 필드와 생성할 Employee 자바 클래스의 필드가 1:1로 맵핑되므로 XPathAPI.selectSingleNode() 함수를 이용한다.

public class Employee {
// members
public String EmpNo;
public String EName;
public String Job;
public String Mgr;
public String HireDate;
public String SAL;

// Employee 노드를 입력으로 받아 하위 자식 노드의 값을 XPath로 찾은 후
// Employee의 구성 멤버의 값을 초기화한다.
public Employee(Node node) throws Exception{
EmpNo=XPathAPI.selectSingleNode(node,”EmpNo/text()”).getNodeValue();
EName=XPathAPI.selectSingleNode(node,”EName/text()”).getNodeValue();
Job=XPathAPI.selectSingleNode(node,”Job/text()”).getNodeValue();
Mgr=XPathAPI.selectSingleNode(node,”Mgr/text()”).getNodeValue();
HireDate=XPathAPI.selectSingleNode(node,”HireDate/text()”).getNodeValue();
SAL=XPathAPI.selectSingleNode(node,”SAL/text()”).getNodeValue();
}

public static void main(String args[]) throws Exception {
Document document = XMLUtil.parse(new File(“Employee.xml”));
Node node = XPathAPI.selectSingleNode(document,”Employee”);
Employee emp = new Employee(node);
. . .
}
}

앞에서 보는 바와 같이 표현하고자 하는 XML 문서의 구조와 메모리 상의 정보 모델이 XPath의 API만을 이용하여 1:1로 맵핑되는 것을 확인할 수 있다. 다음은 좀더 복잡한 구조에서 XML 문서를 로딩하는 방법을 예를 들어 보자.

XPath API를 이용하여 Dept.xml로부터 로딩하는 방법
사원 XML 문서와 달리 Dept.xml은 하나의 부서에 대한 정보와 부서내의 각 사원들의 정보를 같이 표현하고 있다. <그림 2>는 Dept XML 문서 구조와 이를 변환하여 하나의 Dept 객체와 세 개의 Employee 객체로 변환한 결과를 나타낸다.
Dept XML의 구조를 보면 Employees라는 엘리먼트를 가지고 있으며 Employees 엘리먼트는 여러 개의 Employee 엘리먼트를 가진다. 이러한 구조를 자바 객체로 표현하기 위해 자바의 유틸리티 패키지의 Hashtable를 이용하면 여러 개의 데이터의 저장 및 검색에 용이하다. <리스트 3>은 Dept XML을 읽어서 Dept 객체를 생성하고 하위 Employee 객체를 여러 개 생성하여 Hashtable 형태로 저장하는 예를 나타낸다.

public class Dept {
// members
public String DeptNo;
public String DName;
public String Loc;

// employees
public Hashtable Employees=new Hashtable();

public Dept(Node node) throws Exception {
DeptNo =
XPathAPI.selectSingleNode(node,”Dept/DeptNo/text()”).getNodeValue();
DName=XPathAPI.selectSingleNode(node,”Dept/DName/text()”).getNodeValue();
Loc=XPathAPI.selectSingleNode(node,”Dept/Loc/text()”).getNodeValue();

// XML 문서 구조에서 모든 Employee 노드들을 XPath를 이용하여 검색한다.
NodeList nl=XPathAPI.selectNodeList(node,”Dept/Employees/Employee”);

// 검색된 Employee 노드 모두에 대해
// Employee 생성자를 호출하여 Employee 객체를 생성한 후
// Hashtable Employees에 저장한다.
for(int i=0;i Employee emp = new Employee(nl.item(i));
Employees.put(emp.EmpNo, emp);
}
}

public static void main(String args[])
throws Exception{
Document document = XMLUtil.parse(new File(“Dept.xml”));
Dept dept = new Dept(document);
}
}

더 복잡한 구조의 XML을 파일 시스템으로부터 로딩하는 방법
앞에서 XML 파일로부터 하나의 객체로 변환하는 방법과 여러 개의 객체로 변환하는 방법에 대해 살펴봤다. 더 복잡한 구조의 XML을 더 복잡한 정보 모델로 형성하는 방법 또한 앞 두 방법의 확장을 통해 가능하다. 단, 이러한 방법을 사용할 경우 XML로 표현되는 모든 데이터는 객체들의 관계로 맵핑되어 대부분이 메모리에 로딩되므로 데이터의 양을 고려해야 하며, 메모리에 로딩된 정보들은 개발 언어의 여러 가지 데이터 모델을 이용하여 관리되므로 개발 언어가 지원하는 데이터 모델의 성능과 기능이 애플리케이션에서 요구하는 바에 충분한지를 판단해야 한다.

정보 모델에서 XML 문서의 내용을 변경하거나 검색하는 방법
XML 문서를 파싱과 XPath 등을 이용하여 메모리 상의 정보 모델로 맵핑한 후에는 XML의 기술이 아닌 정보 모델에서 제공하는 여러 API를 이용하여 문서의 변경, 검색, 생성 등을 할 수 있다. <리스트 2>는 Dept XML 문서를 로딩한 후 이를 변경하거나 검색하는 방법 및 새로운 Dept 문서를 생성하기 위한 정보 모델을 만드는 API를 나타낸다. 정보 모델은 메모리에 존재하게 되므로 변경된 정보는 다시 XML로 저장돼야 한다.

. . .
public class Dept {
. . .
// 생성 : 프로그래밍 언어의 객체 생성 방법을 그대로 이용하여 Dept 객체를 생성
public Dept(String _DeptNo, String _DName,String _Loc, Hashtable _Employees){
this.DeptNo = _DeptNo;
this.DName = _DName;
this.Loc = _Loc;
this.Employees = _Employees;
}

// 변경 : 간단한 API로 데이터 변경
public void setDeptNo(String DeptNo) {this.DeptNo = DeptNo;}
public void setDName(String DName) { this.DName = DName; }
public void setLoc(String Loc) {this.Loc = Loc;}
public void setEmployees(Hashtable Employees) {
this.Employees = Employees;
}

// 검색 : Hashtable을 이용한 메모리 상의 빠른 검색
public Employee findEmployee(String EmpNo) {
Employee emp = (Employee)Employees.get(EmpNo);
return emp;
}
. . .
}

정보 모델에서 XML 파일을 저장하는 방법
정보 모델을 다시 XML로 저장하는 방법을 살펴보고자 한다. 크게 두 가지 방법으로 나눌 수 있다.

짾 String 연산(String Concatenation 연산)을 이용하여 XML 문서를 생성
짿 정보 모델이 제공하는 자기 서술적인 정보를 이용하여 XML 문서에 대해 자동 생성
쨁 기타 방법

앞의 두 방법을 나열할 때 혹 독자들은 ‘왜 DOM을 이용하여 XML 문서를 생성하지 않는가?’하고 의문을 가질 수 있다. 물론 내용이 없는 Empty DOM을 생성하여 정보 모델로부터 각 노드의 내용을 생성하고 완전한 DOM이 완성되면 다시 XML 내용을 가진 문자열 스트링으로 생성할 수 있다. 실 세계의 정보를 정보 모델로 구현할 경우 정보 모델은 나름대로 제약 조건을 가지며 데이터의 정합성을 보장 및 체크한다. 정보 모델에서 데이터의 제약 체크가 끝난 후 다시 DOM 객체를 만들어 파싱하는 과정은 시스템에 부하를 가중시키고 비효율적이다. 꼭 필요한 경우가 아니면 굳이 그러한 방법을 사용하지 말기를 바란다.

String 연산으로 XML 문서를 생성하기
가장 간단하면서 많이 사용되는 방법이 String 연산으로 XML 문서를 생성하는 방법이다. 단점으로는 각각의 객체에 대해 로직을 구현해야 한다는 것과 객체 종류가 많은 경우에는 단순 반복 작업을 많이 해야 한다는 점이다. <리스트 2>는 앞에서 설명한 Employee 객체와 Dept 객체로부터 Employee XML과 Dept XML을 생성하는 방법을 나타낸다.


자바 리플렉션 방법을 이용하여 XML 문서를 생성하기
자바의 리플렉션 관련된 패키지들은 클래스 정보의 구조 및 내용을 동적으로 파악하고 정보를 획득하기에 뛰어나다.
<리스트 3>은 java.lang.String 타입과 java.util.Has htable 타입으로 구성된 클래스의 객체에 대해 내부 구조를 파악하여 자동으로 XML 문서를 생성하는 함수를 보여준다. 이 함수를 확장하여 더 많은 데이터 타입을 지원하도록 할 수 있다. XML을 생성하는 방법은 다음과 같다.

짾 Class 타입인 경우 : Employee 클래스는 다음과 같이 변환된다.


짿 java.lang.String 타입인 경우 : String EName=“HongKilDong”과 같은 필드 정보는 다음과 같이 변환된다.

HongKilDong

쨁 java.util.Hashtable 타입의 경우 : Hashtable Employees의 경우는 다음과 같이 변환된다. Hashtable인 Employees 객체는 엘리먼트로 구성되고 Employee 객체들은 의 하위 자식 엘리먼트로 변환된다.



10




정보 모델의 자기 서술적인 기능을 이용하여 <리스트 3>과 같이 XML 데이터 변환 기능을 구현한 경우에 클래스의 수가 많고 복잡해도 유용하게 사용할 수 있다.

맺으면서
이번 호에서는 XML을 저장할 경우에 애플리케이션의 용도에 맞는 저장장치를 선택하는 방법에 대해 살펴봤다. 파일 시스템을 저장 매체로 사용하고 파일로부터 읽은 정보를 시스템 메모리로 로딩하여 쉽게 접근하고 변경한 후 다시 파일 시스템으로 저장하는 방법에 대해 주로 설명했다. 다음에는 데이터베이스 시스템에 XML을 저장하는 방법 및 유형들에 대해 설명할 것이다.
Comments