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