Jika kamu sedang memulai proyek dengan gRPC, maka langkah pertama yang wajib kamu kuasai adalah cara menggunakan Protocol Buffers, atau yang lebih sering disingkat protobuf. Ia bukan hanya format serialisasi data biasa, tetapi menjadi jantung komunikasi antar komponen dalam ekosistem gRPC.
Artikel ini akan memandu kamu untuk memahami apa itu protobuf, bagaimana strukturnya, hingga bagaimana mengonversinya menjadi kode Go yang siap digunakan. Semua disajikan dari sudut pandang praktikal dan produksi, bukan sekadar hello world.
Apa Itu Protocol Buffers?
Protocol Buffers adalah sebuah format serialisasi data yang ringan, cepat, dan efisien yang dikembangkan oleh Google. Ia sangat cocok digunakan untuk komunikasi antar layanan (inter-service communication), terutama dalam arsitektur microservices modern yang menuntut efisiensi tinggi.
Jika kamu pernah menggunakan JSON atau XML sebagai format pertukaran data, protobuf menawarkan pendekatan yang berbeda: biner, strongly typed, dan schema-first.
Kenapa Tidak JSON?
Gampangnya begini: JSON bagus untuk komunikasi antar manusia dan debugging cepat. Tapi untuk komunikasi antar mesin—yang butuh efisiensi, konsistensi, dan skalabilitas—protobuf jauh lebih unggul.
Beberapa keunggulan protobuf dibandingkan JSON:
- Lebih kecil: Format biner membuat ukuran pesan jauh lebih kecil
- Lebih cepat: Parsing lebih cepat dibanding JSON
- Strongly typed: Validasi lebih kuat sejak awal
- Backward-compatible: Perubahan schema bisa dikelola dengan rapi
Struktur Dasar File .proto
Untuk memulai, kita perlu membuat file .proto
. Ini adalah definisi schema kontrak data yang akan digunakan client dan server.
Contoh:
syntax = "proto3";
package helloworld;
option go_package = "santekno.com/helloworld/api/pb;pb";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Penjelasan singkat:
syntax = "proto3"
: Kita menggunakan protobuf versi 3 (yang paling umum sekarang).package
: Nama paket internal.option go_package
: Path dan alias package untuk hasil generate file Go.service
: Mendefinisikan service dan daftar metode RPC.message
: Definisi struktur data mirip sepertistruct
dalam Go.
Instalasi Protobuf Compiler (protoc
) dan Plugin Go
Untuk mengonversi file .proto
menjadi kode Go, kita butuh compiler protoc
dan plugin tambahan.
1. Install protoc
macOS:
brew install protobuf
Ubuntu/Debian:
sudo apt install -y protobuf-compiler
2. Install Plugin Go
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
Pastikan direktori $GOPATH/bin
ada di dalam PATH:
export PATH="$PATH:$(go env GOPATH)/bin"
Struktur Direktori Ideal
Berikut struktur yang umum digunakan:
my-grpc-app/
├── proto/
│ └── helloworld.proto
├── api/
│ └── pb/
│ ├── helloworld.pb.go
│ └── helloworld_grpc.pb.go
Pisahkan antara source file .proto
dan hasil generate agar project lebih modular dan rapi.
Generate File dari .proto
Gunakan perintah berikut untuk generate file Go:
protoc \
--proto_path=proto \
--go_out=api \
--go-grpc_out=api \
proto/helloworld.proto
Hasilnya:
helloworld.pb.go
: berisi definisimessage
helloworld_grpc.pb.go
: berisi interfaceGreeterClient
danGreeterServer
File-file ini akan kamu gunakan langsung di service implementation dan client kamu.
Diagram Arsitektur gRPC + Protobuf
Berikut ilustrasi sederhananya:
graph TD Client -->|HTTP/2 + Protobuf| gRPC_Server gRPC_Server --> Business_Logic classDef boxStyle fill:#f0f8ff,stroke:#333,stroke-width:1px; class Client,gRPC_Server,Business_Logic boxStyle;
Di antara Client dan Server, mereka berbicara melalui kontrak .proto
. Protobuf memverifikasi format, validasi tipe data, dan memastikan integritas komunikasi dua arah.
Tips & Best Practices
- Gunakan konvensi penamaan yang konsisten (snake_case untuk field, CamelCase untuk message)
- Simpan file
.proto
di folderproto/
dan hasil generate di folderapi/pb/
- Jangan edit hasil file generate
.pb.go
secara manual - Commit file
.proto
dan hasil generate ke dalam VCS (Git), untuk menjaga konsistensi tim
Apa Selanjutnya?
Setelah menyiapkan .proto
, kamu sudah siap untuk mulai:
- Mengimplementasikan server-side gRPC handler
- Mengembangkan client (bisa di Go, JS, Python, bahkan Dart)
- Menguji komunikasi RPC antara client dan server
Selanjutnya, kita akan membahas cara membuat handler gRPC di Go berdasarkan file .proto
yang sudah disiapkan tadi.
Penutup
gRPC bukan hanya sekadar cara baru untuk membangun API. Ia adalah evolusi komunikasi antar layanan—dan protobuf adalah bahasa kontraknya.
Dengan memahami dan menyiapkan protobuf dengan benar sejak awal, kamu membangun fondasi yang kuat untuk sistem distribusi yang scalable, maintainable, dan future-proof. Dan seperti halnya semua sistem besar: keberhasilan dimulai dari fondasi.
Struktur Proyek gRPC Sederhana di Go
Artikel Terhangat
Struktur Proyek gRPC Sederhana di Go
06 Jun 2025
Instalasi gRPC di Go Langkah demi Langkah
06 Jun 2025
Perbandingan gRPC dengan REST dan GraphQL
06 Jun 2025
Apa itu gRPC dan Mengapa Perlu Dipelajari?
06 Jun 2025

Struktur Proyek gRPC Sederhana di Go

Instalasi gRPC di Go Langkah demi Langkah

Perbandingan gRPC dengan REST dan GraphQL
