본문 바로가기
programming/TroubleShootInG

직렬화 역직렬화 뜻과 사용하는 이유 데이터들을 나열하고 분리한다.

by 개코 - 개발과 코딩 2024. 4. 19.

직렬화 역직렬화는 동일하지 않은 데이터를 동일하게 만들어 나열하거나 분리하는 것을 말한다. 영어로 직렬화는 selialize 역직렬화는 deserialize 이다. 서로 다른 기기들의 데이터통신을 위해 데이터를 통일할 필요가 있는데, 이 때 직렬화와 역직렬화를 사용한다. 직렬화는 데이터를 동일하게 만들어 나열하는 것을 의미하고, 역직렬화는 직렬화된 데이터를 사용하기 위해 데이터를 변환하는 것을 의미한다.

직렬화 역직렬화 / 데이터 변환

직렬화 역직렬화 뜻과 사용하는 이유

지금의 프로그램 개발은 과거와는 다르게 http 또는 https 를 사용한다.
과거의 로컬기반 프로그램보다는 인터넷 통신 기반의 애플리케이션을 만들게 되는 것을 의미한다.
통신을 할 때 필요한 것은 데이터의 보내기 받기 정도겠지만, 이것을 도와주는 라이브러리는 많다.
개발자는 단순히 통신을 위한 데이터를 사용하면 그 뿐이다.
여기서 우리는 직렬화, 역직렬화란 단어를 보게 된다.
직렬화는 영어로 serializaion, 역직렬화는 deserialization 이라 한다.
개발자들은 이런 단어보다는 샘플코드 하나에 관심이 있을 것이다.
하지만, 어떤 기술을 익히고 찾을 때 명사 하나 의미 정도는 알아두면 검색이 편하다.

단어의 뜻

일단 단어의 표현을 보자.
직렬화는 serializaion 이고, 역직렬화는 deserialization 이다.
영어로 보나, 한글로 보나 어렵기는 마찬가지다.
영어사전을 찾아보자.

가장 쉬운 단어인 serialize가 눈에 뛴다.
이 뜻은 어떤 내용을 연속극 또는 연재 형식으로 연속적으로 표현하고 방송하는 것을 말하거나 전기회로의 직렬을 의미한다.
연속적으로 연결되어 나열된 어떤 것 또는 내용이란 것을 느낌적으로 알 수 있다.
그렇다면 느낌적으로 직렬화 ( serialization )와 역직렬화 ( deserialization ) 이란 단어의 뜻을 알 수 있다.
서로 공통되지 않는 독립적인 어떤 것들을 동일한 특성으로 연관지어 나열된 것을 직렬화 로 표현할 수 있다.
공통된 특성들이 나열되어 있는 것을 세세하게 분해하는 과정을 역직렬화로 표현할 수 있다.
이것을 IT 프로그래밍적으로 표현하면 다음과 같다.

  • 직렬화 / serialization
    서로 같지 않은 데이터들을 동일한 데이터로 구성하고 나열한 것.
  • 역직렬화 / deserialization
    동일하게 나열된 데이터들을 원래의 데이터 형태로 분리하고 변환한 것.

자주 사용되는 json

json은 문자열기반의 통신을 위한 데이터객체이반이다.
키와 값 ( key-value ) 형태로 구성되어 있으며, 이기종간 데이터 통신에 효과적이다.
데이터 객체를 전송하고 받기도 할 수 있지만, 이런 경우 OS가 다르거나 프로그램언어가 다른 경우 데이터를 동일하게 맞춰야 하는 단점이 있다.
json은 문자열 기반이며, 문자열로 데이터를 변환한 후 전송하면 받는 쪽은 OS 또는 프로그램언어가 달라도 데이터를 수신받을 수 있다.
여기서 메뉴얼을 살펴보면 직렬화 ( serializaion ) , 역직렬화 ( deserializaion ) 이란 단어가 나온다.
데이터를 전송하는 곳은 전송할 데이터를 key-value 형태의 문자열로 만드는 직렬화 작업을 하고 데이터를 전송한다.
데이터를 수신받을 곳은 문자열로 구성된 key-value 문자열을 받고 역직렬화 작업을 하고 데이터를 가공하고 사용한다.

json 을 통한 이해

직렬화와 역직렬화에 대한 설명은 json 데이터형태를 살펴보면 된다.
C#, 자바, 자바스크립트 등 개발자를 위한 프로그램언어가 다양해지고, 사용법이 단순화되고 있지만, json은 데이터 전송을 위한 훌륭한 형태이다.
이를 쉽게 보기 위해 인터넷 브라우저의 개발자모드(F12) 의 콘솔에서 확인해 본다.

