메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

XStream으로 자바 객체를 XML로 직렬화하기

XStream을 사용하여 객체 퍼시스턴스, 설정, 그리고 데이터 전송을 쉽게하기

Rajiv Bangalore, 선임 스태프 소프트웨어 엔지니어, IBM India Private Ltd.
Photo of Rajiv Bangalore
Rajiv Bangalore는 IBM 인도의 선임 스태프 소프트웨어 엔지니어다. 7년 여에 걸쳐 다양한 자바 플랫폼 엔터프라이즈 에디션(Java EE) 개발 프로젝트에 참여하고 있다(rajiv.bangalore@in.ibm.com).

요약:  XML 직렬화는 객체 퍼시스턴스와 데이터 전송을 포함한 무수히 많은 쓰임새가 있습니다. 그러나 일부 XML 직렬화 기술은 구현하기 어렵습니다. XStream은 자바 객체를 XML로 직렬화하거나 그 반대로 역직렬화할 수 있는 가볍고 사용하기 쉬운 오픈 소스 자바(Java™) 라이브러리입니다. XStream을 설정하고, 이를 이용해 객체를 직렬화하고 역직렬화하는 방법을 배웁니다. 또한 설정 속성들을 XML 설정 파일에서 읽어오는 방법도 알아봅니다.

원문 게재일:  2008 년 5 월 20 일
난이도:  중급 영어로:  보기
페이지뷰:  3799 회
의견:  


XStream을 사용하면, 대부분의 자바 객체를 아무런 매핑없이 직렬화할 수 있다. 객체 이름은 요소 이름이 되고, 클래스 내의 문자열들이 XML 요소의 내용을 구성한다. XStream으로 직렬화할 클래스는 Serializable 인퍼페이스를 구현할 필요도 없다. XStream은 직렬화 도구일 뿐, 데이터 바인딩 도구가 아니므로 XML이나 XML 스키마 정의(XML Schema Definition: XSD)로부터 클래스를 생성하지 않는다.

XStream은 다른 직렬화 도구와 구별되는 세 가지 특징이 있다.

  1. XStream은 클래스에서 직렬화/역직렬화될 필드들의 가시성을 고려하지 않는다.
  2. 클래스에서 직렬화/역직렬화될 필드들을 위한 getter나 setter 메서드가 필요없다.
  3. 직렬화/역직렬화될 클래스는 기본 생성자가 필요없다.

어떤 서드파티 클래스라도 아무런 변경없이 XStream을 사용해 직렬화하고 역직렬화할 수 있다.

개발 환경 설정하기

다음에 나오는 절차에 따라 XStream를 다운로드하고 설치하자(참고자료).

  1. 이클립스 웹 사이트에서 이클립스를 다운로드해 원하는 폴더에 설치하자. 해당 디렉터리를 이 기사에서는 eclipse_home으로 표기하겠다. 이 기사는 이클립스 3.3 버전을 기준으로 설명한다.
  2. XStream 웹 사이트에서 XStream의 최신 안정 버전을 다운로드해 원하는 폴더에 설치하자. 해당 디렉터리를 이 기사에서는 xstream_home으로 표기하겠다. 이 기사는 XStream 1.2.2 버전을 기준으로 설명한다.
  3. 3썬 웹 사이트에서 자바 플랫폼 스탠다드 에디션(Java Platform, Standard Edition: J2SE) 소프트웨어 개발 킷(software development kit: SDK)을 다운로드해 원하는 폴더에 설치하자. 해당 디렉터리를 이 기사에서는 java_home으로 표기하겠다. 이 기사는 1.5.0_05 버전을 기준으로 설명한다.

자바 프로젝트 만들기

File > New > Project를 선택하고, 다음 절차에 따라 자바 프로젝트를 생성하자.

  1. Java > Java Project > Next를 선택한다(그림 1).

    그림 1. 새 자바 프로젝트 시작하기
    새 자바 프로젝트 시작하기

  2. 프로젝트 이름을 입력하고 Next를 클릭한다(그림 2).

    그림 2. 프로젝트 이름 채우기
    프로젝트 이름 채우기

  3. Finish를 클릭하여 작업을 마무리한다(그림 3).

    그림 3. 설정 마무리하기
    설정 마무리하기

그림 4는 이렇게 해서 만들어진 자바 프로젝트를 보여준다.


그림 4. 새로 만들어진 자바 프로젝트
새로 만들어진 자바 프로젝트

XStream 지원 추가하기

