티스토리 뷰

  작년에 프로젝트를 하다가 Google의 ProtoBuf라는 것이 있다는 것을 알게 되었는데 이 때는 그냥 넘어가버렸다. 근데 최근 리버싱을 할 때 마다 보이는 것 같아서 이 참에 정리해보게 되었다.


ProtoBuf 란?


  전송하기 위한 저장하려고 하는 데이터 구조를 유연하고 효율적으로 작성하고 파싱할 수 있도록 지원하는 자동화된 솔루션이다. Json이나 XML을 생각하면 이해가 쉬워지는데, 이것들과는 조금 다르다. ProtoBuf는 데이터 구조를 .proto라는 파일로 작성하면, 이를 컴파일해서 C++/C#/Python 등의 언어 코드 형태로 변환이 가능하고, 변환된 언어 형태로 모듈까지 지원해서 데이터 구조를 전송하고 받아 읽을 수 있게 Serialize / Deserialize도 해준다.


  C언어로 예를 들어 구조체를 정의하고, 이를 소켓을 통해 전송할 수 있게 Serialize(전송할 수 있도록 변환)하고, 변환된 데이터를 받은 후 Deserialize(파싱해서 다시 구조체의 형태로 저장) 하던 과정이 있다면, 이를 직접 코드로 다 작성해야 한다. 하지만 ProtoBuf는 데이터 구조만 정의하면 이 과정은 전부 지원해준다.



설치 방법(https://github.com/protocolbuffers/protobuf)

- Protocol Compiler 설치 : .proto 파일을 언어 코드 형태로 변환하기 위한 컴파일러

- ProtoBuf Runtime 설치 : 컴파일러로 변환된 언어 코드를 지원하기 위한 모듈

  • C++로 개발하고자 하는 경우 : Protocol Compiler 설치의 링크에 설치 과정이 포함되어 있음
  • C++ 이외의 언어로 개발하고자 하는 경우 : https://github.com/protocolbuffers/protobuf#protobuf-runtime-installation에서 지원하는 언어의 Source를 클릭 (OS 환경에서 해당 언어를 지원하는지 확인!)
    ※ Python은 pip install protobuf 를 해도 설치됨


사용방법(https://sites.google.com/site/jnjnote/home/google-protocol-buffers/protocol-buffer-basics-c)

  1. 데이터 구조를 .proto 파일로 작성
  2. Protocol Compiler인 protoc를 실행해서 .proto 파일을 특정 언어 코드로 컴파일
  3. 컴파일된 언어 코드를 include 또는 import
  4. 컴파일된 코드에서 API를 가져다 사용 (모듈 이름은 url 링크의 The Protocol Buffer API 부분을 보면 됨)


Protocol Format 작성 방법(예제는 github,/com/protocolbuffers/protobuf/example/addressbook.proto)

  • package는 데이터 구조의 충돌 방지를 위해 어떤 패키지인지를 나타내기 위해 사용 (C++의 namespace)
  • message는 해당 이름의 데이터 구조를 나타냄 (C++의 struct 또는 class)
  • enum은 지정된 타입을 열거하기 위해 사용 (C의 enum)
  • 필드의 타입으로는 bool, int32, float, double, string 이 있음
  • required, optional, repeated는 modifier(수식어)라고 하는데, 해당 필드가 반드시 필요한지와 선택인지 또는 반복되는지를 나타내기 위해 사용함
    ※ proto3에서 required와 optional은 사라졌다고 함.
  • default는 값이 지정되지 않은 경우, 기본으로 설정될 타입을 나타냄
  • 각 필드의 숫자 값은 필드의 값이 아니고, 고유한 식별 태그로써 사용됨


사용 예제(https://github.com/protocolbuffers/protobuf/tree/master/examples) : 딱히 생각나는게 없으므로, github의 example을 그대로 가져옴...



참고


'Programming > 기타' 카테고리의 다른 글

[git] google gitiles 사용  (0) 2018.10.04
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31