gRPC는 Google이 개발한 고성능 오픈소스 RPC(Remote Procedure Call) 프레임워크다. Protocol Buffers를 인터페이스 정의 언어로 사용하며, HTTP/2 기반으로 동작해 REST API보다 빠르다.
REST API vs gRPC
| 항목 | REST API | gRPC |
|---|
| 데이터 형식 | JSON (텍스트) | Protobuf (바이너리) |
| 프로토콜 | HTTP/1.1 | HTTP/2 |
| 속도 | 보통 | 빠름 (최대 7~10배) |
| 스트리밍 | 제한적 | 양방향 스트리밍 |
| 타입 안전성 | 없음 | 강함 |
| 브라우저 지원 | 완전 | 제한적 (gRPC-web 필요) |
Protocol Buffers (.proto)
protobuf
syntax = "proto3";
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
rpc ListUsers (ListRequest) returns (stream UserResponse);
}
message UserRequest {
int32 id = 1;
}
message UserResponse {
int32 id = 1;
string name = 2;
string email = 3;
}
python
# 서버
class UserServicer(user_pb2_grpc.UserServiceServicer):
def GetUser(self, request, context):
return user_pb2.UserResponse(
id=request.id,
name="Alice",
email="alice@example.com"
)
# 클라이언트
with grpc.insecure_channel('localhost:50051') as channel:
stub = user_pb2_grpc.UserServiceStub(channel)
response = stub.GetUser(user_pb2.UserRequest(id=1))
print(response.name) # Alice
활용 사례
관련 개념
- •REST API — gRPC의 대안
- •TCP/IP — gRPC의 전송 계층
- •마이크로서비스 — gRPC의 주요 사용 환경
참고문헌
- •gRPC 공식 문서: grpc.io
- •Protocol Buffers 공식 문서: protobuf.dev