마샬링(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 통신에 주로 사용됩니다.
이 두 개념은 모두 객체 데이터를 변환하는 과정이지만, 사용 목적과 변환하는 데이터 형식에 따라 구분됩니다. 프로젝트의 요구사항에 맞게 적절한 방식을 선택하여 사용하면 됩니다.
'Network' 카테고리의 다른 글
언더레이 네트워크 (0) | 2024.12.05 |
---|---|
HTTP 헤더 (0) | 2024.10.15 |
TCP (HTTP/1.1, HTTP/2, Head-of-Line Blocking, 파이프라이닝 vs 멀티플렉싱) (1) | 2024.10.10 |
JWT(JSON Web Token) (0) | 2024.10.10 |
로그인(Authentication) - 쿠키(Cookie), 세션(Session) (0) | 2024.10.10 |