아래 절차에 따라 방금 만든 프로젝트에 XStream 라이브러리를 추가하자.

  1. 이클립스의 Project Explorer에서 해당 프로젝트를 선택한 다음, Project 메뉴에서 Properties를 선택한다(그림 5).

    그림 5. XStream 라이브러리 추가하기
    XStream 라이브러리 추가하기

  2. Add External JARs를 클릭하고, xstream_home/lib 폴더에서 xstream-1.2.2.jar를 선택한다.
  3. OK를 클릭해 작업을 마무리한다(그림 6).

    그림 6. XStream 지원 마무리하기
    XStream 지원 마무리하기

그림 7은 XStream 지원이 추가된 프로젝트를 보여준다.


그림 7. 추가된 라이브러리들
추가된 라이브러리들

객체 직렬화하기

다음의 간단한 예제는 WriterReader 클래스를 통해 XStream을 사용해 객체를 직렬화하고/역직렬화하는 방법을 보여준다. Writer 클래스는 Employee 타입의 객체를 XML로 직렬화해 파일로 저장하기 위해 XStream API를 사용한다(Listing 1).


Listing 1. Writer.java
                
package com.samples;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.thoughtworks.xstream.*;

public class Writer {

    public static void main(String[] args) {
        Employee e = new Employee();

		//setter 메서드를 사용해 속성을 설정한다.
        //주의: 이 작업은 생성자에서도 할 수 있지만
        //XStream이 생성자 없이도 직렬화를 수행할 수 있음을 보여주기 위해
        //일부러 이렇게 했다.
		
        e.setName("Jack");
        e.setDesignation("Manager");
        e.setDepartment("Finance");

        //객체를 직렬화한다.
        XStream xs = new XStream();

        //파일을 파일시스템에 기록한다.
        try {
            FileOutputStream fs = new FileOutputStream("c:/temp/employeedata.txt");
            xs.toXML(e, fs);
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
    }
}

Reader 클래스는 이 파일을 읽어 XML을 역직렬화하고, 데이터로부터 자바 객체를 만들어 낸다(Listing 2).


Listing 2. Reader.java
                
package com.samples;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class Reader {

    public static void main(String[] args) {
        XStream xs = new XStream(new DomDriver());
        Employee e = new Employee();

        try {
            FileInputStream fis = new FileInputStream("c:/temp/employeedata.txt");
            xs.fromXML(fis, e);

            //방금 읽어들인 객체의 데이터를 출력한다
            System.out.println(e.toString());

        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }

    }
}

Listing 3Employee 객체의 구조를 보여준다.


Listing 3. Employee.java
                

package com.samples;

public class Employee {
    private String name;
    private String designation;
    private String department;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDesignation() {
        return designation;
    }
    public void setDesignation(String designation) {
        this.designation = designation;
    }
    public String getDepartment() {
        return department;
    }
    public void setDepartment(String department) {
        this.department = department;
    }
    @Override
    public String toString() {
        return "Name : "+this.name+
        "\nDesignation : "+this.designation+
        "\nDepartment : "+this.department;
    }
}


설정 파일 읽기

복잡한 XML 파일 읽기

이 설정 예제는 단순한 XML 파일을 읽는 예를 보여준다. 복잡한 XML 파일을 읽으려면 커스텀 변환기(converter)가 필요할 것이다. 변환기 작성 튜토리얼을 XStream "변환기 튜토리얼" 사이트에서 볼 수 있다(참고자료).

대부분의 응용 프로그램은 다수의 설정 값(properties)에 의존한다. 이 설정 값은 연결할 데이터 소스의 이름일 수도 있고, 로그 파일의 위치일 수도 있다. 설정 파일은 응용 프로그램을 다시 컴파일하지 않고도 설정 값을 변경할 수 있도록 해주고, 유지보수도 쉬워지므로 이러한 데이터를 저장하기에 가장 적합한 곳이다. 이 예제 시나리오는 XStream을 사용하여 응용 프로그램에서 XML 설정 파일로부터 설정 값을 읽는 방법을 보여준다.

전형적인 XML 데이터 바인딩은 XML 파일로부터 자바 객체를 생성(generate)해야 하지만, XStream을 사용하면 객체 생성 단계가 필요없다. 자바 클래스를 만들고 클래스의 필드를 읽고 싶은 XML의 요소에 매핑하면 된다. 이 예제는 Listing 4와 같은 설정 파일이 있다고 가정한다.


Listing 4. Config.xml
                
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <datasource-name>IRIS</datasource-name>
    <ipaddress>9.124.74.85</ipaddress>
    <logfilename>DailyLogApplication.log</logfilename>
    <appender>console</appender>
</config>

Listing 5는 설정 파일을 읽어 설정 값을 자바 객체로 불러오는 ConfigReader 클래스의 소스를 보여준다.


Listing 5. ConfigReader.java
                
package com.samples;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class ConfigReader {

    String datasourcename = null;
    String ipaddress = null;
    String logfilename = null;
    String appender = null;

    @Override
    public String toString() {
        //이 메서드는 멤버 변수의 값을 출력한다.
        return "Datasource Name : "+datasourcename+
            " \nIP Address : "+ipaddress+
            " \nLogfilename : "+logfilename+
            " \nAppender : "+appender;
    }

    /**
     * @param args
     * @throws FileNotFoundException 
     */
    public static void main(String[] args) throws FileNotFoundException {
        XStream xs = new XStream(new DomDriver());

        FileInputStream fis = new FileInputStream("c:/temp/Config.xml");
        xs.aliasField("datasource-name", ConfigReader.class, "datasourcename");
        xs.alias("config", ConfigReader.class);
        ConfigReader r = (ConfigReader)xs.fromXML(fis);

        System.out.println(r.toString());
    }
}


요약

몇 가지 간단한 절차만 거치면 XStream을 설치하고 응용 프로그램을 개발할 수 있다. 이 기사를 통해 XStream을 사용하여 자바 객체를 직렬화하고, 역직렬화하고, 설정 파일을 읽는 방법을 배웠으니 XStream 사이트에서 앨리어스(alias), 어노테이션(annotation), 변환기(converter)에 대해 더 자세히 배울 수 있다(참고자료). 앨리어스와 변환기를 사용하면 생성되는 XML을 완전히 제어할 수 있다.



다운로드 하십시오

설명이름크기다운로드 방식
이 기사의 자바 소스 코드x-xstreamcode.zip3KBHTTP

다운로드 방식에 대한 정보


참고자료

교육

