Dalam ekosistem pengembangan perangkat lunak modern, komunikasi antarlayanan (inter-service communication) adalah tulang punggung pada arsitektur microservices. Salah satu protokol RPC (Remote Procedure Call) paling populer dan efisien yang dikembangkan Google adalah gRPC. Protokol ini telah menjadi standar de facto untuk komunikasi layanan-layanan backend di banyak organisasi. Namun, memahami dan mengimplementasikan klien gRPC pertama Anda dapat menjadi tantangan tersendiri jika tidak dibimbing secara sistematis.
Pada artikel ini, saya akan memandu Anda melalui proses membangun client gRPC pertama: mulai dari menghasilkan kode stub, membangun kode aplikasi klien, sampai melakukan komunikasi nyata dengan server. Saya juga akan menyertakan contoh kode, simulasi, tabel perbandingan, dan diagram alir end-to-end.
Apa Itu gRPC?
Sebelum kita masuk ke tahap praktis, mari ulas sekilas apa itu gRPC dan mengapa ia sangat diminati.
gRPC adalah framework RPC modern yang menggunakan Protobuf (Protocol Buffers) sebagai format serialisasi datanya. Keunggulannya meliputi:
- Performa tinggi (HTTP/2)
- Definisi API yang jelas via
.proto
file - Dukungan lintas platform & bahasa pemrograman
- Dokumentasi & ekosistem tooling yang matang
Persiapan Awal
Sebelum membangun client, pastikan Anda sudah merampungkan hal berikut:
- Sudah punya server gRPC berjalan (atau file .proto-nya)
- Terinstal
protoc
— compiler Protobuf - Sudah ada plugin gRPC untuk bahasa pemrograman pilihan (di artikel ini: Go, salah satu yang populer dan mudah diikuti)
Struktur direktori dasar proyek akan seperti ini:
grpc-demo/
├── proto/
│ └── hello.proto
├── server/
│ └── main.go
└── client/
└── main.go
Mendefinisikan API dengan .proto
Katakanlah API sederhana: client meminta server mengembalikan salam sapa.
Buat file proto/hello.proto
berikut:
syntax = "proto3";
package hello;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Menghasilkan Kode Stub
Jalankan perintah berikut dari root project untuk menghasilkan kode gRPC untuk Go:
protoc --go_out=. --go-grpc_out=. proto/hello.proto
Ini akan menghasilkan file Go pada folder proto/
. Di situ terkandung interface client dan server.
Langkah-Langkah Membangun Client gRPC
1. Konsep Alur Komunikasi
Bagaimana client gRPC bekerja? Mari lihat diagram berikut:
sequenceDiagram participant Client participant Stub participant Server Client->>Stub: Memanggil stub local (SayHello) Stub->>Server: Membuat dan mengirim request (HelloRequest) Server->>Stub: Mengembalikan response (HelloReply) Stub->>Client: Mengembalikan nilai (HelloReply)
Stub client bertindak sebagai “proxy lokal”, sehingga memanggil fungsi remote semudah memanggil metode lokal.
2. Menulis Kode Client
Buka client/main.go
dan tuliskan kode berikut:
package main
import (
"context"
"log"
"os"
"time"
"google.golang.org/grpc"
pb "grpc-demo/proto" // Import hasil generate .proto
)
const (
address = "localhost:50051"
defaultName = "dunia"
)
func main() {
conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
if err != nil {
log.Fatalf("gagal koneksi: %v", err)
}
defer conn.Close()
c := pb.NewGreeterClient(conn)
name := defaultName
if len(os.Args) > 1 {
name = os.Args[1]
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
if err != nil {
log.Fatalf("gagal greeting: %v", err)
}
log.Printf("Salam: %s", r.GetMessage())
}
Penjelasan tahapan:
- Membuat koneksi:
grpc.Dial
- Membuat objek client:
NewGreeterClient
- Set timeout & context
- Panggil RPC:
SayHello
- Terima response dari server
3. Simulasi Interaksi Client-Server
Mari simulasikan jalur kode yang terlibat:
Langkah | Objek | Fungsi | Info/Data |
---|---|---|---|
1. Koneksi | grpc.Conn | Dial(address) | Membuka channel HTTP/2 ke Srv |
2. Stub | GreeterClient | NewGreeterClient() | Instansiasi client playground |
3. Request | Client | SayHello(ctx, req) | Kirim HelloRequest{Name} |
4. Response | Server | SayHello() | Return HelloReply{Message} |
5. Output | Client | Menerima response | Print message/handle error |
Tantangan Umum Saat Membuat Client gRPC
1. Kesalahan Protobuf Path
Pastikan path import sudah tepat. Untuk Go, biasanya gunakan
pb "grpc-demo/proto"
2. TLS vs Insecure
Pada tahap development, Anda bisa gunakan grpc.WithInsecure()
, namun untuk production WAJIB gunakan TLS demi keamanan.
3. Timeout & Context
Context memungkinkan Anda mengatur timeout dan cancel aktifitas RPC jika response terlalu lama.
Contoh Output
Jika server Anda berjalan dan Anda mengeksekusi:
go run client/main.go Dunia
Maka output-nya akan menjadi seperti:
2024/07/01 Salam: Halo Dunia
Membandingkan gRPC Client dengan REST Client
Berikut tabel ringkas keunggulan client gRPC dibandingkan REST:
Fitur | gRPC | REST |
---|---|---|
Format Data | Protobuf (biner, compact) | JSON (plain) |
Performansi | Tinggi (HTTP/2) | Cenderung lebih rendah |
Type Safety | Ya | Tidak (JSON) |
Streaming | Ya (bi-directional) | Terbatas |
Auto Codegen | Kuat (protoc) | Manual |
Pengamanan | TLS/Mutual TLS | Bisa |
Tips Debugging Client
- Gunakan
grpclog.SetLoggerV2
untuk debugging verbose - Cek port & service registry jika terjadi connection refused
- Protobuf yang berbeda antara client/server akan menyebabkan error Unimplemented
Menyalakan Server (Untuk Uji Coba)
Pastikan ada server berjalan pada localhost:50051
. Berikut contoh service sederhana:
package main
import (
"context"
"log"
"net"
"google.golang.org/grpc"
pb "grpc-demo/proto"
)
type server struct {
pb.UnimplementedGreeterServer
}
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Halo " + in.GetName()}, nil
}
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
grpcServer := grpc.NewServer()
pb.RegisterGreeterServer(grpcServer, &server{})
log.Println("Server berjalan di :50051...")
grpcServer.Serve(lis)
}
Kesimpulan
Membuat client gRPC pertama adalah milestone penting untuk engineer modern, terutama yang berkutat dengan microservice. Dengan protocol yang efisien, type safety bawaan, serta tooling otomasi code generation, membangun client gRPC hampir semudah menggunakan HTTP client biasa—tetapi dengan performa, keamanan, dan kemudahan skala jauh di atas rata-rata. Setelah memahami role .proto, stub, dan urutan eksekusi RPC, Anda siap mengeksplorasi advanced feature: seperti streaming, error handling, dan interceptors di gRPC.
Selamat mencoba membangun client gRPC pertama — dan selamat datang di dunia distributed systems profesional!
11 Membuat Server gRPC Pertama Anda
13 Implementasi Unary RPC
Artikel Terhangat
13 Implementasi Unary RPC
06 Jun 2025
12 Membuat Client gRPC Pertama Anda
06 Jun 2025
11 Membuat Server gRPC Pertama Anda
06 Jun 2025
9 Meng-Generate Kode Go dari File Protobuf
06 Jun 2025
8 Memahami Sintaks Dasar File Protobuf
06 Jun 2025

13 Implementasi Unary RPC

12 Membuat Client gRPC Pertama Anda

11 Membuat Server gRPC Pertama Anda

9 Meng-Generate Kode Go dari File Protobuf
