Protobuf 호환성(Compatibility) 유지하기
호환성이 유지되는 경우
package
는 타입의 이름 충돌을 방지하기 위한 namespace로 사용되므로 변경되면 호환성이 깨집니다.- 필드가 추가/삭제되는 경우 이전 버전과 새 버전은 상호 호환됩니다.
- 스키마에는 있지만 데이터에 필드가 없는 경우 기본값으로 해석됩니다.
- 데이터에는 있지만 스키마에 필드가 없는 경우 무시됩니다.
삭제된 필드에 reserved 사용하기
Protobuf는 필드 번호를 기준으로 데이터를 해석하므로 삭제된 필드 번호를 재사용하는 경우 문제가 생길 수 있습니다. 개발 측면에서는 삭제된 필드 명을 재사용하는 것으로 디버깅하기 어려운 오작동 사례를 만날 수 있습니다. 이를 방지하기 위해 reserved
를 사용하여 필드 번호를 예약할 수 있습니다.
message Foo {
reserved 2, 15, 9 to 11;
reserved "foo", "bar";
}