marshal / unmarshal – encode / decode에 대한 go의 개념들
Marshal 이란?
구조체 또는 객체의 데이터를 json으로 byte[]로 만드는 것이 json.Marshal의 역할입니다. 여기까지는 그냥 string이며 http상에서는 문서로써 바로 전달이 가능하지요. http상에서는 모든게 문서이니깐요 🙂
(marshalling의 원래의미 – 군대에서 준비태세를 갖추는것을 말하는 것인데, 네트워크-전쟁으로 나아가기 전에 어떤 포멧- 무기로 싸울지 준비태세를 갖추는 것으로 이해하면 됩니다)
Serialization 이란?
하지만 일정한 크기로 잘게 나누어서 물 흐르듯이 계속 보내기 위해서는 stream 형태로 전달할 필요가 있습니다. node.js가 서버 사이드 언어이므로 최상위 객체 EventEmitter바로 밑에 stream 으로 흐르게 딱 박혀있습니다 (왜 갑자기 node.js 이야기를 하냐면 stream이 그만큼 서버 사이트 프로그래밍에 중요하다는 의미이고 node.js 도 stream 형태로 데이터를 전송하는 것이 기본 골격이라는 의미입니다)
golang에서는 Encode (Serialization) 라 불러주세요
golang에서는 serialization, 즉 byte[] 데이터를 stream화 하는 녀석의 이름이 encode라고 부르네요.

json.Marshal , Encode 의 개념도
mongodb가 혜성처럼 등장해 많은 사랑을 받은 이유가 여러가지 있다. 가장 큰 덕은 모바일의 폭발적인 성장이지만, 개발자에게는..
- auto-sharding
- schemaless + json 데이터 저장
- 자체적으로 가지고 있는 master-slave high availability 기능
정도 되지 않을까 생각한다.
sharding이라는 것은 꽤 귀찮은 작업으로 어떻게 데이터를 분배해야 할지 많은 고민을 해야 되는데, 굳이 크게 고민하지 않고 auto-sharding을 쓸수 있는 적당한 규모의 프로젝트라면 마다할 필요가 없다.
또한 High Availiability를 자체적으로 지원을 하는데
1) 별도의 watcher인 arbiter 를 셋업하여 master-slave를 감시하는 방법
2) watcher없이 master-slave가 서로 heartbeat 메세지를 보내고 문제를 감지해 failover를 처리하는 방법
이렇게 두가지를 지원한다. 개발자에게는 야호하고 소리를 지를수 있는 좋은기능! (단 죽은 master를 어떻게 살리지는 개발자 여러분의 몫 – 좋은 방법이 있으면 공유를…)