eotkd4791 / TIL-archive

TIL을 모아두는 용도로 사용하는 Repo
0 stars 0 forks source link

직렬화 (Serialization) / 역직렬화 (Deserialization) 란 ? #12

Open eotkd4791 opened 3 years ago

eotkd4791 commented 3 years ago

직렬화(Serialization)란

데이터를 다른 환경에 전송하거나 디스크에 저장하기 위해 나중에 재구성할 수 있는 Byte 형식으로 변환하는 과정이다. 반대되는 개념은 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화(Deserialization)라고 한다.

정리

직렬화 (Serialization)
: Data -> Byte or String형식

역직렬화 (Deserialization)
: Byte or String형식 -> Data

직렬화가 필요한 이유

데이터의 종류는 크게 Value TypeReference Type으로 나뉜다.

Value Type는 스택에 메모리가 쌓이고 직접 접근이 가능하다. int, char 등의 자료형을 가지는 데이터가 value type data에 속한다.

Reference TypeHeap에 메모리가 할당되며, Stack에서는 Heap에 할당된 메모리를 참조하는 구조로 되어있다. 포인터 변수객체 타입이 여기에 해당된다.

Value Type data는 그대로 네트워크 통신이나 메모리에 저장할 수 있지만, Reference Type data는 불가능하다. 각 PC마다 사용하고 있는 메모리 공간의 주소가 다르기 때문이다. 따라서 직렬화를 통해 메모리 공간의 주소값에 저장되어 있는 데이터를 가져와서 Value Type data로 변환해야한다.

직렬화(Serialization)를 거치면 데이터들은 String 또는 Binary 형식의 데이터가 되며, 직렬화를 거친 후에야 비로소 네트워크 통신 및 메모리에 저장이 가능해진다.

직렬화된 데이터는 이후에 역직렬화(Deserialization)를 통해 해당 데이터를 활용할 수 있다.

자바스크립트를 예로 들면, 서버에 JSON 객체 형식의 데이터를 전송하는 경우에 JSON.stringify 메소드를 통하여 직렬화한다.

const userInfo = {
  name: 'Daesang You',
  age: 29,
  position: 'Frontend Developer'
};

JSON.stringify(userInfo);

서버로부터 받은 Response를 JSON.parse 메소드를 통하여 역직렬화한다. 이 과정을 통해서 사용 가능한 데이터로 변환한다.

JSON.parse(responseFromServer);

참고자료

raram2님의 블로그 직렬화 - 위키백과 감귤저장소 TutorialPost - JavaScript JSON-stringify, parse