직렬화(Serialization)이란?

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

 

한 줄 요약 : 객체를 파일의 형태 등으로 저장하거나, 통신하기 쉬운 포맷으로 변환하는 과정을 의미한다.

 

직렬화의 대상인 Object는 메모리에 있고 형태가 추상적이다.
그래서 이런 Object를 string 혹은 바이트(bytes) 형태로 직렬화를 해준다.

이렇게 직렬화를 거쳐 일련의 형태를 가진 데이터를 파일로 저장하거나 클라이언트에게 전송할 수 있다.

 

 

역직렬화(Deserialization)이란?

직렬화 되어있는 데이터를 역으로 직렬화 하는 것을 의미

 

직렬화를 하는 과정에서 Json 형식으로 직렬화 할 지 아니면 Bytes 형식으로 할 지 정한다.
반대로 역직렬화를 할 때는 일련의 형식을 가진 데이터를 읽거나 메모리에 쓸 수 있도록 변환하는 것이다.

이런 직렬화 포맷에는 아래와 같은 형식들이 대표적이다.

  • Json
  • XML
  • CSV
  • Byte

여기서 Json, XML, CSV는 사람이 읽을 수 있는 형태이다.
하지만 string 형태로 저장이 되기 때문에 저장 공간의 효율성이 떨어지고, 비교적 파싱하는 시간이 오래 걸린다.

반대로 Binary 직렬화는 사람이 읽기 힘든 형태이다.
하지만 저장 공간을 효율적으로 사용할 수 있고, 비교적 파싱하는 시간이 빠르다.

 

 

직렬화를 하는 이유?

디스크에 저장되어 있는 데이터는 직렬화를 거치면서 파싱이 가능한 유의미한 데이터가 된다.

이런 직렬화된 데이터를 특정 대상의 컴퓨터에 전송하면,
해당 포맷에 맞게 파싱을 해서 읽거나 쓰기가 가능하다.

이런 직렬화 포맷은 특정의 포맷이 성능상 더 좋아서 사용 하는 것이 아닌,
각 산업 분야에 맞춰서 사용하기 위함이다.

예를 들면 실시간 데이터 전송의 성능이 중요한 멀티플레이 RPG 게임은 바이너리 직렬화를 사용한다.
하지만 웹 개발에서는 대부분 Json 포맷을 사용한다.

 

직렬화와 역직렬화(C#)

 

.NET에서는 직렬화를 할 수 있도록 다양한 방식을 제공한다.

  • XML Serialization
  • SoapFormatter Serialization
  • Binary Serialization
  • Json Serialization

'산대특 > 게임 알고리즘' 카테고리의 다른 글

AppleCatch  (0) 2024.02.06
동기와 비동기  (1) 2024.02.05
디자인 패턴과 싱글톤 패턴  (0) 2024.02.05
Process 와 Thread 그리고 Thread 와 Coroutine  (1) 2024.02.04
Pirate Bomb - Captain(Enemy)  (0) 2024.02.02

+ Recent posts