맨위로가기

직렬화

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

직렬화는 데이터를 전송, 저장 또는 원격 프로시저 호출 등에 사용하기 위해 데이터 구조를 일련의 바이트로 변환하는 과정이다. 아키텍처 독립성을 유지하고, 포인터 참조를 처리하기 위해 언스위즐링 및 스위즐링 단계를 포함할 수 있다. 직렬화는 캡슐화 위반, 독점 형식 사용, 비선형적 데이터 구조 처리의 어려움과 같은 단점을 가질 수 있지만, 데이터의 상태를 유지하고 전달하기 위한 간단한 I/O 인터페이스를 제공한다. 다양한 직렬화 형식(XDR, XML, JSON, YAML 등)이 있으며, 여러 프로그래밍 언어에서 객체 직렬화를 직접 지원하거나 라이브러리를 통해 지원한다. 또한, 멀티 스레드 프로그래밍에서의 순차화와 관련하여, 여러 스레드가 자원에 동시에 접근하는 것을 제어하는 데 사용된다.

2. 용도

직렬화는 다음과 같은 다양한 용도로 사용된다.



이러한 기능들이 제대로 작동하려면 아키텍처 독립성을 유지해야 한다. 예를 들어, 서로 다른 하드웨어 아키텍처에서 실행되는 컴퓨터들이 엔디안에 관계없이 직렬화된 데이터를 안정적으로 재구성할 수 있어야 한다. 아키텍처 독립적인 형식으로 데이터 구조를 직렬화하면 바이트 순서, 메모리 레이아웃, 다른 프로그래밍 언어에서 데이터 구조를 표현하는 방식의 차이로 인해 발생하는 문제를 방지할 수 있다.[5]

직렬화는 데이터 인코딩이 직렬이기 때문에, 직렬화된 데이터 구조의 일부분을 추출하려면 전체 객체를 처음부터 끝까지 읽고 재구성해야 한다. 이는 객체의 상태를 유지하고 전달하기 위한 간단하고 일반적인 입/출력(I/O) 인터페이스를 활용할 수 있게 한다는 점에서 장점으로 작용한다. 하지만 성능이 중요한 애플리케이션에서는 더 복잡하고 비선형적인 저장소 구성을 고려해야 할 수도 있다.

단일 머신에서도 포인터(컴퓨터 프로그래밍) 객체는 저장하기에 불안정할 수 있다. 포인터가 가리키는 객체가 메모리의 다른 위치로 다시 로드될 수 있기 때문이다. 이를 해결하기 위해 직렬화 과정에는 직접 포인터 참조를 이름이나 위치 기반 참조로 변환하는 '언스위즐링(unswizzling)' 단계가 포함되며, 역직렬화 과정에는 '포인터 스위즐링(pointer swizzling)' 단계가 포함된다.

직렬화와 역직렬화는 Microsoft Foundation Classes의 ''Serialize'' 함수와 같은 공통 코드에서 처리할 수 있다. 이 공통 코드는 두 작업을 동시에 수행하여 직렬화되는 객체와 이전 복사본 간의 차이점을 감지하고, 다음 감지를 위한 입력을 제공할 수 있다. 이를 차등 실행이라고 하며, 사용자 인터페이스 프로그래밍에 유용하다.

또한, 메모리상의 객체를 직렬화하여 스토리지상의 파일 등의 영구 기억 장치에 저장하는 것을 영속화라고 한다.

2. 1. 직렬화와 불투명성

직렬화는 추상 데이터 형식의 비공개 구현 세부 정보를 노출하여 불투명성을 깨뜨릴 수 있다. 모든 데이터 멤버를 직렬화하는 단순한 구현은 캡슐화를 위반할 수 있다.[5]

경쟁 업체가 호환되는 제품을 만드는 것을 막기 위해, 독점 소프트웨어 게시자는 종종 해당 프로그램의 직렬화 형식에 대한 세부 정보를 영업 비밀로 유지하는 경우가 많다. 일부는 직렬화된 데이터를 의도적으로 난독화하거나 심지어 암호화하기도 한다. 그러나 상호 운용성을 위해서는 애플리케이션이 서로의 직렬화 형식을 이해할 수 있어야 한다. 따라서 CORBA와 같은 원격 메서드 호출 아키텍처는 직렬화 형식을 자세히 정의한다.

