마샬링과 직렬화
자바 궁금증
Intro
마샬링(Marshalling)
마샬링이란
마셜링은 직렬화(serialization) 와 유사하며 한 오브젝트(여기서는 직렬화 된 오브젝트)로 멀리 떨어진 오브젝트와 통신하기 위해 사용된다.
복잡한 통신을 단순화 하기 위해, 기본 요소(primitives) 대신 통신을 위한 맞춤형 오브젝트를 사용한다.
마셜링의 반대 개념으로 언마셜링(unmarshalling) 이 있다.
(디마셜링:demarshalling 이라고도 불리며, 역직렬화:deserialization와 유사하다)
직렬화와의 비교
오브젝트를 "마셜링한다"는 것은 그것의 상태와 코드베이스를 기록하는 것을 의미한다.
마셜링된 오브젝트가 "언마셜링" 될 때, 오브젝트의 클래스를 자동적으로 로딩함으로써 원본 오브젝트의 사본을 얻는 방식으로 기록되는 방식이다.
직렬화 될 수 있거나 원격의 어떤 오브젝트라도 마셜링할 수 있다.
마셜링은 코드베이스를 기록한다는 점을 제외하면 직렬화와 유사하다.
마셜링이 직렬화와 다른 점은 원격 오브젝트(remote object)를 특별하게 다룬다는 점이다.
정리
오브젝트를 "직렬화한다"는 것은 오브젝트의 상태를 오브젝트의 사본으로 다시 변환할 수 있는 바이트 스트림으로 변환하는 것을 의미한다.
직렬화(Serialization)
자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 시스템에서 사용할 수 있도록 바이트 형태로 변환하는 기술을 뜻한다.
자바 직렬화의 장점
자바 시스템에서 개발에 최적화 되어 있다.
복잡한 데이터 구조의 클래스의 객체라도 직렬화 조건만 지키면 큰 작업 없이 바로 직렬화가 가능하다.
데이터 타입이 자동으로 맞춰지기 때문에 관련 부분에 큰 신경을 쓰지 않아도 된다.
자바 직렬화의 단점
역직렬화시 클래스 구조 변경 문제
용량 문제
직렬화가 필요한 상황
JVM의 메모리에서만 상주되어 있는 객체 데이터를 그대로 영속화가 필요한 경우 사용한다.
시스템이 종료되더라도 없어지지 않는 장점을 가지며 영속화된 데이터이기 때문에 네트워크로 전송이 가능하다.
서블릿 기반의 WAS에서 세션의 자바 직렬화를 지원
자바 시스템에서 퍼포먼스를 위한 캐시(Encache, Redis, Memcached 등등) 라이브러리를 시스템에서 많이 이용하게 된다.
자바 RMI(Remote Method Invocation), 원격 시스템 간의 메시지 교환을 위해서 사용하는 기술
참고
Last updated