Computer Concepts

Serialization 직렬화

JeanMichealLee 2019. 1. 16. 17:14
반응형
  • 컴퓨터 A에 있는 정보를 컴퓨터 B에 전송하기 위한 것이 직렬화입니다.
  • 객체 를 직렬화하게 되면 일련의 바이트 스트림으로 변환됩니다.
  • 직렬화 된 정보를 복원하는 것을 역직렬화라고 하는 데, 이를 통해서 객체의 원형을 복원할 수 있습니다.

질문에서 언급한대로, 객체에서 getter와 setter를 사용하는 것은 같은 컴퓨터에 있을 경우에는 가능합니다. 따라서 같은 컴퓨터에 사용할 경우에는 직렬화에 대한 고민을 할 필요가 없습니다.

그러나 사용하고 있는 이 객체를 다른 컴퓨터(혹은 종료된 후, 재실행되었을 때)에 전송하여, 그대로 사용하는 것에 대한 고민한다면, 직렬화 가 필요로 합니다.

객체를 어떻게 해야 다른 컴퓨터에 전송하여 그 객체를 그대로 사용할 수 있을까요?

기본적으로 다음과 같은 생각을 해볼 수 있을 겁니다.

  1. 원본에서 사용하고 있는 프로그램코드(함수, 로직 등)이 그대로 대상컴퓨터에도 있어야할 겁니다.
  2. 1항이 만족하더라도, 코드만 존재할 뿐 사용하고 있는 객체 가 가지고 있었던 정보는 대상컴퓨터에 없습니다.
  3. 따라서 컴퓨터A에서 존재하였던 객체 가 가진 정보를 컴퓨터B에도 전달해야할 필요가 있습니다.

자바의 Serializable(직렬화)

  • 자바는 분산환경(서로 다른 컴퓨터에서 주어진 목적을 위해서 협력하는 환경)에서 분산된 컴퓨터들에서 객체정보를 주고 받을 수 있게 하기 위해서 RMI (Remote Method Invocation, 원격 메서드 호출)을 지원합니다. (일반적으로 RPC - Remote Procedure Call, 원격 프로시저 호출 - 라고 부르며, 다른 언어나 플랫폼에도 개념이 있습니다. )
  • 메서드의 경우 메서드 인자로 객체가 전달될 수 있고, 또한 메서드의 반환(return)결과로 객체가 전달될 수 있습니다.
  • 그런데 이 함수를 호출하는 쪽은 컴퓨터A이고, 이 메서드가 실행되는 곳은 컴퓨터B인 환경을 지원하는 것이 자바의 RMI입니다.
  • RMI를 동작하게 하기위해서는 객체를 네트워크로 전송가능한 형태로 바꿀 필요가 있는 데, 이 때 사용되는 개념이 직렬화/역직렬화입니다.
  • 객체를 복원가능하면서 전송이 가능한 상태로 바꾸는 작업이 직렬화 입니다. 역직렬화 는 반대로 작업하여 다시 객체로 되게 만드는 것입니다.
  • 자바는 객체중에 직렬화가 가능한 객체를 표시하기 위해서는 Serializable 인터페이스를 상속하게 하고 있습니다. 이 경우, 객체를 메모리에 생성할 때부터, 직렬화를 염두에 두고 관리합니다.

직렬화

  • 직렬화 는 자바의 Serializable를 사용하지 않더라도, 정보를 대상 시스템에 복원가능하게 전달하기 위해서 다른 형태(텍스트, 바이트, JSON, XML 등)로 변경하는 행위 일체를 말합니다. 자바의 경우, Serializable 인터페이스 를 통해서 편의성을 제공해줍니다.

출처 : https://hashcode.co.kr/questions/3297/


반응형