개발_웹/Java

Java | 객체(Object) ↔ XML (JAXB, Simple Framework)

zuyo 2017. 10. 31. 13:43
반응형

자바 클래스(객체)를 XML로 표현하는 방법

1. JAXB (+spring oxm)

2. simpleFramework


JAXB(Java Architecture for XML Binding)

 

기능

- 직렬화 (자바객체 -> XML)

- 역직렬화 (XML -> 자바객체)

 

Spring oxm(Object/XML Mapper)

Object/XML 매핑이란 XML 문서를 객체로 변환하거나 객체를 XML로 변환하는 행위를 말한다.

 

O/X 매핑분야에서는 marshaller가 객체(그래프)를 XML로 직렬화하는 책임을 진다. 

유사한 방법으로 unmarshaller가 XML을 객체 그래프로 역직렬화한다.

 

O/X 매핑이 필요한 곳에 스프링을 사용하는 이점이 몇가지 있다.

 

쉬운 설정

스프링의 빈 팩토리는 JAXB 컨텍스트, JiBX 바인딩 팩토리 등을 생성할 필요없이 다른 빈들처럼 동일하게 마살러를 설정할 수 있게 한다. 

또한 'oxm' 네임스페이스를 제공하여 JAXB2, XmlBeans, JiBX 등을 사용한 Marshaller를 손쉽게 정의할 수 있게 해준다.

 

일관된 인터페이스

Marshaller/Unmarshaller라는 두가지 인터페이스로 동작하기 때문에 OX Mapping Framework를 설정만으로 쉽게 변경할 수 있다. 또한 OX Mapping Framework을 섞어서(mix and match) 사용할 수도 있다.

이러한 추상화를 통해서 마샬링을 하는 클래스를 약간만 변경하거나 전혀 변경하지 않고 상대적으로 쉽게 O/X 매핑 프레임워크를 바꿀 수 있다. 

이 접근은 비침투적인 방법으로 각 기술의 장점을 이용해서 믹스앤매치(mix-and-match) 접근으로 XML 마샬링을 할 수 있게 하는 부가적인 이점이 있다.

 

일관된 예외 계층

Mapping(Serialization)하다 발생한 Exception 처리를 위해서 XmlMappingException이라는 Root Exception을 제공한다.

 

참고

2017.10.31 - [IT&프로그래밍/Java] - Java | 객체(Object) ↔ XML (spring oxm, jaxb를 이용한 xml 변환)

 

Java | 객체(Object) ↔ XML (spring oxm, jaxb를 이용한 xml 변환)

Spring oxm과 JAXB를 이용한 객체 ↔ XML 변환 1. porm.xml (Maven dependency 추가) 1) spring oxm - 'spring xml' 검색 - 'Spring Object/XML Marshalling' 선택 - 4.3.4 버전 2) jaxb - jaxb 검색 - Java..

zuyo.tistory.com


 

Simple Framework

 

Simple은 자바에 XML 직렬화 및 설정을 제공하는 고성능 프레임워크이다.

XML을 이용한 개발을 빠르게 해준다.

 

참고

2017.11.01 - [IT&프로그래밍/Java] - Java | 객체(Object) ↔ XML (simple 프레임워크를 이용한 xml 변환)

 

Java | 객체(Object) ↔ XML (simple 프레임워크를 이용한 xml 변환)

Simple XML 직렬화처리 및 설정을 해주는 고성능 프레임워크 (http://simple.sourceforge.net/home.php) 1. porm.xml - simple framework 디펜던시 추가 org.simpleframework simple-xml 2.7.1 2. 디스패처 서블릿..

zuyo.tistory.com


용어 설명(마샬링 vs 직렬화)

 

마샬링(Marshaling)

 

객체의 메모리 구조를 저장이나 전송을 위해서 적당한 자료형태로 변형하는 것을 의미한다.

Marshalling 은 보통 서로 다른 컴퓨터 혹은 서로 다른 프로그램 간에 데이터가 이동되어야 할 경우 사용된다.

그래서 서로 다른 언어간의 데이터 전송은 직렬화라고 하지 않고 마샬링이라고 한다.

XML, JSON 형태로 바꾸는 것도 마샬링으로 볼 수 있다.

 

직렬화(Serialization)

 

객체의 상태를 저장하거나 전송하기 위해서 객체를 byte stream 형식(연속적인 데이터)으로 변환하는 것을 의미한다.

 

마샬링과 직렬화의 차이

파이썬 표준라이브러리에서는 직렬화와 마샬링을 동일하게 간주한다.

그러나 자바에서는 다르다. 마샬링은 추가적인 메타 데이터(코드 베이스)를 가질 수 있다는 점에서 직렬화와 구분된다.

 

직렬화는 객체와 관계된 메소드를 포함하지 않고, 오브젝트에 있는 멤버 데이터만(코드 없이) 바이트 스트림에 써진다.

마샬링에서는 오브젝트에 있는 멤버데이터 + 코드베이스가 전해진다.

따라서 직렬화는 마샬링의 일부라고 할 수 있다.

 

다른 관점에서 보면 직렬화는 객체 자체를 복사하는 개념이고, 마샬링은 코드베이스를 가져와 새로 만드는 개념이다.

그래서 객체를 이용하지 않는 다른 언어 또는 플랫폼간의 통신시 마샬링을 주로 사용한다. 

그리고 네트워크나 객체 싱크에는 직렬화를 주로 사용한다.

 

※ 코드베이스

- 코드가 어디있는가에 대한 베이스 위치를 지정하기 위한 기록을 말한다.

- CLASSID 에 해당하는 객체가 존재하지 않을 경우에 해당 위치에서 객체를 찾아준다.

 

반응형