직렬화(serializae) & 역직렬화(deserializae)
INTRO
왜 조사를 하게 되었나요 ?
팀 프로젝트를 하면서 FE(프론트엔드) - BE(백엔드) 사이의 API 통신을 할 때 데이터를 주고받는 과정에서 알고 있어야 하는 지식이라서 정리하게 되었다.
Serial
먼저, Serial 의 의미를 알아보자.
USB 인테페이스 라는 것을 들어본 적이 있을 것이다.
USB 인터페이스 = Universal Serial Bus
여기서 Serial(직렬) = 연쇄,연속해서 이어지는 어떤 것 을 의미한다.
- 연속된 드라마(Serial drama)
- 01010100000 같은 이진데이터
- "Hi My Name is Youngmin" 같은 문장형 데이터
즉, USB 인터페이스란 범용적으로 직선적으로 연속적으로 들어오는 데이터를 받아들일 수 있는 인터페이스이다.
Serialize & Deserialize
Serialize(직렬화) = Object를 연속된 string OR bytes 데이터로 변형하는 과정
왜 이런과정이 필요한가요 ?
Object 데이터는 메모리에 존재하고어 추상적인데 비해 string OR bytes 데이터는 드라이브 저장 or 통신선을 통해 전송할 수 있기 때문이다.
Deserialize(역직렬화) = 직렬화 반대로, 이미 만들어진 string 데이터 or bytes 데이터,파일로부터 Object 데이터로 변환하는 과정
예를 들어, 우리가 게임 엔진 에디터에서 어떤 Object 데이터를 편집한다고 했을 때, 중간에 에디터를 종료하고 다시 편집을 하려고 했을 때 그 Object데이터가 그대로 남아있게 된다면 이것은 좀 이상하다.
- 왜냐면 Object 데이터를 메모리에 존재한다고 했고, 프로그램이 종료되면 메모리에 존재하고 있던 모든 데이터도 파괴되는 것이 정상이기 때문이다.
- 그런데도, 그 정보들이 잘 유지되어 있는것은, 실제로는 Object 데이터를 Serialize 했기 때문에 우리의 컴퓨터 어딘가의 텍스트 파일로 저장되어 있기 때문이다.
그렇기 때문에, 나중에 다시 Object 데이터를 다시 사용할 때는, 텍스트 파일로 저장되어 있던 게임 데이터 Object를 Deserialize를 통해서, 이를 원래의 Object 데이터로 가져오는 것이다.
비유를 하나 하자면
스타트랙 ( 텔레포트 )
- 행성의 있는 사람을 원자 단위로 분해(Serialize)한 다음, 그렇게 분해된 원자 단위의 데이터들을 우주선으로 다운로드하고 다시 재조립함(Deserialze)으로써, 텔레포트를 진행하는 원리와 비슷하다고 하더라..
여기 2대의 PC가 있다치고, 두 PC사이의 데이터를 주고받는다고 가정하자.
문제는, 두 PC는
- 사용하는 HW, OS 도 다르다.
- 그리고, A object는 실제로 물리적인 회선으로 전송가능한 형태가 아니라, 메모리에 저장되어 있는 추상적인 형태이다.
하지만, 두 PC 모두 01010..의 Bytes 데이터를 다룰 수 있다는 공통점이 존재한다.
그러한 Bytes 데이터는 물리적인 회선을 통해, 전기적인 신호로 전송할 수 있다.
그래서 두 PC가 물리적인 회선으로 연결되어 있다고 했을 때
먼저
A object를 물리적인 회선으로 전송할 수 있는 형태인 Bytes 데이터로 Serialize(직렬화) 한다.
그리고, 그 Bytes 데이터를 회선을 통해 전달한다.
그렇게, 전송받은 Bytes 데이터를 상대 컴퓨터에서는 Deserialize(역직렬화) 해야한다.
- 왜냐면, 회선을 통해 아무처리하지 않은 Bytes 데이터는 그저 파일 형태 이기 때문에 이는, 실제 메모리에 존재하느 실체가 아니다.
그래서, 파일을 실제 메모리에 존재하는 데이터인 Object 데이터로 변환하기 위해서 Deserialize(역직렬화)를 진행해야 하는 것이다.
Server(서버) 와 Client(클라이언트,브라우저) 관계에서 보자.
서버와 브라우저(클라이언트) 사이에서 데이터를 주고받을 때, 주로 JSON 포맷을 사용해서, Object를 주고 받는다.
Object 에서 JSON 파일로 Serialize(직렬화) 를 통해 전송하고
다운로드 받은 JSON 파일에서 Deserialize(역직렬화) 를 통해 Object로 복구해서 데이터를 전달 받는다.
Object를 Serialzie 하고 Deserialize 하는 데이터 포맷 방식은 위와 같이 많다.
하지만 핵심은 같다.
추상적인 Object 데이터를 구체적이고 저장가능하고, 전송가능한 단순한 text파일 or 연속적인 Bytes 데이터 or 파일로 전환하는 것
다음 시간에는 javascript 에서 직렬화와 역직렬화를 구현하는 방법에 대해 알아보겠습니다.