tutorial

Menyiapkan Protocol Buffers (protobuf) untuk gRPC

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 seperti struct 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 definisi message
  • helloworld_grpc.pb.go: berisi interface GreeterClient dan GreeterServer

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 folder proto/ dan hasil generate di folder api/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.

comments powered by Disqus