더북(TheBook)

다음과 같이 바이너리 형식으로도 메타데이터를 포함시킬 수 있습니다.

0x0001  |  0x01  |  0x0005  |  0x0023  |  0x0046  |  0x0001
^ Action
         ^ BuyItem
                  ^ Type
                             ^ Sword
                                        ^ Amount
                                                   ^ 1

메타데이터를 포함시키면 데이터 통신량이 많아지고, 해커에게도 더 쉽게 노출된다는 단점이 있습니다. 그럼에도 메타데이터를 이용하면 하위 호환성 측면에서 유리합니다. 예를 들어 두 프로세스가 서로 버전이 다르더라도 통신하는 프로그램을 쉽게 만들 수 있습니다.

“아이템을 사라.”라는 의미의 메시지가 있다고 가정했을 때 버전 1과 버전 2 구조가 다르다고 합시다. 메타데이터가 없으면 어떻게 될까요? 버전 1의 프로세스는 버전 2의 프로세스와 대화하기가 어렵습니다. 하지만 메타데이터가 있으면 두 버전이 서로 달라도 메시지를 받는 쪽에서 일부 필드를 이용하여 정확한 정보를 얻을 수 있습니다.

예를 들어 버전 1에서는 “종류 OO의 아이템을 사라.”가 있습니다. 그런데 버전 2에서는 “종류 OO의 아이템을 XX개 사라.”입니다. 서버는 버전 2로 구동되고 있습니다. 그런데 클라이언트는 버전 1도 있고 버전 2도 있습니다. 이러한 상황에서 어떻게 호환성 문제를 풀까요?

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.