본문 바로가기
TIL

[TIL] 직렬화(Serialization)와 역직렬화(Deserialization)란?

by DearGreen 2024. 10. 2.

직렬화(Serialization)와 역직렬화(Deserialization)


직렬화(直列化) 또는 시리얼라이제이션(serialization)은 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크 간 전송)하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다.

오브젝트를 직렬화하는 과정은 오브젝트를 마샬링한다고도 한다. 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화 또는 디시리얼라이제이션(deserialization)이라고 한다.

출처 - https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC%ED%99%94

 

  • 직렬화: 객체를 바이트 스트림으로 변환하여 파일 시스템이나 네트워크를 통해 전송할 수 있게 만드는 과정이다. 예를 들어, 객체를 JSON, XML 또는 이진 형식으로 변환할 수 있다.
  • 역직렬화: 직렬화된 데이터를 다시 원래의 객체 형태로 변환하는 과정이다. 이 과정에서는 저장된 데이터를 읽어들여 객체를 복원한다.

사용 이유는 아래와 같다.

  • 데이터 저장: 객체를 파일이나 데이터베이스에 저장하여 프로그램 종료 후에도 데이터를 유지할 수 있다.
  • 네트워크 전송: 객체를 네트워크를 통해 전송할 때, 직렬화를 통해 데이터 크기를 줄이고, 전송할 수 있다.
  • 호환성: 서로 다른 시스템 간에 데이터 교환을 쉽게 할 수 있다.

그런데 왜 서로 다른 IT 분야에서 사용하는 직렬화 형식이 다를까?

  • 특정 형식은 특정 용도에 최적화되어 있다. 예를 들어, XML은 구조화된 데이터와 메타데이터를 표현하는 데 유리하고, JSON은 웹 API에서 주로 사용된다.
  • 특정 형식은 성능이나 데이터 크기 측면에서 더 효율적이다. 예를 들어, 이진 형식은 데이터 크기가 작고 직렬화/역직렬화 속도가 빠르지만, JSON이나 XML은 사람이 읽기 쉬운 형식이다.
    그래서 이진 형식을 주로 실시간 멀티 게임 분야에서 사용하고, Json, XML등은 웹 개발에 사용된다.

[C# 직렬화 예시]

using System;
using System.Text.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "Alice", Age = 30 };
        string jsonString = JsonSerializer.Serialize(person);
        Console.WriteLine(jsonString);
    }
}

 

 

[C# 역직렬화 예시]

using System;
using System.Text.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        string jsonString = "{\"Name\":\"Alice\",\"Age\":30}";
        Person person = JsonSerializer.Deserialize<Person>(jsonString);
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

 

C#에서는 System.Text.Json namespace를 제공해 주어 이를 이용해  json 형식으로 직렬화, 역직렬화를 진행했다!