자바 클래스(객체)를 XML로 표현하는 방법
1. JAXB (+spring oxm)
2. simpleFramework
JAXB(Java Architecture for XML Binding)
기능
- 직렬화 (자바객체 -> XML)
- 역직렬화 (XML -> 자바객체)
Spring oxm(Object/XML Mapper)
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 변환)
Simple Framework
Simple은 자바에 XML 직렬화 및 설정을 제공하는 고성능 프레임워크이다.
XML을 이용한 개발을 빠르게 해준다.
참고
2017.11.01 - [IT&프로그래밍/Java] - Java | 객체(Object) ↔ XML (simple 프레임워크를 이용한 xml 변환)
용어 설명(마샬링 vs 직렬화)
마샬링(Marshaling)
객체의 메모리 구조를 저장이나 전송을 위해서 적당한 자료형태로 변형하는 것을 의미한다.
Marshalling 은 보통 서로 다른 컴퓨터 혹은 서로 다른 프로그램 간에 데이터가 이동되어야 할 경우 사용된다.
그래서 서로 다른 언어간의 데이터 전송은 직렬화라고 하지 않고 마샬링이라고 한다.
XML, JSON 형태로 바꾸는 것도 마샬링으로 볼 수 있다.
직렬화(Serialization)
객체의 상태를 저장하거나 전송하기 위해서 객체를 byte stream 형식(연속적인 데이터)으로 변환하는 것을 의미한다.
마샬링과 직렬화의 차이 그러나 자바에서는 다르다. 마샬링은 추가적인 메타 데이터(코드 베이스)를 가질 수 있다는 점에서 직렬화와 구분된다.
직렬화는 객체와 관계된 메소드를 포함하지 않고, 오브젝트에 있는 멤버 데이터만(코드 없이) 바이트 스트림에 써진다. 마샬링에서는 오브젝트에 있는 멤버데이터 + 코드베이스가 전해진다. 따라서 직렬화는 마샬링의 일부라고 할 수 있다.
다른 관점에서 보면 직렬화는 객체 자체를 복사하는 개념이고, 마샬링은 코드베이스를 가져와 새로 만드는 개념이다. 그래서 객체를 이용하지 않는 다른 언어 또는 플랫폼간의 통신시 마샬링을 주로 사용한다. 그리고 네트워크나 객체 싱크에는 직렬화를 주로 사용한다.
※ 코드베이스 - 코드가 어디있는가에 대한 베이스 위치를 지정하기 위한 기록을 말한다. - CLASSID 에 해당하는 객체가 존재하지 않을 경우에 해당 위치에서 객체를 찾아준다. |
'개발_웹 > Java' 카테고리의 다른 글
Java | 객체(Object) ↔ XML (simple 프레임워크를 이용한 xml 변환) (0) | 2017.11.01 |
---|---|
Java | 객체(Object) ↔ XML (spring oxm, jaxb를 이용한 xml 변환) (0) | 2017.10.31 |
Java | split() - 문자열 나누기 (0) | 2017.09.04 |
Java | 태그가 적용되지 않고, 화면에 그대로 노출될 경우 (JSTL, escapeXml) (0) | 2017.09.03 |
Java | 자바로 경고창(Alert) 띄우기 (0) | 2017.09.02 |