기록 보관소도서관과 같은 많은 기관에서는 백업 아카이브, 특히 데이터베이스 덤프를 비교적 사람이 읽을 수 있는 직렬화 형식으로 저장하여 미래 보장을 하려고 노력한다.

3. 직렬화 형식

제록스 네트워크 시스템즈(Xerox Network Systems)의 Courier 기술은 1980년대 초 최초로 널리 채택된 표준에 영향을 미쳤다. 썬 마이크로시스템즈(Sun Microsystems)는 1987년에 외부 데이터 표현(XDR)을 발표했다.[6] XDR은 개방형 형식이며, [https://tools.ietf.org/html/std67 STD 67](RFC 4506)으로 표준화되었다.

1990년대 후반에는 표준 직렬화 프로토콜에 대한 대안을 제공하려는 움직임이 시작되었다. XMLSGML의 하위 집합으로, 사람이 읽을 수 있는 텍스트 기반 인코딩을 생성하는 데 사용되었다. 이러한 인코딩은 사람이 읽고 이해할 수 있거나 프로그래밍 언어에 관계없이 다른 시스템과 통신할 수 있는 영구적인 객체에 유용할 수 있다는 장점이 있다. 단점은 더 압축된 바이트 스트림 기반 인코딩을 잃는 것이지만, 이 시점에는 더 큰 저장 및 전송 용량으로 인해 파일 크기가 컴퓨팅 초기보다 덜 중요해졌다. 2000년대에는 XML이 Ajax 웹 애플리케이션에서 클라이언트와 서버 간의 비동기적 구조화된 데이터 전송에 자주 사용되었다. XML은 개방형 형식이며, [https://www.w3.org/TR/xml11/ W3C 권고안]으로 표준화되었다.

JSON은 XML의 가벼운 일반 텍스트 대안이며 웹 애플리케이션에서 클라이언트-서버 통신에도 일반적으로 사용된다. JSON은 자바스크립트 구문을 기반으로 하지만 자바스크립트와 독립적이며 다른 많은 프로그래밍 언어에서 지원된다. JSON은 개방형 형식이며 [https://tools.ietf.org/html/std90 STD 90] , [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf ECMA-404], [https://www.iso.org/standard/71616.html ISO/IEC 21778:2017]로 표준화되었다.

YAML은 JSON의 엄격한 상위 집합이며 데이터 유형 태그, 순환 데이터 구조 지원, 들여쓰기 감지 구문 및 여러 형태의 스칼라 데이터 인용과 같은 추가 기능을 포함한다. YAML은 개방형 형식이다.

속성 목록은 넥스트스텝(NeXTSTEP), GNUstep, macOS, 및 iOS 소프트웨어 프레임워크에서 직렬화에 사용된다. ''p-list''라고도 하는 ''속성 목록''은 단일 직렬화 형식을 지칭하는 것이 아니라 여러 가지 다른 변형을 지칭하며, 일부는 사람이 읽을 수 있고 일부는 이진 형식이다.

위성 데이터 및 수치 기후, 날씨 또는 해양 모델의 출력과 같은 대용량 과학 데이터 세트의 경우, HDF, netCDF 및 이전 GRIB과 같은 특정 이진 직렬화 표준이 개발되었다.

텍스트로 직렬화할 때의 형식으로는, 많은 텍스트 파일 형식 중에서도 규격으로 표준화되어 있고, 계층 구조의 표현을 지원하며, 역직렬화가 비교적 용이한 XML이나 JSON 등이 많이 사용된다. 텍스트 인코딩의 문자 집합에는 예전부터 다양한 형식이 존재하지만, 유니코드가 보급된 이후에는 UTF-8이 많이 사용된다. UTF-8에서는, ASCII 범위 내에서는 각 문자가 1바이트 이내(7비트)로 표현될 수 있기 때문에, ASCII 문자가 차지하는 비율이 높은 데이터의 경우 직렬화 후 데이터 용량을 절약할 수 있다. 또한, 바이트 단위의 인코딩이며, 엔디안의 영향을 받지 않는다는 장점도 있다. 비 ASCII 문자는 멀티바이트 문자로 표현해야 하지만, 일본어와 같은 멀티바이트 문자가 차지하는 비율이 높은 데이터의 경우에는, UTF-8보다 UTF-16이 데이터 용량을 절약할 수 있는 경우도 있다. 수치 데이터가 많은 경우에는, 바이너리 형식을 이용하면 더 많은 용량을 절약할 수 있지만, 원래의 객체를 확장한 경우에도 호환성을 유지하기 위해서는, 텍스트 형식과 비교하여 형식 설계의 난이도가 높아진다. 또한, 부동 소수점 수를 10진수 표기의 문자열로 직렬화하면 반올림 오차가 발생하여, 역직렬화 시 정보를 정확하게 복원할 수 없는 경우가 있다.

4. 프로그래밍 언어 지원

많은 객체 지향 프로그래밍 언어가 ''객체 직렬화''(또는 ''객체 보관'')를 직접 지원한다. 이는 구문 설탕 요소나 표준 인터페이스를 통해 제공된다. 이러한 언어에는 루비, 스몰토크, 파이썬, PHP, Objective-C, 델파이, 자바, .NET 계열 언어가 있다. 또한, 직렬화를 기본적으로 지원하지 않는 언어에 직렬화 지원을 추가하는 라이브러리도 존재한다.

언어설명
C, C++상위 수준의 직렬화 기능을 제공하지 않지만, 내장된 자료형POD 구조체를 바이너리 데이터로 쓰는 것을 지원한다. 사용자 정의 직렬화 함수를 작성하는 것은 보통 간단하다. 컴파일러 기반 솔루션(예: C++용 ODB ORM 시스템, C/C++용 gSOAP 툴킷)은 클래스 선언 수정 없이 직렬화 코드를 자동 생성한다. 인기 있는 직렬화 프레임워크로는 부스트 프레임워크의 Boost.Serialization[7], S11n 프레임워크[8], Cereal[9] 등이 있다. MFC 프레임워크 (Microsoft)도 직렬화 방식을 제공한다.
CFML[https://wikidocs.adobe.com/wiki/display/coldfusionen/cfwddx ] 태그를 사용하여 데이터 구조를 WDDX로 직렬화하고, [https://wikidocs.adobe.com/wiki/display/coldfusionen/serializejson SerializeJSON()] 함수를 사용하여 JSON으로 직렬화할 수 있다.
델파이컴포넌트(지속 객체) 직렬화를 위한 내장 메커니즘을 제공하며, IDE와 통합되어 있다. 컴포넌트 내용은 DFM 파일에 저장되고 즉시 다시 로드된다.
GoJSONXML 데이터의 언마샬링/마샬링을 기본적으로 지원한다.[10] YAML[11]프로토콜 버퍼를 지원하는 타사 모듈도 있다.[12] Go는 Gobs도 지원한다.[13]
하스켈ReadShow 타입 클래스의 멤버인 타입에 대해 직렬화를 지원한다. Read 타입 클래스는 문자열 표현에서 데이터를 추출하는 함수를 정의하고, Show 타입 클래스는 객체의 문자열 표현을 생성하는 show 함수를 포함한다. 컴파일러가 자동으로 적절한 함수를 생성할 수 있다. Show에 대한 자동 생성 인스턴스는 유효한 소스 코드를 생성한다.[14] [http://hackage.haskell.org/package/binary binary]와 같은 라이브러리는 이진 형식으로 고속 직렬화를 지원한다.
자바인터페이스를 구현하여 자동 직렬화를 제공한다. 인터페이스를 구현하면 클래스가 "직렬화 가능"으로 표시되고, Java는 내부적으로 직렬화를 처리한다. Serializable 인터페이스에는 직렬화 메서드가 정의되어 있지 않지만, 직렬화 가능한 클래스는 특정 메서드를 정의하여 직렬화/역직렬화 프로세스의 일부로 호출할 수 있다. 개발자는 인터페이스를 구현하여 직렬화 프로세스를 재정의할 수 있으며, 여기에는 객체의 상태를 저장하고 복원하는 두 개의 특수 메서드가 포함된다.[15] 표준 인코딩 방식은 객체의 클래스 설명자와 직렬화 가능한 필드를 바이트 스트림으로 변환한다. JDBC를 통해 Java 객체를 직렬화하여 데이터베이스에 저장할 수 있다.[16] Swing 구성 요소는 Serializable 인터페이스를 구현하지만, 다른 버전의 Java 가상 머신 간 이식성이 보장되지 않는다.
자바스크립트ECMAScript 5.1 이후,[17] 내장 객체 JSON과 그 메서드 JSON.parse()JSON.stringify()를 포함한다. JSON은 원래 자바스크립트의 하위 집합을 기반으로 하지만,[18] JSON이 유효한 자바스크립트가 아닌 경우가 있다.[19][20] JSON 관련 주요 문서 참조.
줄리아serialize() / deserialize() 모듈을 통해 직렬화를 구현한다.[21] HDF5.jl 패키지는 안정적인 대안을 제공하며,[23] 기본 직렬화 형식은 네트워크 통신에 대한 최대 성능을 위해 설계되었다.[24]
Lisp일반적으로 readprint 함수를 사용하여 직렬화할 수 있다. 예를 들어 배열 목록을 포함하는 변수 foo는 (print foo)에 의해 출력된다. (read s)를 사용하여 s라는 스트림에서 객체를 읽을 수 있다. Common Lisp를 포함한 많은 유형의 Lisp에서 프린터는 모든 유형의 데이터를 표현할 수 없다. 대신 프로그래머는 print-object에 대한 메서드를 작성할 수 있다. Lisp 코드는 읽기 구문으로 작성된다. 대부분의 언어는 코드와 데이터를 처리하기 위해 별도의 파서를 사용하지만 Lisp는 하나만 사용한다.
.NET마이크로소프트에서 설계한 여러 개의 직렬 변환기가 있다. 제3자에 의해 만들어진 직렬 변환기도 존재한다. 10개 이상의 직렬 변환기들이 [http://geekswithblogs.net/LeonidGaneline/archive/2015/05/06/serializers-in-.net.-v.2.aspx 여기][25]와 [https://aumcode.github.io/serbench 여기][26]에서 논의되고 테스트되었다.
OCaml표준 라이브러리의 Marshal 모듈[3]output_valueinput_value 함수를 통해 [마샬링/직렬화]를 제공한다. OCaml 프로그래밍은 정적으로 [타입 검사]를 하지만, Marshal 모듈을 사용하면 [타입 보장]이 깨질 수 있다. OCaml에서는 함수 또는 함수를 포함하는 데이터 구조를 [마샬링/직렬화]하기 어렵다.[3] 표준 [마샬링/직렬화] 함수는 공유를 유지하고, 순환 데이터를 처리할 수 있다.
PerlCPAN에서 사용할 수 있는 여러 Perl 모듈은 Storable, JSON::XSFreezeThaw를 포함하여 직렬화 메커니즘을 제공한다. Storable에는 Perl 데이터 구조를 직렬화하고 역직렬화하는 기능이 포함되어 있다. Storable은 파일로 직접 직렬화하는 것 외에도, 스칼라에 패킹된 데이터의 직렬화된 복사본을 반환하는 freeze 함수와, 그러한 스칼라를 역직렬화하는 thaw를 포함한다. Storable은 구조를 직렬화할 때 네트워크 안전 기능을 제공한다.
PHP원래 내장 함수인 serialize()unserialize()를 통해 직렬화를 구현했다.[27] PHP는 리소스를 제외한 모든 데이터 유형을 직렬화할 수 있다. unserialize()는 신뢰할 수 없는 데이터에 사용될 경우 위험하다.[28] 객체의 경우, 클래스 내에서 구현할 수 있는 __sleep()__wakeup() 매직 메서드가 있다. PHP 5.1부터는 객체를 위한 객체 지향 직렬화 메커니즘인 Serializable 인터페이스가 있다.[29]
프롤로그 구조는 언어의 유일한 자료 구조이며, 내장 술어 write_term/3를 통해 직렬화되고, read/1read_term/2를 통해 역직렬화될 수 있다. 결과 스트림은 압축되지 않은 텍스트이다. 술어 write_term/3은 프롤로그 ISO 표준 사양에 표준화되어 있다. 예시로, SWI-Prolog,[30] SICStus Prolog,[31] GNU Prolog의 해당 매뉴얼 페이지 참조.[32]
파이썬핵심적인 직렬화 메커니즘은 pickle 표준 라이브러리 모듈이며, 피클링[33][34][35]이라는 용어를 사용한다. 피클은 객체를 재구성하는 명령을 기록하는 스택 기반 가상 머신을 사용한다. 이는 크로스 버전 사용자 정의가 가능하지만 안전하지 않은 직렬화 형식이다. 잘못 구성되거나 악의적으로 구성된 데이터는 역직렬 변환기가 임의의 모듈을 가져오고 객체를 인스턴스화하도록 할 수 있다.[36][37] 표준 라이브러리에는 [https://docs.python.org/library/json.html json], [https://docs.python.org/library/plistlib.html plistlib], [https://docs.python.org/library/xdrlib.html xdrlib] 등의 모듈도 포함되어 있다. 객체의 [https://docs.python.org/reference/datamodel.html#object.__repr__ __repr__]이 올바른 환경에서 평가 가능하도록 권장된다. 파이썬 3에서는 cPickle 모듈이 성능을 향상시켰다.[36]
RR 객체의 ASCII 텍스트 표현을 파일 또는 연결에 쓰는 dput 함수를 가지고 있다. 표현은 dget을 사용하여 파일에서 읽을 수 있다.[39] serialize 함수는 R 객체를 연결로 직렬화하며, 출력은 16진수 형식으로 코딩된 원시 벡터이다. unserialize 함수를 사용하면 연결 또는 원시 벡터에서 객체를 읽을 수 있다.[40]
REBOL파일(save/all) 또는 string!(mold/all)로 직렬화한다. 문자열과 파일은 다형성 load 함수를 사용하여 역직렬화할 수 있다. RProtoBuf는 Protocol Buffers를 사용하여 R에서 상호 언어 데이터 직렬화를 제공한다.[41]
루비표준 모듈 [http://www.ruby-doc.org/core/classes/Marshal.html Marshal]을 포함하며, dumpload의 두 가지 메서드를 제공한다. 이 메서드는 표준 클래스 String으로 직렬화된다. 일부 객체는 직렬화할 수 없다(TypeError 예외 발생). 클래스에 사용자 지정 직렬화가 필요한 경우, _dump_load의 두 가지 메서드를 구현하여 수행할 수 있다.
Rust[https://serde.rs/ Serde]는 Rust에서 가장 널리 사용되는 직렬화 라이브러리이다.
스몰토크재귀적이지 않고 공유되지 않는 객체는 storeOn:/readFrom: 프로토콜을 사용하여 사람이 읽을 수 있는 형태로 저장하고 검색할 수 있다. storeOn: 메서드는 readFrom:을 사용하여 평가될 때 원래 객체를 다시 생성하는 Smalltalk 표현식의 텍스트를 생성한다. Squeak Smalltalk에는 storeOn:/readFrom:SmartRefStream 직렬 변환기를 기반으로 하는 바이너리 저장 형식이 있다. 또한, 번들 객체는 ImageSegments를 사용하여 저장하고 검색할 수 있다. 둘 다 "바이너리 객체 저장 프레임워크"를 제공한다. Smalltalk/X 코드는 오픈 소스이며 무료이며 다른 Smalltalk에 로드하여 서로 다른 방언 간의 객체 교환을 허용할 수 있다. 객체 직렬화는 ANSI Smalltalk 사양의 일부가 아니다.
Swift표준 라이브러리는 EncodableDecodable 프로토콜(Codable로 함께 구성됨)을 제공하며, 이를 통해 준수하는 타입의 인스턴스를 JSON, 프로퍼티 리스트 또는 기타 형식으로 직렬화하거나 역직렬화할 수 있다.[44] 저장된 프로퍼티가 또한 Decodable 또는 Encodable인 타입에 대해 이러한 프로토콜의 기본 구현을 컴파일러가 생성할 수 있다.
PowerShell내장 cmdlet Export-CliXML을 통해 직렬화를 구현한다. Export-CliXML은 .NET 객체를 직렬화하고 생성된 XML을 파일에 저장한다. 객체를 다시 생성하려면 Import-CliXML cmdlet을 사용한다. 역직렬화된 객체는 속성은 있지만 메서드는 없는 스냅샷이다. 2차원 데이터 구조는 내장 cmdlet Import-CSVExport-CSV를 사용하여 CSV 형식으로 (역)직렬화할 수도 있다.



.NET은 여러 개의 직렬 변환기를 가지고 있으며, Windows Communication Foundation(WCF)에서는 데이터 계약을 활용하여 객체의 직렬화에 관한 메타데이터를 기술함으로써 프로세스 간에 .NET 객체를 쉽게 송수신할 수 있다.[53] .NET Framework/.NET Core는 각종 속성을 사용한 수식을 통해 직렬화 제어를 지원하고,[47][48] ISerializable 인터페이스[49]를 사용하는 방법도 있지만, 직렬화 제어에서는 속성을 이용하는 방법이 우선시된다. BinaryFormatter를 사용하여 바이너리 형식으로 직렬화할 수도 있지만, 바이너리 직렬화는 보안상의 위험이 있어 권장되지 않는다.[50][51] .NET Core는 JSON 직렬화도 지원한다.[52]

자바에서는 직렬화하려는 클래스에 또는 인터페이스를 구현함으로써 해당 클래스 객체를 직렬화할 수 있다.[46]

PHP에서는 표준으로 구현되어 있으며, 직렬화는 serialize(), 역직렬화는 unserialize()를 사용한다. 객체를 직렬화하면 메서드를 제외하고 저장된다.

5. 순차화 (동시성 제어)

순차화는 주로 멀티 스레드 프로그래밍에서 사용되는 용어이다. 여러 개의 스레드가 어떤 자원에 동시에 접근해도 문제가 발생하지 않도록, 동시 접근 요청이 발생했을 때 각 스레드가 차례대로 해당 자원을 이용하도록 조정하는 것을 말한다. 순차화를 통해 프로그램은 스레드 세이프가 된다.

이는 일반적으로 해당 자원을 잠글 수 있는 하나의 스레드만 해당 자원을 사용할 수 있으며, 잠금 상태에서는 다른 스레드가 해당 자원을 잠글 수 없는 메커니즘(상호 배제)을 사용하거나, 또는 atomic 명령어를 사용한 lock-free 알고리즘을 이용함으로써 실현된다.[45] 장시간의 잠금으로 인해 처리량이 저하되는 것을 피하기 위해 데이터나 요청을 일단 큐에 넣고 순차적으로 꺼내어 처리(지연 실행)함으로써 처리량을 개선하는 경우도 있지만, 여러 스레드에서 공유되는 큐 자체의 조작은 역시 상호 배제 제어가 필요하다.

그 외, 여러 프로세스가 동일한 자원(파일 등)에 접근하는 경우에도 문제가 발생하지 않도록, 마찬가지로 어떤 형태의 순차화가 필요하다.

6. 직렬화의 단점

직렬화는 잠재적으로 개인적인 구현 세부 사항을 노출함으로써 추상 자료형의 불투명성을 깨뜨릴 수 있다. 모든 데이터 멤버를 직렬화하는 단순한 구현은 캡슐화를 위반할 수 있다.[5]

경쟁사가 호환 제품을 만드는 것을 막기 위해, 독점 소프트웨어 발행자는 종종 해당 프로그램의 직렬화 형식에 대한 세부 정보를 영업 비밀로 유지한다. 일부는 의도적으로 직렬화된 데이터를 난독화하거나 심지어 암호화하기도 한다. 그러나 상호 운용성을 위해서는 애플리케이션이 서로의 직렬화 형식을 이해할 수 있어야 한다. 따라서 CORBA와 같이 원격 메서드 호출 아키텍처는 직렬화 형식을 상세하게 정의한다.

데이터베이스 덤프를 미래 보장하기 위해 기록 보관소와 도서관과 같은 많은 기관에서는 비교적 사람이 읽을 수 있는 직렬화 형식으로 백업 아카이브를 저장하려 한다.

참조

[1] 웹사이트 C++ FAQ: "What's This "Serialization" Thing All About?" http://www.parashift[...]
[2] 웹사이트 Module: Marshal (Ruby 3.0.2) https://ruby-doc.org[...] 2021-07-25
[3] 웹사이트 Marshal https://ocaml.org/ap[...] 2021-07-25
[4] 웹사이트 Python 3.9.6 documentation - Python object serialization —pickle https://docs.python.[...]
[5] 웹사이트 Safe Serialization Under Mutual Suspicion http://erights.org/d[...]
[6] 간행물 XDR: External Data Representation Standard http://tools.ietf.or[...] Network Working Group 2011-07-11
[7] 웹사이트 Serialization http://www.boost.org[...]
[8] 웹사이트 s11n.net: object serialization/persistence in C++ http://s11n.net/
[9] 웹사이트 cereal Docs - Main https://uscilab.gith[...]
[10] 웹사이트 Package encoding https://pkg.go.dev/e[...] 2021-07-12
[11] 웹사이트 GitHub - YAML support for the Go language https://github.com/g[...] 2021-07-25
[12] 웹사이트 proto · pkg.go.dev https://pkg.go.dev/g[...] 2021-06-22
[13] 웹사이트 gob package - encoding/gob - pkg.go.dev https://pkg.go.dev/e[...] 2022-03-04
[14] 웹사이트 Text.Show Documentation http://hackage.haske[...] 2014-01-15
[15] 서적 "Effective Java: Programming Language Guide" Addison-Wesley
[16] 웹사이트 Ask TOM "Serializing Java Objects into the database (and ge..." https://asktom.oracl[...]
[17] 웹사이트 JSON https://developer.mo[...] 2018-03-22
[18] 웹사이트 JSON http://www.json.org/ 2018-03-22
[19] 웹사이트 JSON: The JavaScript subset that isn't http://timelessrepo.[...] The timeless repository 2016-09-23
[20] 웹사이트 TC39 Proposal: Subsume JSON https://tc39.github.[...] ECMA TC39 committee 2018-05-22
[21] 웹사이트 Serialization https://docs.juliala[...] 2021-07-25
[22] 웹사이트 faster and more compact serialization of symbols and strings · JuliaLang/julia@bb67ff2 https://github.com/J[...]
[23] 웹사이트 HDF5.jl: Saving and loading data in the HDF5 file format https://github.com/J[...] 2017-08-20
[24] 웹사이트 Julia: how stable are serialize() / deserialize() https://stackoverflo[...] 2014
[25] 웹사이트 .NET Serializers http://geekswithblog[...]
[26] 웹사이트 SERBENCH by aumcode https://aumcode.gith[...]
[27] 웹사이트 PHP: Object Serialization - Manual http://ca.php.net/ma[...]
[28] 웹사이트 Shocking News in PHP Exploitation http://www.suspekt.o[...] 2009-11-28
[29] 웹사이트 PHP: Serializable - Manual http://www.php.net/m[...]
[30] 웹사이트 "Term reading and writing" https://www.swi-prol[...]
[31] 웹사이트 "write_term/[2,3]" https://sicstus.sics[...]
[32] 웹사이트 "Term input/output" http://gprolog.org/m[...]
[33] 논문 A Value Transmission Method for Abstract Data Types http://cs.brown.edu/[...] 1982-10
[34] 서적 Proceedings of the eleventh ACM Symposium on Operating systems principles - SOSP '87 1987-11
[35] 웹사이트 Flattening Python Objects http://legacy.python[...] Python Software Foundation 2017-04-06
[36] 웹사이트 11.1. pickle — Python object serialization — Python 2.7.14rc1 documentation https://docs.python.[...]
[37] 웹사이트 pickle — Python object serialization — Python v3.0.1 documentation https://docs.python.[...]
[38] 웹사이트 What's New In Python 3.0 — Python v3.1.5 documentation https://docs.python.[...]
[39] 문서 R manual http://stat.ethz.ch/[...]
[40] 문서 R manual http://stat.ethz.ch/[...]
[41] 간행물 RProtoBuf: Efficient Cross-Language Data Serialization in R
[42] 웹사이트 MinneStore version 2 http://minnestore.so[...]
[43] 웹사이트 What's new http://www.mars.dti.[...] 2010-01-23
[44] 웹사이트 Swift Archival & Serialization https://github.com/a[...] 2018-12-02
[45] 문서 CON09-C. ロックフリープログラミングの手法を使うときは ABA 問題を避ける https://www.jpcert.o[...]
[46] 서적 Javaオブジェクト直列化仕様 https://docs.oracle.[...] オラクル (企業) 2007-12-08
[47] 문서 カスタムのシリアル化 | Microsoft Docs https://docs.microso[...]
[48] 문서 属性を使用した XML シリアル化の制御 | Microsoft Docs https://docs.microso[...]
[49] 문서 ISerializable Interface (System.Runtime.Serialization) | Microsoft Docs https://docs.microso[...]
[50] 문서 バイナリ シリアル化 | Microsoft Docs https://docs.microso[...]
[51] 문서 BinaryFormatter セキュリティ ガイド | Microsoft Docs https://docs.microso[...]
[52] 문서 C# を使用した JSON のシリアル化と逆シリアル化 - .NET | Microsoft Docs https://docs.microso[...]
[53] 문서 データ コントラクトの使用 - WCF | Microsoft Docs https://docs.microso[...]
[54] 서적 PHP: オブジェクトのシリアライズ - Manual https://www.php.net/[...] PHP Group 2020-08-27
[55] 웹인용 C++ FAQ: "What's this "serialization" thing all about?" http://www.parashift[...]
[56] 문서 How to marshal an object to a remote server by value by using Visual Basic 2005 or Visual Basic .NET http://support.micro[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com