클라이언트 개발자로서 Data serialization에 대한 생각

이 글은 기술에 대한 깊이 있는 이야기를 하고자 한 것이 아니라 모바일 개발자로써 깊이 없이 개발해왔던 지난 날들을 생각하며 몇자 남기는 정도의 흔적이라고 생각해주면 좋겠다.

데이터 시리얼라이즈는 이기종 간에 통신을 위해 사용되거나, 객체를 저장할 때 사용한다. 특별히 iOS 클라이언트 개발자는 객체의 인스턴트를 저장할 때 사용할 것이다.

오늘날 iOS 프로젝트에서 보편적으로 JSON 데이터 포멧으로 http 프로토콜을 사용하여 통신을 하고 있을 것이다. http 프로토콜은 스트링 프로토콜로써 사용하기 비교적 쉬운 방면에 뛰어난 성능을 요구하는 데이터 통신에서는 무거운 성능 이슈로 비추하고 있는 것이 통념적이다. 보다 빠르고 쉽게 이기종 간의 환경에서 데이터를 주고 받을 때 데이터 시리얼라이즈를 사용하여 통신을 하는데 이에 대해서 간략하게 적어본다.

데이터 통신은 기본적으로 패킷이라는 단위로 송수신을 한다. 대부분의 클라이언트 개발자는 패킷 단위의 개념까지 고려해 가면서 통신 코드를 짜고 있지 않을 것으로 여겨진다. 적어도 나는 그랬다. 아무 개념과 고민 없이 서버에서 제공하는 API를 호출 할 때면 서버팀과 약속한 데이터 포멧에 맞추어 JSON 스트링을 만들었고 이것을 NSURLRequest 같은 객체에 실어서 보내기만 했기 때문에, 패킷이 어떻게 나눠져서 전달되게 되는지 혹은 그 패킷의 모습에는 관심이 없었다. 이 말은 현재 개발환경에서 클라이언트 개발자로써 데이터 통신부분에 대하여 큰 고민은 거의 하지 않아되 되는 정도의 진입장벽인 것이다.

하지만 서버 개발자들은 고민을 할 것으로 여겨진다. 회사는 비용절감의 측면에서 더욱 낮은 코스트로 같은 기능을 구현하기 원할 것이고, 이를 실현하기 위해 여러가지 것을 고민하고 있을 것이다. 데이터 시리얼라이즈는 그런 측면에서 중요한 부분을 차지한다. 효율적이고 넒리 사용되기 쉬운 데이터 시리얼라이즈를 위해서 여러 회사에서 자신들이 만든 프로토콜을 대중이 사용해주길 바라고 있다. ProtocolBuffer는 구글에서, Thrift는 페이스북에서 시작하여 지금은 오픈소스로 발전하여 많은 프로젝트에서 각광을 받고 있다.

객체를 데이터 시리얼라이즈를 하게 되면 바이트 배열에 원하는 데이터 스키마에 맞주어 결과물을 만들게 된다. 수신하는 쪽이나 송신하는 쪽에서 스키마에 대한 내용을 알고 있다면, decode하는 과정이 JSON과 같은 텍스트 기반의 인풋을 스트링 파싱하는 것보다 성능이 뛰어나다. 뿐만 아니라 패킷 사이즈가 몇배 이상으로 작아져 보다 뛰어난 성능을 가지고 올 수 있는 장점 때문에 데이터 시리얼라이즈에 대한 성능개선이 주목을 받고 있는 것이다.

분명 각자의 프로젝트 도메인에 가장 알맞는 데이터 타입과 통신 프로토콜을 사용하는 것이 정답일 것이다. 하지만 어떤 옵션이 있는지 알아둬어야 더 깊이 있는 개발자가 될 수 있다고 생각되어지며, 만약 자신의 프로젝트에서 HTTP 기반으로 JSON을 사용하고 있다면 왜 그 방식을 선택하게 되었는지 why에 대한 고민을 했을 때 비로써 멋진 개발자로 거듭날 수 있지 않을까 생각해본다.

Leave a Comment.