  • 2분 튜토리얼: XStream에 대한 매우 신속한 소개로 시작할 수 있는 좋은 곳이다. 대충 훑어보는 것만으로도 객체와 자바간의 변환이 얼마나 간단한지 알게 될 것이다.

  • XStream의 출력 결과 미세 조정하기 페이지: XStream의 출력 결과를 미세 조정하는 데 필요한 추가 정보를 찾을 수 있다.

  • 변환기 튜토리얼: 고급 사용자라면, 읽거나 생성되는 XML에 대해 완전히 제어할 수 있다.

  • Practical data binding: Get your feet wet in the real world(Brett McLaughlin, developerWorks, 2004년 5월): 데이터 바인딩에 대해 더 자세히 알아보자.

  • XML and Java technologies: Data binding, Part 1: Code generation approaches -- JAXB and more(Dennis Sosnoski, developerWorks, 2003년 1월): XML 데이터 바인딩에 대한 몇 가지 추가적인 접근 방법도 알아보자.

  • XML 입문 페이지: XML을 위한 최신 참고 자료를 XML 존에서 볼 수 있다.

  • IBM XML 인증: XML과 관련 기술에 대한 IBM 인증 개발자가 되는 방법을 찾을 수 있다.

  • XML 기술 문서: developerWorks XML 존에서 팁, 튜토리얼, 표준, IBM Redbook을 포함한 다양한 기술 문서를 볼 수 있다.

  • XML 기술 문서: developerWorks XML 존에서 팁, 튜토리얼, 표준, IBM Redbook을 포함한 다양한 기술 문서를 볼 수 있다.

  • 기술 서점: 이 주제 또는 다른 기술적인 주제에 대한 책들을 찾아보자.

  • 포드캐스트: 방송을 들으면서 IBM 기술 전문가들을 따라잡아 보자.

제품 및 기술 얻기

  • 이클립스: 이클립스 웹 사이트에서 이클립스트를 다운로드하고 설치해 보자.

  • XStream 다운로드: XStream 웹 사이트에서 라이브러리를 다운로드해 객체와 XML간에 직렬화하는 데 사용해 보자.

  • IBM 시험판 소프트웨어: 한국 developerWorks를 통해 직접 다운로드할 수 있는 시험판 소프트웨어로 차세대 개발 프로젝트를 구축해보자.

토론

필자소개

Photo of Rajiv Bangalore

Rajiv Bangalore는 IBM 인도의 선임 스태프 소프트웨어 엔지니어다. 7년 여에 걸쳐 다양한 자바 플랫폼 엔터프라이즈 에디션(Java EE) 개발 프로젝트에 참여하고 있다(rajiv.bangalore@in.ibm.com).

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=XML, 자바, 오픈 소스
ArticleID=309095
ArticleTitle=XStream으로 자바 객체를 XML로 직렬화하기
publish-date=05202008
author1-email=rajiv.bangalore@in.ibm.com
author1-email-cc=dwxed@us.ibm.com

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.