직렬화: 두 판 사이의 차이

내위키
편집 요약 없음
편집 요약 없음
5번째 줄: 5번째 줄:
저장장치에 저장되는 데이터, 또는 네트워크를 타고 다니는 데이터는 결국은 0과 1로 이루어진 디지털 데이터의 연속이며, 이는 한 줄로 이어진 길다란 줄과도 같다. 마치 건전지를 직렬로 연결하듯이, 데이터 역시 0과 1이 직렬로 연결되어 긴 줄을 이루는 셈이다. 따라서 프로그래밍 언어에서 사용하는 변수, 구조체, 객체와 같은 데이터들을 저장장치에 저장하거나, 네트워크로 전송할 때에는 여기에 적합한 형식으로 만들어 줘야 한다.
저장장치에 저장되는 데이터, 또는 네트워크를 타고 다니는 데이터는 결국은 0과 1로 이루어진 디지털 데이터의 연속이며, 이는 한 줄로 이어진 길다란 줄과도 같다. 마치 건전지를 직렬로 연결하듯이, 데이터 역시 0과 1이 직렬로 연결되어 긴 줄을 이루는 셈이다. 따라서 프로그래밍 언어에서 사용하는 변수, 구조체, 객체와 같은 데이터들을 저장장치에 저장하거나, 네트워크로 전송할 때에는 여기에 적합한 형식으로 만들어 줘야 한다.


컴퓨터의 '파일'은 직렬화의 대표적인 예다. [[워드프로세서]]로 작업한 문서라든가 엑셀로 작업한 스프레드시트, 그리고 사진, 음악과 같은 다양한 디지털 데이터들은 결국은 저장장치 또는 네트워크로 보내야 한다. 따라서 '파일'의 형태로 변환해야 하는데 이게 직렬화다. 파일을 불러와서 프로그램 위에 문서, 시트, 사진, 음악과 같은 모습으로 띄우는 것은 역직렬화인 셈. 프로그래머라면 친숙한 [[XML]], [[JSON]], [[YAML]] 같은 형식도 데이터를 텍스트 형식으로 직렬화 하기 위한 형식이다.
컴퓨터의 '파일'은 직렬화의 대표적인 예다. [[워드프로세서]]로 작업한 문서라든가 엑셀로 작업한 스프레드시트, 그리고 사진, 음악과 같은 다양한 디지털 데이터들은 결국은 저장장치 또는 네트워크로 보내야 한다. 따라서 '파일'의 형태로 변환해야 하는데 이게 직렬화다. 파일을 불러와서 프로그램 위에 문서, 시트, 사진, 음악, 영상과 같은 모습으로 띄우는 것은 역직렬화인 셈.
 
직렬화의 방식은 크게 두 가지로, 사람은 직접 읽을 수 없지만 기계는 이해할 수 있는 이진(binary) 방식이 있고, 사람이 읽을 수 읽는(human-readable) 형태로 직렬화하는 텍스트(text) 방식이 있다. 프로그래머라면 친숙한 [[XML]], [[JSON]], [[YAML]] 같은 형식은 텍스트 형식 직렬화이고, 아래아한글의 HWP 파일, 워드의 DOC 혹은 DOCX 파일, 이미지를 위한 JPG, PNG, GIF 같은 형식들, 오디오를 위한 WAV, MP3, OGG, AAC 같은 형식들, 영상을 위한 AVI, MOV, MP4와 같은 형식들은 이진 방식 직렬화다.


직렬화가 불가능한 데이터들도 물론 있다. 대표적인 게 [[포인터]]. [[포인터]]는 어떤 데이터가 메모리 공간에서 차지하는 주소의 시작값을 가리키는 것이라서 저장장치나 네트워크로 데이터가 갈 때에는 의미가 없어진다. 예를 들어, 어떤 컴퓨터에서 A라는 메모리 주소에 저장된 변수 데이터가 네트워크를 타고 B 컴퓨터에 갔을 때에는 전혀 다른 주소에 저장될 것이다. 따라서 [[포인터]] 값을 전달하는 것은 아무런 의미가 없다.
직렬화가 불가능한 데이터들도 물론 있다. 대표적인 게 [[포인터]]. [[포인터]]는 어떤 데이터가 메모리 공간에서 차지하는 주소의 시작값을 가리키는 것이라서 저장장치나 네트워크로 데이터가 갈 때에는 의미가 없어진다. 예를 들어, 어떤 컴퓨터에서 A라는 메모리 주소에 저장된 변수 데이터가 네트워크를 타고 B 컴퓨터에 갔을 때에는 전혀 다른 주소에 저장될 것이다. 따라서 [[포인터]] 값을 전달하는 것은 아무런 의미가 없다.

