JSON 직렬화?

손정만·2022년 5월 16일
0

직렬화

java 의 경우 객체를 byte 형태로 변환하여 외부의 다른 java 프로그램에서 이용 가능하도록 만들어주는 작업이다. 이것의 다른 예로 js의 JSON.stringify() 처럼 객체 구조를 문자 형태로 바꿔서 다른 js에서도 객체를 사용 가능하게 해준다.

웹 통신에서의 json

json 은 웹 데이터 통신에서 데이터 포멧으로 자주 쓰인다. 이런 요청을 보내보다보면 리스트와 같은 형태를 조회할때, 한가지 의문이 생긴다.
이 많은 데이터를 조회할때 경량화를 한다면 좀 더 통신에 소비되는 자원을 줄일수 있지않을까? 그래서 데이터 형태를 메타데이터 형태로 가지고 반복적으로 사용되는 부분을 줄인다면 개선 가능하지 않을까? 하는 생각이 들었다.

{
	meta: {
		list1:{
			a: 'userName',
			b: 'userAccountState',
			c: 'accountDataStructure', ...
		}, ...
	},
	data: {
		list1:[
          {a:111, b:222, c:333, ...}, ...
		], ...
    }
}

HTTP압축

그런 시스템으로 GZIPDEFLATE가 적용 되어있다.

GZIP

GZIP은 UNIX 시스템을 위해 개발되었습니다. 텍스트 기반 데이터를 이진 형식으로 변환하며 일반적으로 파일 크기가 크게 줄어 듭니다. GZIP 압축 알고리즘은 다른 알고리즘에 비해 압축률이 상당히 높지만 매우 빠릅니다. 압축 속도가 더 중요한 경우 GZIP가 좋은 옵션 일 수 있습니다.
https://www.netinbag.com/ko/internet/what-is-a-gzip.html

DEFLATE 알고리즘을 근간으로 하고있다.

DEFLATE

LZ77, Huffman Coding 을 근간으로 한다

LZ77
Dictionary Method 방식으로 반복되는 문자열을 탐색하여 압축

Huffman Coding
문자의 빈도를 기준으로 전이진트리를 이용한 통계적 압축 방식, 압축과 복호화 과정

이진압축

메타데이터가 아닌 문자열 자체를 이진형식으로 변환하여 전달하는 라이브러리도 있다.
BSON 과 MeesagePack 등이 있다.
결국 압축을 거치는 과정에서 이 과정을 거친다고 볼수 있을것이다.

참조

0개의 댓글