시리얼라이제이션(Serialization)

Kimaramy·2020년 4월 21일
2

프론트엔드 개발

목록 보기
10/14
post-thumbnail

직렬화(Serialization)란

데이터 시리얼라이제이션이란, 어떤 환경의 데이터 구조를 다른 환경에 전송 및 저장하기 위해 나중에 재구성할 수 있는 바이트의 포맷으로 변환하는 과정을 말합니다. 반대로, 일련의 바이트로 부터 데이터 구조를 추출하는 일은 역직렬화(Deserialization)라고 합니다.

직렬화가 필요한 이유

참조형 데이터는 병렬적으로 구성되어있으므로 하나의 데이터로서 전송을 할 수 없습니다. 예시로 식재료들을 각각의 칸으로 보관하고 있는 냉장고가 있고, 택배로 요리에 필요한 재료들을 보내려 한다고 가정하겠습니다. 하지만 직렬화 없이 보내는 것은 냉장고를 통째로 보내는 것과 같습니다. 그래서 직렬화하여 하나의 묶음으로 만들어 보낼 필요가 있는데, 이 경우 밀키트처럼 재료들을 하나로 포장하여 보내는 것으로 이해하면 쉬울 것 같습니다.

자바스크립트의 직렬화

자바스크립트에서는 참조형 데이터를 외부 환경에 효율적으로 전송하고 저장하고 다시 받아올 수 있도록 주로 표준 포맷인 JSON으로 변환합니다. Node.js http 통신 과정에서는 내부적으로 JSON 객체를 더 원시적 형태인 Buffer 객체로 변환하기도 합니다.

직렬화 예시

Object to JSON

let obj = {a:1}
let json = JSON.stringify(obj); // "{"a":1}"

JSON to Buffer

let buffer = Buffer.from(json); // <Buffer 61 31> 

역직렬화 예시

JSON to Object

let obj = JSON.parse(json); // {a:1}

Buffer to JSON

// request.setEncoding('utf8');
// 위와 같이 요청 데이터를 인코딩 하지 않으면,
// chunk 인자로 Buffer가 전달된다.

let json = buffer.toString('utf8'); // "{"a":1}"
// toString()은 기본 uft-8 인코딩

참고 : API for Stream Consumers | nodejs.org

JSON과 Buffer

JSON
속성-값 쌍 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 을 위해, 넓게는 XML을 대체하는 주요 데이터 포맷이다.

Buffer
컴퓨팅에서, 버퍼는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼링이란 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다. 다른 말로 '큐'라고도 표현한다.

profile
스타트업에서 Software Engineer로 일하고 있습니다

1개의 댓글

comment-user-thumbnail
2020년 11월 9일

감사합니다.

답글 달기