메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

데이터 바인딩이 중요한 이유

한빛미디어

|

2002-10-18

|

by HANBIT

12,012

저자: 『Java & XML Data Binding』의 저자 브랫 맥래프린(Brett McLaughlin), 역 김대곤

"XML를 이용하여 작업하려면 새로운 API부터 배우라구요? 숨 좀 쉽시다." 이 기사을 접하는 순간, 대부분의 독자들의 머리 속에 드는 생각일 것이다. 그렇지만 유감스럽게도 바로 이것이 필자의 의도이다. 본 기사에서 필자는 실제적인 예제를 통해 쉽고, 명확하게 그 이유를 제시할 것이다. 자, 그럼 지금부터 시작해보자.

데이터 바인딩은 XML작업을 위한 API다. 본 기사에서는 자바로 구현된 API를 중점적으로 다루게 될 것이다. 이러한 방향은 필자가 최근 집필한 『Java & XML Data Binding』과 맥을 같이 한다. 필자의 책은 데이터 바인딩 사용방법만을 다루고 있다. 즉, 왜 사용해야 하는가에 대한 내용은 없기 때문에 본 기사를 통해 그 이유를 제시하고자 한다. 그리고 더 구체적으로 어떤 종류의 문제를 해결하는데 데이터 바인딩이 도움이 되는지도 설명할 것이다.

한마디로 말해 데이터 바인딩은 XML과 자바 객체 사이의 연결기능을 제공한다. 이것은 SAX, DOM, JDOM, dom4j, JAXP와 같이 이미 수많은 API가 존재하는 자바와 XML 작업 환경에서 전혀 새로운 기능이 아니다. 그러나 데이터 바인딩은 위에서 열거된 다른 API와는 다른 XML문서(Document)중심의 접근법을 사용하지 않는다. XML문서 중심의 접근법은 XML 구조의 규칙을 따라야만 작업이 가능하다. 즉, XML의 요소(Element), 속성(Attribute), 엔티티 레퍼런스(Entity Reference) 이름을 이용하여 정보를 교환한다.

데이터 바인딩은 XML 중심이 아니라 비즈니스 중심으로 작업하고 싶어하는 사람을 대상으로 한다. 즉, XML문서의 구성요소(Element, Attribute)에 대해 이해하지 못한다고 하더라도 비즈니스에서 사용하는 사람, 이름, 주소, 전화번호로 작업할 수 있게 한다. 데이터 바인딩은 XML의 구조나 원리가 아닌, XML문서에 들어 있는 자료를 사용하고자 하는 사람들을 대상으로 하고 있다. 이런 이유로 데이터 바인딩은 XML구조가 아닌 XML 자료와 비즈니스 중심의 자바 객체 사이의 연결을 제공한다. 비즈니스 중심의 객체는 사용자가 정의한 내용(예를 들면 Person 클래스, Address 클래스, city 필드)으로 만들어진다. 데이터 바인딩은 setContent(String elementContent), getAttribute()와 같은 메소드가 아닌, setState(String state) , getAddress()와 같은 비즈니스 형태의 메소드를 가능하게 한다. 이러한 접근방법의 차이점과 장점은 명확하다.

지금까지 데이터 바인딩을 사용해야 하는 이유에 대하여 살펴보았다. 이제 비즈니스 중심의 접근방식이 어떻게 사용될 수 있는지를 보여주는 몇 가지 예제를 보여줄 것이다. XML의 문서 구조 변경을 위해서는 SAX, DOM과 같은 저수준(lower-level) API를 사용해야겠지만, 문서의 구조가 변하지 않는 비즈니스 중심의 XML 작업을 위해서는 데이터 바인딩이 해결책이 될 것이다. 현재 사용하고 있는 작업 중에 아래에 나열된 유형이 있는지 살펴보자.

1. 설정 파일

설정파일에서 데이터를 읽어오기 위한 프로그램을 작성해야 할 때가 있다. 설정파일 형태는 대부분 XML로 바뀌고 있기 때문에 XML로 된 설정파일에서 실제 데이터를 가져오기 위해 SAX 핸들러 또는 DOM를 사용해야 한다. 그러나 이러한 저수준(lower-leve) API를 사용할 경우 시간이 많이 소요된다.

