Serialization - 직렬화

처음 사용한 것은 Google Calendar와 Outlook을 동기화 하는 프로그램을 만들 때였다. 그땐 아마 Marshal이 정확히 무엇인지 모른채 그저 내 프로그램에서 권한을 받기 위해 Outlook과 통신하는 프로그램 간 통신방법으로만 생각했다. 😅

SMSECO를 만들 때 이전의 C 서버들을 사용했던 것과 달리 모두 C#으로 만들어서 나는 상대가 socket을 몰라도 나와 통신할 수 있기를 원했다.
그 과정에서 직렬화에 대해서 더 알게 되었고 XML직렬화를 구현한 라이브러리를 전달하여 내 서버와 통신하도록 했다. 👍

판교 IBS 프로젝트는 다시 서버가 C로 구축되었다. C의 struct를 그대로 사용한 규격을 사용했는데 C#에서 그대로 구현하려면 Byte 배열에 고전적인 방식으로 방식으로 하나씩 채워 넣어야했다. 연동해야 할 서버가 하나도 아니었고 전문도 수십 개인데 그런식으로 구현하고 싶지 않았다. 무엇보다 나는 SMSECO와 같이 Socket을 몰라도 구현하게 하고 싶었고 상속관계를 구현하여 중복을 피하고 싶었다. 결국 나는 Type의 정보를 읽어오는 Type Reflection을 알아내어 Annotation을 달고 상속해서 자동으로 Instance를 Byte 배열로 만드는 Framework를 만들어냈다. 😲

이 구조는 역시 GTPClient(KT Genome Cloud Protocol)를 구현할 때도 똑같이 사용되었다. Java였기 때문에 C#의 특성을 거의 그대로 사용할 수 있는 덕이었다. 😎

SKT O2O SDK를 만들 때도 고전적인 JNI가 마음에 안들어서 프로세스간 통신에 관한 키워드로 검색해서 AIDL을 적용했고 이 때는 xml대신 json을 사용해서 gson이라는 라이브러리를 적용했다.

iOS앱을 개발할 때는 Codable 덕에 이전과 같은 과정을 덜었는데(아마 서버가 또 C였으면...). 계속 이런식으로 전문을 객체화해서 사용하려는 습관은 계속되었다. 그리고 이제는 JSON을 알게 되었으니 XML을 절대 사용하고 싶지않다. XML쓰라고 하면...(돔황챠) 😱

하나의 언어에서 깊숙하게 고민한 경험이 있으면 다른 언어를 할 때 새로운 시각이 생긴다. 여기는 그런게 없나 여기는 없으니 만들어 볼까?

그것이 나의 일이 아니더라도 옆에서 키워드 정도는 던져줄 수 있게 된 이유가 아닐까(그냥 오지랖 일지도 🤣 )

#serialize #serialization #직렬화 #socket

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 2월 14일 오전 6:25

댓글 0