마샬링(Marshalling)시리얼라이제이션(Serialization)

 

 

시리얼라이제이션 (Serialization)

정의:
시리얼라이제이션은 객체를 바이트 스트림(Byte Stream)으로 변환하여 파일, 데이터베이스, 네트워크 등을 통해 저장하거나 전송할 수 있도록 하는 과정입니다. 반대로, 바이트 스트림을 다시 객체로 복원하는 과정을 디시리얼라이제이션(Deserialization)이라고 합니다.

주요 특징:

  • 목적: 객체의 상태를 지속적으로 저장하거나 전송하기 위해 사용됩니다.
  • 형식: 주로 이진 형식(Binary Format)으로 변환됩니다.
  • 사용 사례:
    • 객체를 파일에 저장하거나 읽어올 때
    • 네트워크를 통해 객체를 전송할 때 (예: RMI, 소켓 통신)
    • 캐싱 시스템에서 객체를 저장할 때

예시 (Java):

import java.io.*;

public class SerializationExample {
    public static void main(String[] args) {
        try {
            // 객체 생성
            Person person = new Person("홍길동", 30);

            // 시리얼라이즈 (객체를 파일로 저장)
            FileOutputStream fileOut = new FileOutputStream("person.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(person);
            out.close();
            fileOut.close();
            System.out.println("Serialized data is saved in person.ser");

            // 디시리얼라이즈 (파일에서 객체 복원)
            FileInputStream fileIn = new FileInputStream("person.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            Person restoredPerson = (Person) in.readObject();
            in.close();
            fileIn.close();
            System.out.println("Deserialized Person:");
            System.out.println("Name: " + restoredPerson.getName());
            System.out.println("Age: " + restoredPerson.getAge());
        } catch (IOException | ClassNotFoundException i) {
            i.printStackTrace();
        }
    }
}

class Person implements Serializable {
    private String name;
    private int age;

    // 생성자, 게터, 세터 생략
}

마샬링 (Marshalling)

정의:
마샬링은 객체를 특정 형식(주로 XML, JSON 등)으로 변환하여 데이터 교환이나 저장을 용이하게 하는 과정입니다. 이는 주로 웹 서비스나 API에서 데이터를 주고받을 때 사용됩니다. 반대로, 특정 형식의 데이터를 객체로 변환하는 과정을 언마샬링(Unmarshalling)이라고 합니다.

주요 특징:

  • 목적: 객체 데이터를 표준 데이터 형식(XML, JSON 등)으로 변환하여 다양한 시스템 간에 데이터 교환을 가능하게 합니다.
  • 형식: 주로 텍스트 기반 형식(Text-Based Format)인 XML, JSON 등으로 변환됩니다.
  • 사용 사례:
    • RESTful API에서 클라이언트와 서버 간 데이터 교환
    • SOAP 웹 서비스에서 메시지 교환
    • 데이터 직렬화 및 전송 시 호환성 유지

예시 (Java, JSON 사용):

import com.fasterxml.jackson.databind.ObjectMapper;

public class MarshallingExample {
    public static void main(String[] args) {
        try {
            ObjectMapper mapper = new ObjectMapper();

            // 객체 생성
            Person person = new Person("홍길동", 30);

            // 마샬링 (객체를 JSON으로 변환)
            String jsonString = mapper.writeValueAsString(person);
            System.out.println("Marshalled JSON:");
            System.out.println(jsonString);

            // 언마샬링 (JSON을 객체로 변환)
            Person restoredPerson = mapper.readValue(jsonString, Person.class);
            System.out.println("Unmarshalled Person:");
            System.out.println("Name: " + restoredPerson.getName());
            System.out.println("Age: " + restoredPerson.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Person {
    private String name;
    private int age;

    // 생성자, 게터, 세터 생략
}

주요 차이점

특징 시리얼라이제이션 (Serialization) 마샬링 (Marshalling)
목적 객체의 상태를 바이트 스트림으로 저장/전송 객체를 특정 데이터 형식(XML, JSON 등)으로 변환
데이터 형식 이진 형식(Binary Format) 텍스트 기반 형식(Text-Based Format)
사용 사례 파일 저장, 네트워크 전송, 캐싱 시스템 웹 서비스, API 데이터 교환, XML/JSON 메시징
변환 대상 객체 ↔ 바이트 스트림 객체 ↔ XML/JSON 등 텍스트 형식
도구 및 라이브러리 Java의 Serializable, ObjectOutputStream Jackson, JAXB, Gson 등
플랫폼 독립성 주로 같은 플랫폼 내에서 사용 다양한 플랫폼 간 데이터 교환에 적합

요약

  • 시리얼라이제이션은 객체를 이진 형식으로 변환하여 저장하거나 전송하는 과정으로, 주로 같은 플랫폼 내에서의 데이터 저장 및 전송에 사용됩니다.
  • 마샬링은 객체를 XML, JSON과 같은 텍스트 기반 형식으로 변환하여 다양한 시스템 간 데이터 교환을 가능하게 하는 과정으로, 웹 서비스 및 API 통신에 주로 사용됩니다.

이 두 개념은 모두 객체 데이터를 변환하는 과정이지만, 사용 목적과 변환하는 데이터 형식에 따라 구분됩니다. 프로젝트의 요구사항에 맞게 적절한 방식을 선택하여 사용하면 됩니다.


+ Recent posts