gRPC는 Google에서 만든 오픈소스 RPC(Remote Procedure Call) 프레임워크입니다.
다른 서버의 함수를 로컬처럼 호출할 수 있게 해주는 기술로, 고속 통신과 양방향 스트리밍에 최적화되어 있습니다.
userService.getUser(1) 호출 시 실제로는 다른 서버에서 동작하지만 로컬 함수처럼 보임.proto 파일로 메시지 및 서비스 정의 → 자동으로 서버/클라이언트 코드 생성syntax = "proto3";
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}
message UserRequest {
int32 id = 1;
}
message UserResponse {
string name = 1;
string email = 2;
}
| 방식 | 설명 |
|---|---|
| Unary | 일반적인 요청-응답 1:1 |
| Server Streaming | 서버가 여러 응답을 스트리밍 |
| Client Streaming | 클라이언트가 여러 요청을 스트리밍 |
| Bi-directional | 양방향 실시간 통신 지원 |
개발을 하다 보면 클라이언트와 서버 간 통신을 위해 어떤 방식을 사용할지 선택해야 할 때가 많습니다. REST가 익숙하지만, GraphQL이나 gRPC 같은 신기술이 계속해서 주목받고 있죠. 그렇다면 이 세 가지 API 통신 방식은 어떻게 다르고, 언제 어떤 것을 써야 할까요?
| 항목 | REST | GraphQL | gRPC |
|---|---|---|---|
| 전송 방식 | HTTP/JSON | HTTP/JSON | HTTP/2 + Protocol Buffers |
| 엔드포인트 | 여러 개 | 단일 (/graphql) | 여러 개 (RPC 메서드) |
| 요청 데이터 | 고정된 응답 | 원하는 데이터만 지정 | 명시적 메시지 정의 |
| 성능 | 보통 | 효율적 | 가장 빠름 |
| 학습 난이도 | 쉬움 | 중간 | 높음 |
| 브라우저 호환 | 매우 좋음 | 좋음 | 제한적 (gRPC-web 필요) |
| 스트리밍 | 제한적 | 불가 | 가능 (양방향) |
장점:
단점:
/graphql 엔드포인트로 모든 요청 처리장점:
단점:
.proto 파일로 서비스, 메시지, 메서드 정의장점:
단점:
gRPC는 확실히 기술적으로 강력합니다. 하지만 현실에서는 단점도 분명 존재합니다:
웹 브라우저에서 직접 사용 어려움
디버깅, 로그 확인 불편
학습 곡선이 큼
언제나 빠른 게 중요한 건 아님
| 상황 | 추천 기술 |
|---|---|
| 단순한 웹/앱 API | REST |
| 다양한 데이터 조합 필요 (모바일 등) | GraphQL |
| 고성능 마이크로서비스 통신 | gRPC |
| 양방향 스트리밍, 실시간 처리 | gRPC |
기술은 "좋다/나쁘다"보다 언제, 왜 사용하는지가 더 중요합니다.