Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

Golang(Go) protobuf

GOLANG, 20234 min read

mac 에서 protobuf 설치

https://github.com/protocolbuffers/protobuf/releases 에서 최신 버전을 확인 할 수 있음

wget https://github.com/protocolbuffers/protobuf/releases/download/v24.0/protoc-24.0-osx-x86_64.zipmkdir protobuf unzip protoc-24.0-osx-x86_64.zip -d ~/protobufecho 'export PATH="$PATH:$HOME/protobuf/bin"' >> ~/.zshenvsource ~/.zshenvprotoc --version

protobuf 런타임 설치

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

(트러블슈팅)protoc-gen-go-grpc: program not found or is not executable

he missing plugin has been implemented at https://github.com/grpc/grpc-go. go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

프로토 파일 컴파일

protoc testProtobuf/api/v1/log.proto --go_out=. --go_opt=paths=source_relative --proto_path=.

protoc: Protocol Buffers 파일을 컴파일하는 명령어입니다.
testProtobuf/api/v1/log.proto: 컴파일할 Protocol Buffers 파일의 경로와 이름입니다. 이 경우에는 log.proto 파일이 testProtobuf/api/v1/ 폴더에 있다고 가정합니다.
--go_out : Protocol Buffers 파일을 컴파일하여 Go 언어의 서비스 및 메시지 유형과 관련된 코드를 생성하는 데 사용
--go_out=. --go_opt=paths=source_relative:
이 부분은 컴파일러에 대한 옵션을 설정하는 부분입니다.
여기서는 Go 언어용 코드를 출력하기 위해 --go_out 옵션을 사용하고,
--go_opt=paths=source_relative 옵션은 생성된 Go 코드의 import 경로를 상대 경로로 만들도록 지정합니다.
--proto_path=.: 이 옵션은 프로토콜 파일을 찾을 경로를 지정합니다. 여기서는 현재 디렉토리(.)를 기준으로 프로토콜 파일을 찾을 것입니다.
--go-grpc_out
이 옵션은 Protocol Buffers 파일을 컴파일하여 gRPC 서비스 관련 Go 언어 코드를 생성하는 데 사용
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
testProtobuf/api/v1/log.proto

go mod tidy

proto 파일을 pb.go 파일로 컴파일 후

go mod 에 module 명을 제대로 쓰고 github 에 push 한다 그후에 꼭 releases 에 새로운 태그를 추가해야 한다

버전 관리와 호환성: 릴리즈를 추가하여 태그를 지정하는 것은 버전 관리와 호환성을 위한 중요한 단계입니다. 새로운 버전을 추가할 때마다 변경 내용과 업데이트된 기능, 버그 수정 등을 명확하게 기록하는 것이 도움이 됩니다. 다른 프로젝트가 새로운 버전을 사용할 때 이러한 정보를 통해 어떤 변화가 있는지 파악하고, 필요한 경우 이를 적용할 수 있습니다.
의존성 관리: Go 모듈은 각 패키지의 버전과 의존성을 관리하는 시스템입니다. 릴리즈를 추가하면 다른 프로젝트에서 해당 패키지를 특정 버전으로 가져올 수 있게 됩니다. 이를 통해 모듈 간의 의존성 충돌을 방지하고 안정적인 빌드와 배포가 가능해집니다.
문서화와 편의성: 릴리즈와 버전 태그를 통해 프로젝트에 대한 문서화와 사용법을 제공할 수 있습니다. 사용자들이 프로젝트를 쉽게 이해하고 적용할 수 있도록 도움을 줄 수 있습니다.

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

© 2024 by GwiyeomGo Tech Blog. All rights reserved.