직렬화 ( Serialization )

직렬화란 단어를 찾아보면 느낌만이 오는데, 관련없는 것들을 연속적인 어떤 것으로 나열하는 느낌을 준다.
쉽게 생각하면 드라마를 예로 들 수 있다.
전혀 관련없을 것 같은 캐릭터들이 어떤 사건으로 연관이 되어 드라마 시리즈가 된다.
이것을 IT 적으로 직렬화로 표현하면 다음과 같다.
전혀 다른 데이터들을 하나의 나열된 데이터로 만드는 것을 의미한다.
이렇게 설명해도 애매해 진다.
직관적으로 자바스크립트의 json 직렬화를 예로 들면 다음과 같다.

JSON.stringify(json_object);

위의 코드는 자바스크립트를 이용해 json 객체를 json 문자열로 바꾸는 코드이다.
json 객체에 들어가는 key와 value 들은 숫자가 될수도 문자열이 될 수도 있다. null 이 들어갈 수도 있는데 null 또한 데이터적으로는 데이터 덩어리인 객체이다.
전혀 다른 데이터들이 JSON.stringify 메서드를 통해 모든 데이터가 문자열로 변환이 되고, 통일화되어 문자열이란 데이터로 나열이 된다.
즉, 모든 key와 value 를 문자열로 변경되며 동일한 데이터로 변경되어 나열되어 직렬화가 된다.

역직렬화 ( DeSerialization)

이제 역직렬화를 살펴보자. 직렬화의 반대라고 생각하면 된다.
바로 IT적으로 접근하면 내용은 다음과 같다.
동일한 데이터로 나열된 데이터를 실제로 사용하기 위해 원래의 데이터 형태로 바꾸는 역할을 한다.
무슨 의미냐.
위의 코드에서 json 객체에 들어간 데이터는 JSON.stringify 메서드를 통해 직렬화되어 모든 데이터가 문자열이 되었다.
이 데이터를 역직렬화하면 문자열은 문자열의 형태로, 숫자는 숫자 형태로 바꾸는 작업을 할 수 있는데, 이것이 역직렬화이다.
자바스크립트에서 역직렬화 메서드는 다음과 같다.

JSON.parse(json_text);

위의 코드는 직렬화된 json 문자열을 json 객체로 바꾸는 역할을 하며, 이 작업을 역직렬화한다.

직렬화와 역직렬화 사용 이유

그럼 이런 데이터를 직렬화, 역직렬화하여 사용하는 이유가 무엇일까?
모든 프로그램은 어떤 형태든 통신이 가능하고, 송신과 수신이 가능하다.
데이터 송수신을 위한 프로토콜은 여러가지가 있고, 지금은 http 또는 https 를 많이 사용하며, ftp 도 그렇다.
이외에도 다른 통신용 프로토콜은 많다.
현재 가장 많이 사용되는 통신 프로토콜은 http ( https ) 이며, 사용하기 쉽기에 웹이든, 앱이든 가능하다.
이제는 공기같은 존재가 된 http 지만, 데이터를 송신하고 수신하는데 데이터의 형태는 여전히 이슈거리가 되지만 이것은 json 이 해결해 주었다.
이기종인 서로 다른 하드웨어에서 데이터를 송수신할 때 객체형태로 전송하면 처리방식 등의 한두가지 문제로 잘 되지 않지만 http 프로토콜을 사용해 json 문자열로 전송하면 수신받는 어떤 장치든 가능하다.
답이 나왔다.
지금의 IT 기종은 과거에 비해 많고 프로그램 언어도 많고, 서버의 종류도 많다.
그만큼 여러가지 종류의 하드웨어들은 그들만의 운영체제 또는 프로그램을 이용해 통신을 하게 될 것이다.
문자열은 모든 기종에서 호환 가능한 데이터형태이며, 객체이기도 하다.
json 은 데이터를 key와 value 형태로 구성하여 데이터 형태를 꾸밀 수 있다.
그렇다면 데이터 형태를 json 으로 꾸미고 문자열로 직렬화하여 통신을 하면 서로 다른 어떤 기기든 데이터 송수신이 가능할 것이다.
쉽게 말해.
json 으로 구조화된 데이터를 여기저기에 보내기 받기 하며 사용하겠다는 목적이다.

반응형

댓글