특히, 설정파일의 형식은 거의 변하지 않으므로 낡은 방식에 머물지 말고, 데이터 바인딩의 사용해 보자. 아래와 같은 설정파일이 있다고 가정하자.


  middleearth.com
  
    
      /www
    
    
      /admin
    
    
  

이 파일을 파싱하고, 조작하고, DOM의 화이트스페이스에 대하여 신경을 쓰자. 데이터와 관련없는 어려운 작업들을 수행하는 대신, 다음과 같은 간단한 코드를 상상해보라.
// Convert XML to Java
ServerConfig serverConfig = ServerConfig.unmarshal(new File("config.xml"));
많은 라인으로 된 프로그램을 예상했을지 모르지만, 이 한 줄로 XML파일에서 자바 객체로의 데이터 변환은 끝났다. 이제 다음과 같은 작업을 수행할 수 있다.
System.out.println("Hostname: " + serverConfig.getHostname());
TelnetService telnetService = serverConfig.getServices().get("telnet");
telnetService.setPort(2010);

Java & XML Data Binding

참고 도서

Java & XML Data Binding
Brett McLaughlin




2. GUI 편집기

GUI 편집기의 이벤트와 저장 매체의 데이터를 연결하는 작업은 가장 흔히 발생하는 작업 중에 하나이다. 설정파일에서도 보았듯이, 데이터를 저장하기 위해 XML문서를 사용하는 일이 많아지고 있다. 그러나 진짜 문제는 화면상에 나타나는(사용자가 입력한) 것과 디스크 상에 저장되어 있는 자료와의 동기화를 위해 매커니즘을 구현하는 것이다.

실제로 keypress 이벤트가 발생할 때마다 변경사항을 저장하는 SAX이나 DOM코드를 작성하는 것은 거의 고통에 가깝다. 또한 메모리에 DOM 트리를 전부 가지고 있는 것도 메모리의 낭비가 많다. 이런 작업을 수행함에 있어, 데이터 바인딩은 해결책이 될 수 있다.
// method to update the current buffer
public void onKeyPress(char key) {
    // Update the buffer object
    currentPane.getBuffer().append(key);
}

// Method to write current changes to disk on a save request
public void onSave() {
    // Use data binding to convert back to XML
    currentPane.marshal(someFile);
}
첫 메소드의 currentPane 객체는 디스크 상의 XML 포맷을 나타내고 있다. 데이터 바인딩을 사용했기 때문에 XML 포맷을 가진 구조가 아니라 실데이터 중심의 객체이다. 즉, XML 필드에 대칭되는 디스플레이 속성, 사용자의 작업 히스토리가 될 수 있다. OnKeyPress 메소드를 통해 버퍼에 저장된 메모리상의 자료가 수정된다.

OnSave() 메소드에서는 currentPane 객체가 디스크 상에 저장된다. 모든 옵션, 버퍼, 그리고 기타 데이터가 변경된다. 그러나 작업 수행을 위해 어떠한 XML관련 지식을 필요로 하지 않는다. 또한 비즈니스와 상관없는 XML 체계 및 관계에 연관된 내용으로 메모리를 낭비하지 않는다.

3. XML를 이용한 저장

이제까지는 아주 일반적인 데이터를 XML파일에 저장하는 면에서는 유사한 두 가지 경우에 대해 살펴보았다. 물론 여기서 다루는 XML를 이용한 저장은 위의 두 경우에 모두 적용되지만 XML은 flat 파일뿐 아니라 XML 데이터베이스 및 XML 형태로 입력 가능한 디렉토리 서버에 데이터를 저장할 때도 사용된다. XML를 이용하여 데이터를 저장하고자 할 때에는 애플리케이션 데이터를 수집하여 적합한 포맷으로 변환하는 코드를 작성해야 한다. 데이터 바인딩은 데이터를 XML 형태로 변환해야 하는 모든 경우에 사용될 수 있다. 우리는 이미 marshal() 메소드만 호출함으로써 자바 객체에서 XML로의 변환이 가능하다는 사실을 살펴보았다.

