# gRPC vs REST untuk API Microservices Internal: Perbandingan Praktis

> Perbandingan berbasis data antara gRPC dan REST untuk komunikasi service-to-service internal — dengan benchmark, contoh NestJS, dan panduan jujur tentang kapan masing-masing adalah pilihan yang tepat.

URL: https://www.matthewswong.com/id/blog/microservices-grpc-vs-rest-internal/

- Author: Matthews Wong (https://www.matthewswong.com/id/about/)
- Published: 2025-06-10
- Updated: 2025-06-10
- Category: DevOps

Benchmark independen menunjukkan gRPC memberikan latensi hingga 77% lebih rendah dan throughput 107% lebih tinggi dibandingkan REST untuk payload kecil, dengan pengurangan 10x dalam ukuran pesan terserialisasi berkat Protocol Buffers. Itu adalah angka yang layak diperhatikan. Tapi saya telah membangun API internal dengan keduanya, dan jawaban jujurnya adalah: pilihan protokol jarang menentukan kinerja sistem dalam praktik. Yang lebih penting adalah desain payload, connection pooling, dan apakah tim Anda sebenarnya dapat mengoperasikan apa yang Anda bangun.

## Apa yang Membuat gRPC Berbeda

gRPC menggunakan HTTP/2 sebagai lapisan transport dan Protocol Buffers (protobuf) sebagai format serialisasi. HTTP/2 memungkinkan aliran yang dimultipleks melalui satu koneksi — beberapa permintaan dan respons dalam penerbangan secara bersamaan tanpa pemblokiran head-of-line. Protobuf menserialisasi data ke dalam format biner kompak, biasanya 3-10x lebih kecil dari JSON yang setara. gRPC juga menghasilkan stub klien dan server yang diketik dengan kuat dari file skema .proto.

### Empat Pola Komunikasi gRPC

gRPC mendukung empat pola: Unary (satu permintaan, satu respons — setara dengan REST), Server Streaming (satu permintaan, aliran respons), Client Streaming (aliran permintaan, satu respons), dan Bidirectional Streaming (full duplex). REST dapat mendekati pola-pola ini dengan SSE atau WebSocket, tetapi gRPC menjadikannya pola kelas pertama dengan kode yang dihasilkan.

> Dari proyek NestJS saya: gunakan gRPC untuk lalu lintas east-west (layanan-ke-layanan di dalam cluster Anda) dan REST untuk lalu lintas north-south (klien eksternal, browser, aplikasi mobile, API mitra). Browser tidak dapat memanggil gRPC secara asli tanpa grpc-web atau proxy transkoding. Jika API Anda dikonsumsi oleh pihak ketiga, REST menang dalam aksesibilitas setiap saat.

## Mengimplementasikan gRPC di NestJS

NestJS memiliki dukungan gRPC asli melalui @nestjs/microservices. Anda mendefinisikan file .proto, mengonfigurasi transport gRPC di microservice Anda, dan menggunakan dekorator @GrpcMethod atau @GrpcStreamMethod pada handler Anda. Di sisi klien, Anda menyuntikkan instansi ClientGrpc dan memanggil metode langsung sebagai fungsi TypeScript.

### Angka Kinerja yang Penting

Studi benchmark 2025 yang membandingkan gRPC dan REST di bawah beban yang setara menemukan: gRPC memberikan latensi rata-rata 48% lebih rendah untuk payload kecil (di bawah 1KB), penggunaan CPU 19% lebih rendah, konsumsi memori 34% lebih rendah, dan bandwidth jaringan 41% lebih rendah. Untuk API internal frekuensi tinggi — misalnya, layanan pesanan yang mengkueri layanan inventaris ribuan kali per menit — keuntungan ini menghasilkan penghematan biaya infrastruktur yang berarti.

> **Kompleksitas operasional gRPC itu nyata**

> gRPC memerlukan pengelolaan file .proto di seluruh layanan, yang menjadi tantangan koordinasi seiring pertumbuhan tim. Perubahan skema Proto adalah perubahan yang merusak jika tidak ditangani dengan hati-hati — Anda memerlukan repositori proto, strategi versioning, dan validasi CI. Men-debug gRPC lebih sulit daripada REST karena pesan protobuf biner tidak dapat dibaca manusia dalam jejak jaringan.

## Kapan REST Masih Menang

REST tetap menjadi pilihan yang tepat ketika: API Anda dikonsumsi oleh browser atau klien eksternal; tim Anda terutama berpengalaman REST dan biaya adopsi melebihi keuntungan kinerja; Anda membutuhkan pengujian berbasis curl sederhana dan alat HTTP standar; tingkat permintaan Anda cukup rendah sehingga efisiensi protokol tidak penting.

## GraphQL sebagai Opsi Ketiga

Untuk API internal di mana fleksibilitas kueri lebih penting daripada throughput — seperti BFF (Backend for Frontend) yang mengagregasi beberapa microservice — GraphQL layak dipertimbangkan. GraphQL membiarkan klien meminta persis bidang yang mereka butuhkan, mengurangi over-fetching. Tetapi GraphQL memiliki overhead operasionalnya sendiri: schema stitching, masalah kueri N+1, kompleksitas caching.

## Kerangka Keputusan Saya

Panggilan layanan internal frekuensi tinggi (>1000/menit): gunakan gRPC untuk penghematan latensi dan bandwidth. Panggilan layanan internal frekuensi rendah: gunakan REST untuk kesederhanaan. API yang menghadap publik: selalu REST. Streaming data: gRPC streaming. Tim tanpa pengalaman gRPC dalam tenggat waktu: REST dulu, migrasi jika Anda mengalami masalah kinerja nyata.

## Sumber & Bacaan Lebih Lanjut

- Markaicode — gRPC vs REST in 2025: Performance Benchmarks for Microservices
- NestJS Docs — Microservices: gRPC Transport
- Google — Protocol Buffers Documentation

| Dimensi | REST | gRPC |
| --- | --- | --- |
| Format payload | JSON, mudah dibaca manusia, ukuran payload lebih besar | Protocol Buffers, biner, bisa sampai 10x lebih kecil |
| Latensi | Latensi lebih tinggi, ada overhead parsing teks | Latensi hingga 77% lebih rendah untuk payload kecil |
| Throughput | Throughput dasar lewat HTTP/1.1 atau HTTP/2 | Throughput hingga 107% lebih tinggi berkat multiplexing HTTP/2 |
| Definisi kontrak | OpenAPI/Swagger, sering ditulis belakangan | File .proto sebagai satu-satunya sumber kebenaran, code-generated |
| Streaming | Butuh WebSocket atau SSE yang ditempel belakangan | Streaming dua arah native yang sudah jadi bagian protokol |
| Kemudahan debug | curl dan devtools browser langsung bisa dipakai | Butuh grpcurl atau proxy untuk memeriksa traffic |
| Paling cocok untuk | API publik dan komunikasi antar-service yang sederhana | Komunikasi microservice internal dengan throughput tinggi |

## Source links

- https://markaicode.com/grpc-vs-rest-benchmarks-2025/
- https://docs.nestjs.com/microservices/grpc
- https://protobuf.dev/

## FAQ

### Kapan sebaiknya memilih gRPC daripada REST untuk microservices internal?

Gunakan gRPC untuk lalu lintas east-west frekuensi tinggi — panggilan layanan-ke-layanan di dalam cluster yang mencapai lebih dari 1.000 permintaan per menit — di mana penghematan latensi dan bandwidth menghasilkan penghematan biaya infrastruktur yang nyata. Untuk panggilan internal frekuensi rendah, API yang menghadap publik, atau tim tanpa pengalaman gRPC dalam tenggat waktu, REST tetap lebih sederhana dan sama efektifnya.

### Apa keunggulan performa konkret gRPC dibandingkan REST?

Studi benchmark 2025 menemukan gRPC memberikan latensi rata-rata 48% lebih rendah untuk payload kecil (di bawah 1 KB), penggunaan CPU 19% lebih rendah, konsumsi memori 34% lebih rendah, dan bandwidth jaringan 41% lebih rendah dibandingkan REST di bawah beban yang setara. Keuntungan ini berasal dari multiplexing HTTP/2 dan serialisasi Protocol Buffers yang menghasilkan pesan biner 3–10x lebih kecil dari JSON yang setara.

### Mengapa browser tidak bisa memanggil layanan gRPC secara langsung?

Browser tidak mendukung framing HTTP/2 yang dibutuhkan gRPC secara native, sehingga panggilan langsung dari browser ke server gRPC tidak memungkinkan tanpa grpc-web atau proxy transkoding. Itulah mengapa pola yang direkomendasikan adalah menyimpan gRPC untuk service mesh internal di mana Anda mengendalikan kedua ujungnya, dan mengekspos REST atau GraphQL untuk klien eksternal.

### Beban operasional apa yang diperkenalkan gRPC dibandingkan REST?

gRPC mengharuskan pengelolaan file skema .proto di seluruh layanan, yang menjadi tantangan koordinasi seiring pertumbuhan tim — perubahan proto adalah perubahan yang merusak jika tidak ditangani hati-hati, sehingga membutuhkan repositori proto bersama, strategi versioning, dan validasi CI. Proses debug juga lebih sulit karena pesan protobuf biner tidak dapat dibaca manusia dalam jejak jaringan, sehingga Anda memerlukan alat khusus seperti grpcurl atau Evans.

### Apakah beralih dari REST ke gRPC menjamin performa sistem yang lebih baik?

Belum tentu. Poin utama dalam post ini adalah bahwa pilihan protokol jarang menentukan kinerja sistem dalam praktik — desain payload, connection pooling, dan kemampuan operasional tim jauh lebih berpengaruh. Keputusan arsitektur seharusnya didorong oleh bottleneck yang terukur di sistem nyata Anda, bukan oleh benchmark dari perangkat keras orang lain.

---

- HTML version: https://www.matthewswong.com/id/blog/microservices-grpc-vs-rest-internal/
- English: https://www.matthewswong.com/en/blog/microservices-grpc-vs-rest-internal/
- Site index for agents: https://www.matthewswong.com/llms.txt
- Sitemap: https://www.matthewswong.com/sitemap.xml
- API description (OpenAPI): https://www.matthewswong.com/openapi.json
