직렬화
- 프로그래밍 언어 내의 object는 직렬화를 거친 형태로 다른 컴퓨터/네트워크와 통신한다.
Object 개요
- Attribute를 가지는 구조화된 데이터이다. (class, struct, ...)
- Object와 Attribute는 데이터 그 자체가 아니라 데이터를 저장하고 있는 메모리의 주소값이다.
Object를 네트워크로 전송할 때 문제점
Object를 구성하는 값을 그대로 네트워크를 통해 전송한다면 문제점이 발생한다.
- 데이터를 전달받은 컴퓨터는 전달받은 메모리 주소값을 통해 데이터에 접근하더라도, 메모리 주소값이 가르키는 데이터와 같을리가 없다.
- 데이터를 전달받더라도 양쪽 컴퓨터에서 약속한 데이터의 구조가 명시되어 있지 않으므로, 원하는 데이터가 무엇인지, 위치가 어딘지 알 수가 없다.
직렬화로 문제점 해결
이 때 필요한 것이 직렬화
이다.
- Object의 메모리 주소 값을 메모리 주소가 가르키고 있는 데이터로 변환해준다. (
마샬링
)
- 약속한 구조화된 텍스트 형태로 변환한다. (
JSON
or XML
)
전달받은 JSON, XML파일은 역직렬화
를 통해 상대방이 원하는 프로그래밍 언어의 객체로 변환된다.
- JSON, XML으로의 변환은 HTTP body에 필요한 bytestream형태로 바꾸는 과정에서 필요한 직렬화이다.
- WebFramework에서 생성한 metadata, header값은 cgi 변수를 통해 웹서버에서 직렬화된다. (Python WebFramework는 WSGI 변수를 통해 HTTP 메시지(바이트 형태로 변환된다.)