2021년 11월 7일 (일) 17:25 판

Serialization.

컴퓨터의 데이터 객체를 저장 매체에 저장할 수 있는 형식, 또는 네트워크를 통해 전송할 수 있는 것으로 변환하는 것을 뜻한다. 그 반대로 변환하는 것은 De-serialization(역직렬화). 직렬화와 역직렬화는 세트로 항상 같이 가는 개념이다. 즉 직렬화된 데이터는 역직렬화할 수 있어야 한다. 직렬화 → 역직렬화를 한 데이터가 원본과 완벽하게 똑같지는 않을 가능성은 있다. 버그가 없다는 가정으로, 이러한 차이는 직렬화를 한 플랫폼과 역직렬화를 한 플랫폼에 하드웨어 또는 운영체제나 프로그래밍 언어와 같은 소프트웨어에 차이가 있어서일 수도 있고, 직렬화 형식에 한계가 있어서일 수도 있다.

저장장치에 저장되는 데이터, 또는 네트워크를 타고 다니는 데이터는 결국은 0과 1로 이루어진 디지털 데이터의 연속이며, 이는 한 줄로 이어진 길다란 줄과도 같다. 마치 건전지를 직렬로 연결하듯이, 데이터 역시 0과 1이 직렬로 연결되어 긴 줄을 이루는 셈이다. 따라서 프로그래밍 언어에서 사용하는 변수, 구조체, 객체와 같은 데이터들을 저장장치에 저장하거나, 네트워크로 전송할 때에는 여기에 적합한 형식으로 만들어 줘야 한다.

컴퓨터의 '파일'은 직렬화의 대표적인 예다. 워드프로세서로 작업한 문서라든가 엑셀로 작업한 스프레드시트, 그리고 사진, 음악과 같은 다양한 디지털 데이터들은 결국은 저장장치 또는 네트워크로 보내야 한다. 따라서 '파일'의 형태로 변환해야 하는데 이게 직렬화다. 파일을 불러와서 프로그램 위에 문서, 시트, 사진, 음악, 영상과 같은 모습으로 띄우는 것은 역직렬화인 셈.

직렬화의 방식은 크게 두 가지로, 사람은 직접 읽을 수 없지만 기계는 이해할 수 있는 이진(binary) 방식이 있고, 사람이 읽을 수 읽는(human-readable) 형태로 직렬화하는 텍스트(text) 방식이 있다. 프로그래머라면 친숙한 XML, JSON, YAML 같은 형식은 텍스트 형식 직렬화이고, 아래아한글의 HWP 파일, 워드의 DOC 혹은 DOCX 파일, 이미지를 위한 JPG, PNG, GIF 같은 형식들, 오디오를 위한 WAV, MP3, OGG, AAC 같은 형식들, 영상을 위한 AVI, MOV, MP4와 같은 형식들은 이진 방식 직렬화다.

직렬화가 불가능한 데이터들도 물론 있다. 대표적인 게 포인터. 포인터는 어떤 데이터가 메모리 공간에서 차지하는 주소의 시작값을 가리키는 것이라서 저장장치나 네트워크로 데이터가 갈 때에는 의미가 없어진다. 예를 들어, 어떤 컴퓨터에서 A라는 메모리 주소에 저장된 변수 데이터가 네트워크를 타고 B 컴퓨터에 갔을 때에는 전혀 다른 주소에 저장될 것이다. 따라서 포인터 값을 전달하는 것은 아무런 의미가 없다.