TIL.31 - 직렬화, 역직렬화

김진영·2024년 6월 4일

스파르타코딩

목록 보기
31/39
post-thumbnail

json에 대해 공부하기 전에 꼭 알아야 할 것이 있다. 바로 직렬화, 역직렬화이다.

1. 직렬화란?


  • 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크 간 전송)하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다.
    오브젝트를 직렬화하는 과정은 오브젝트를 마샬링한다고도 한다.

한줄로 요약하면

직렬화는 객체를 파일의 형태 등으로 저장하거나,
통신하기 쉬운 포맷으로 변환하는 과정을 의미.

Serialization의 'Serial' 은 연쇄. 연속해서 이어지는 어떤 것을 의미하고
이런 'Serial' 이라는 단어는 한국어로 직렬이라고 한다.

직렬화의 대상인 Object는 메모리에 있고 형태가 추상적이다.
그래서 이런 Object를 string 혹은 바이트(bytes) 형태로 직렬화를 해준다.

이렇게 직렬화를 거쳐 일련의 형태를 가진 데이터를 파일로 저장하거나 클라이언트에게 전송할 수 있다.

2. 역직렬화란?


말그대로 직렬화 되어있는 데이터를 역으로 직렬화 하는 것을 의미합니다.

직렬화를 하는 과정에서 Json 형식으로 직렬화 할 지 아니면 Bytes 형식으로 할 지 정했다.
반대로 역직렬화를 할 때는 일련의 형식을 가진 데이터를 읽거나 메모리에 쓸 수 있도록 변환하는 것이다.

이런 직렬화 포맷에는 아래와 같은 형식들이 대표적이다.

  • Json
  • XML
  • CSV
  • Byte
    여기서 Json, XML, CSV는 사람이 읽을 수 있는 형태이다.
    하지만 string 형태로 저장이 되기 때문에 저장 공간의 효율성이 떨어지고, 비교적 파싱하는 시간이 오래 걸린다고 한다.

반대로 Binary 직렬화는 사람이 읽기 힘든 형태이다.
하지만 저장 공간을 효율적으로 사용할 수 있고, 비교적 파싱하는 시간이 빠르다고 한다.

3. 직렬화를 하는 이유


디스크에 저장되어 있는 데이터는 직렬화를 거치면서 파싱이 가능한 유의미한 데이터가 된다.

이런 직렬화된 데이터를 특정 대상의 컴퓨터에 전송하면,
해당 포맷에 맞게 파싱을 해서 읽거나 쓰기가 가능하다.

이런 직렬화 포맷은 특정의 포맷이 성능상 더 좋아서 사용 하는 것이 아닌,
각 산업 분야에 맞춰서 사용하고 있다.

4. 회고


팀프로젝트에서 공포 퍼즐 게임을 만들고 있는데 저장하는 기능부분을 내가 맡게 되었다. 그래서 json에 대해서 공부하고있었고 그 중에서 json저장에 필요한 직렬화, 역직렬화에 대해서 알게 되었다. 요약하자면 json형식으로 저장하려면 데이터들을 직렬화를 해야 저장할 수 있고 저장한 데이터를 불러오려면 역직렬화를 통해 다시 데이터형태로 바꾸어야 불러올 수 있다.

내가 구상하고 있는 저장형태는 퍼즐을 풀거나 키 아이템을 획득 했을 때 그 시점에 자동으로 저장되는 기능을 구현하고 싶은데 잠긴 문을 열었거나 퍼즐을 푼 상태도 저장이 되게 만들어야할탠데 감이 오지않아서 내일 마저 공부를 더 해봐야할 것 같다.

0개의 댓글