위키득계정 ↗
기술

직렬화

직렬화기술
영문명
Serialization
반대 과정
역직렬화
주요 목적
저장과 데이터 교환
표현 예
JSON 같은 텍스트와 바이너리 형식
직렬화는 프로그램이 다루는 자료를 저장하거나 전송할 수 있는 연속된 표현으로 바꾸는 과정이다. 받은 표현을 다시 자료 구조로 읽는 과정은 역직렬화라고 하며, 양쪽에서 형식과 의미에 대한 약속이 필요하다.

메모리 밖으로 나가는 자료

연락처 프로그램의 이름과 전화번호는 실행 중인 프로그램 안에서 일정한 자료 구조로 관리된다. 이를 파일에 보관하거나 다른 기기로 보내려면 어떤 순서와 규칙으로 기록할지 정해야 한다. 직렬화는 이처럼 실행 중의 자료를 옮길 수 있는 표현으로 만드는 역할을 한다.

그대로 복사하는 것과의 차이

메모리에 놓인 바이트를 그대로 파일에 쓰는 것만으로 모든 객체를 복구할 수 있지는 않다. 주소값과 운영체제 자원, 다른 객체와의 연결은 원래 실행 환경에 의존할 수 있다. 어떤 상태를 기록하고 어떻게 다시 연결할지 형식과 구현에서 정해야 한다.

서로 읽을 수 있는 조건

같은 형식을 쓴다고 자료의 의미까지 자동으로 일치하는 것은 아니다. 날짜의 시간대, 숫자의 범위, 빠진 필드의 의미와 문자 인코딩도 맞아야 한다. 시간이 지나 필드가 추가되거나 바뀔 때에는 이전 자료와 새 프로그램 사이의 호환성을 고려한다.

입력을 읽을 때

역직렬화하는 입력은 신뢰할 수 있는 내부 자료라고 단정할 수 없다. 형식 검사뿐 아니라 크기와 중첩 깊이, 허용하는 자료형을 제한해야 할 수 있다. 직렬화 자체는 암호화나 권한 검사를 대신하지 않으며 비밀 정보를 포함할지 별도로 결정해야 한다.

관련 문서

JSON / XML / 문자 인코딩 / 파일 형식