개인 공부

Protocol Buffer 사용법 - 컴파일링

Machine_웅 2023. 2. 9. 13:22
728x90
반응형

<컴파일 옵션 관련 >

 

  • java_package (file option)
    • 생성된 Java나 Kotlin 클래스에서 사용하기 위해 사용
    • .proto 파일에 java_package 옵션을 명시하지 않으면 기본 proto 패키지가 사용
    • proto 패키지는 도메인 역순 이름으로 생성되지 않기 때문에 일반적인 Java package를 생성하지 않음
    • Java나 Kotlin 코드를 생성하지 않을 경우 옵션은 무시됨
      option java_package = "com.example.foo";
  • java_outer_classname (file option)
    • 생성하기 원하는 자바 클래스 래퍼에 대한 클래스 이름을 지정
    • .proto 파일에 java_outer_classname을 명시하지 않으면 클래스 이름은 .proto 파일에 명시된 이름을 camel-case 형태로 변환 (foo_bar.proto -> FooBar.java)
    • java_multiple_files 옵션이 비활성화되면 .proto 파일에 대해 생성된 다른 모든 클래스(enum 등)가 외부 래퍼 Java 클래스 내에서 중첩된 클래스(enum 등)로 생성
    • 자바 코드를 생성하지 않을 경우 옵션은 무시됨
      option java_outer_classname = "Ponycopter";
  • java_multiple_files (file option)
    • false로 지정할 경우 오직 하나의 .java 파일이 생성되고, top-level 메시지, 서비스, enum에 대해 생성된 모든 자바 클래스(enum 등)는 outer 클래스 내에 중첩됨
    • true로 지정할 경우 위와 같은 상황에 대해 각각의 .java 파일이 생성됨
    • 기본 옵션 값은 false
    • 자바 코드를 생성하지 않을 경우 옵션은 무시됨
    • true =>   한개의 파일이 아닌 여러개의 파일 생성이됨
    • false => 한개의 파일로 묶여서 생성이 됨
option java_multiple_files = true;
  • optimize_for (file option)
    • SPEED, CODE_SIZE, LITE_RUNTIME 설정 가능하고 C++과 Java 코드 제너레이터에 적용 가능
    • SPEED(기본 값)
      • 프로토콜 버퍼 컴파일러가 메시지 타입에 대해 직렬화, 파싱, 기타 공통 옵션을 수행하며 코드를 고도로 최적화하여 생성
    • CODE_SIZE
      • 프로토콜 버퍼 컴파일러는 최소로 클래스를 생성하고 공유와 reflection 기반 코드에 의존하여 직렬화, 파싱 및 기타 다양한 작업을 구현
      • 생성된 코드는 SPEED에 비해 매우 크기가 작으나 수행시간이 느림
      • 생성된 클래스는 SPEED와 동일한 API 구현, 많은 수의 .proto 파일이 포함되어있고 빠르게 수행해야 할 필요가 없을 때 유용
    • LITE_RUNTIME
      • 프로토콜 버퍼 컴파일러는 lite runtime library를 이용해 클래스를 생성
      • lite runtime library는 full library에 비해 매우 작으나 descriptor나 reflection 같은 기능은 지원하지 않음
      • 모바일 환경에서 동작하는 앱에 유용
      • SPEED 모드에서와 같이 빠르게 구현
      • 생성된 클래스는 각 언어의 MessageLite 인터페이스만 구현하고 전체 Message 인터페이스의 메서드 하위 집합만 제공
        option optimize_for = CODE_SIZE;
  • cc_enable_arenas (file option)
    • C++ 생성 코드에 대한 arena allocation 활성화
  • objc_class_prefix (file option)
    • .proto에서 생성된 모든 Objective-C 클래스 및 열거형 앞에 Objective-C 클래스 접두사를 설정
    • 기본 값은 없음
    • Apple에서 권장하는 대로 3-5개의 대문자로 된 접두사를 사용(두 글자 접두사는 Apple에서 이미 예약하여 사용중)
  • deprecated (field option)
    • true로 설정하면 필드가 더 이상 사용되지 않음을 나타냄(새 코드에서 사용하면 안 됨)
    • 대부분의 언어에서 실제로 효과가 없고 IDE에서 컴파일러가 warning으로 알려줌
    • 필드가 다른 사람에 의해 사용되지 않고, 새 사용자가 사용하는 것을 방지하기 위해서는 필드 선언을 reserved로 바꾸는 것을 권장
      int32 old_field = 6 [deprecated = true];

 

 

https://jaime-note.tistory.com/91

 

[gRPC] Option, 클래스 생성

Option .proto 파일 내에서 여러 가지 옵션을 사용할 수 있습니다. 옵션은 선언의 전체 의미를 변경하지 않지만 특정 컨텍스트에서 처리되는 방식에 영향을 줄 수 있습니다. 사용 가능한 옵션의 전

jaime-note.tistory.com

 

https://jaime-note.tistory.com/91

 

[gRPC] Option, 클래스 생성

Option .proto 파일 내에서 여러 가지 옵션을 사용할 수 있습니다. 옵션은 선언의 전체 의미를 변경하지 않지만 특정 컨텍스트에서 처리되는 방식에 영향을 줄 수 있습니다. 사용 가능한 옵션의 전

jaime-note.tistory.com

 

그이외 도큐먼트 및 참고

 

https://protobuf.dev/reference/java/java-generated/

 

Java Generated Code Guide

This topic describes exactly what Java code the protocol buffer compiler generates for any given protocol definition.

protobuf.dev


https://github.com/protocolbuffers/protobuf/releases/tag/v21.12

 

Release Protocol Buffers v21.12 · protocolbuffers/protobuf

Python Fix broken enum ranges (#11171) Stop requiring extension fields to have a sythetic oneof (#11091) Python runtime 4.21.10 not works generated code can not load valid proto. (#11171)

github.com

 

https://iam777.tistory.com/527

 

[Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일

[Google Protobuf] For Java in Android Studio 설치 및 proto 파일 컴파일※ 관련글 Google Protobuf [Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일 [Google Protobuf] For Java in Android Studio - Gen Java 파일 Andr

iam777.tistory.com

https://iam777.tistory.com/527

 

[Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일

[Google Protobuf] For Java in Android Studio 설치 및 proto 파일 컴파일※ 관련글 Google Protobuf [Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일 [Google Protobuf] For Java in Android Studio - Gen Java 파일 Andr

iam777.tistory.com

https://naito.tistory.com/entry/JavaGoogle-Protocol-Buffer-%EC%82%AC%EC%9A%A9%EB%B2%95

 

Java/Google Protocol Buffer 사용법

Google의 Protocol Buffer 사용법 * TutorialC++ Tutorial : https://developers.google.com/protocol-buffers/docs/cpptutorialJava Tutorial : https://developers.google.com/protocol-buffers/docs/javatutorialPython Tutorial : https://developers.google.com/prot

naito.tistory.com

 

728x90
반응형