콜백 함수를 쪼개던 중, sqlite3 format형태의 저장으로 인해 직렬화는 수행하되 변환은 하지 않는다고..
뭔소린가 싶어서 sqlite3 format부터 찾아봤다.
sqlite3 format
: SQLite DB의 파일 형식 및 내부 구조를 가리킨다.
경량의 내장형 DB로 많은 응용 프로그램 및 플랫폼에서 사용되며, 데이터를 저장 관리하기 위한 파일 형식
B-트리 구조, 페이지, 마스터 페이지 등이 있지만 메인 내용이 아니기에 넘기겠다.
현재 진행중인 것이 결국은 Serialization과 Deserialzation이 수월하게 가능해야하는 부분이라 어떤 경우에 필요한지 찾아보게 됐다. 코드 자체만 보면 돌아가는 것은 이해가 되는데, 왜 이렇게 해야되는지에 대한 물음이 가시지를 않았다..
직렬화의 필요성?
개발 언어와 무관하게 사용하는 데이터의 메모리 구조는 크게 2가지로 나뉜다.
값 형식 데이터
: int, float, char 등 값 형식 데이터는 스택에 메모리가 쌓이며 직접 접근이 가능하다
참조 형식 데이터
: 객체와 같은 참조 형식 변수를 선언하면 힙에 메모리가 할당되며, 스택에서는 이 힙 메모리를 참조하는 구조로 되어있다.
디스크에 저장하거나 통신할 때 사용할 수 있는 데이터는 값 형식 데이터 뿐이다.
참조 형식은 실제 데이터가 아닌 힙에 할당된 메모리 번지 주소를 가지고 있기 때문이다.
pc마다 메모리 주소가 다르기 때문에 참조 형식 데이터를 통신 시에 사용할 수 없다.
🤔그럼 왜 직렬화가 필요한가?
직렬화 진행 시 주소 값이 가지는 데이터를 모두 모아서 값 형식 데이터로 변환해 준다.
직렬화된 언어에 따라 텍스트나 바이너리 등의 형태로 되는데, 이러한 형태가 되어야 저장, 통신 시에 파싱이 가능한 유의미한 데이터가 된다.
🔔직렬화가 필요한 이유는 데이터를 파일로 저장 또는 데이터 통신에서 파싱가능한 유의미한 데이터로 만들기 위함이다.
'책벌레와 벌레 그 사이 어딘가 > 개념쌓기' 카테고리의 다른 글
[개념쌓기] 메타데이터(Metadata)란? (77) | 2023.12.07 |
---|---|
[개념쌓기] CAN & ETH (71) | 2023.11.28 |
[개념 쌓기] Horizontal Sync & Vertical Sync (128) | 2023.10.11 |
[개념쌓기] UART란? (59) | 2023.08.10 |
[개념쌓기] Byte Order? Little endian? Big endian? (48) | 2023.08.07 |
댓글