필자는 『Java & XML Data Binding』에서 데이터 바인딩 도구에 의해 만들어진 하나의 객체 뿐 아니라 어떠한 객체도 XML로 변환할 수 있는 프레임워크를 제시하였다. 임의의 객체를 XML로 변환할 때는 외부 마샬러(marsheller)를 사용한다.
Marshaller.marshal(myCustomObject, someFile);
Marshaller.marshal(anotherObject, myOutputStream);
몇 주나 소요되는 개발을 비롯하여 디버깅, 튜닝 작업을 필요로 하는 변환작업(자바 객체를 XML로)을 손쉽게 하려면 반드시 데이터 바인딩이 필요하다.

4. 데이터 모델링

데이터 모델링은 잘 알려지지 않았지만 애플리케이션 데이터를 시각적으로 표현하는 탁월한 방법이다. XML문서를 시각적으로 표현하는 방법 중 두 가지가 한때 널리 유행었다. 하나는 XSLT를 이용한 간단한 방법이고, 다른 하나는 XML과 PDF파일 간의 호환을 지원하는 FO(Formatting Object)이다. 그러나 데이터 바인딩 이전까지는 비즈니스 데이터를 XML로 간단하고 쉽게 변환하는 명확한 방법은 존재하지 않았다.

종합해 보면, 데이터 바인딩을 사용하여 비즈니스 또는 애플리케이션 데이터를 XML형태로 변환하고, XML형태를 XSLT 또는 FO(Formatting Object)를 이용하여 시각적인 표현이나 PDF와 같은 이진파일로 변경할 수 있다. 이것은 이전까지는 수 주일이 걸리던 자바 객체를 시각적으로 표현하거나 파일형태로 배포하는 작업이 몇 시간 안에 수행될 수 있다는 것을 의미한다.

5. 데이터 송수신

데이터 송수신은 데이터의 관리와 책임을 여러 파트로 나누어야 하는 대규모 팀에서 발생한다. 예를 들어 XML형태의 자료에서 데이터를 수집하여 다른 파트에서도 바로 사용할 수 있는 형태로 자료를 배포하는 것은 흔한 일이다. 이러한 작업은 전통적으로 SAX이나 DOM를 사용하여 데이터를 읽어오고, 다른 파트에서 사용가능 하도록 변환하거나 포장하여 자바와 XML의 API에 대한 지식 없이도 참조할 수 있도록 비즈니스 형태의 자바 객체을 만드는 일이다. 이러한 작업은 데이터 바인딩이 수행할 수 있는 일 중에 하나이다.

이제 SAX, DOM, 변환 코드를 사용할 필요가 없어졌기 때문에 비즈니스와 직접적으로 관련된 작업에 더욱 시간을 투자할 수 있다. 마샬링(Marshalling, XML로의 변환)과 언마샬링(Unmarshalling, XML로부터 데이터를 읽어오는 것)을 통해 XML 데이터를 실제 비즈니스가 이루어지는 형태로 작업하는 일이 상당히 쉬워졌다.

지금까지 몇 가지 간단한 유형을 다루었지만, 필자의 많은 경험을 통해 대부분의 개발자들은 위에서 제시된 유형 중 하나 또는 그 이상과 관련이 있다는 사실을 알게 되었다. 이러한 유형의 작업들은 자주 반복되어 나타나며, 데이터 바인딩은 과거에 제시되었던 어떠한 API보다 이런 작업들을 쉽고 간단하게 만들어 주었다. 저수준(lower-level)의 API를 사용하는 대신 단 몇 줄의 데이터 바인딩 코딩만으로 이러한 작업이 이루어질 수 있기 때문이다.

만약 여러분이 이러한 작업을 해야 하는 위치에 있다면 『Java & XML Data Binding』이 분명 도움이 될 것이다. 이 책에는 데이터 바인딩을 사용하여 이러한 작업들을 수행하는 네 가지 다른 유형의 구현방법에 대한 세부적인 내용도 포함되어 있다.
브랫 맥래프린(Brett McLaughlin)은 오랫동안 컴퓨터 분야에 종사해 왔으며, 현재는 자바 및 자바 관련 기술을 사용한 애플리케이션 인프라 구축 전문가이다. 또한 『Building Java Enterprise Application』의 저자이기도 하다.
TAG :
댓글 입력
자료실

최근 본 상품0