gRPC와 GraphQL의 개념·아키텍처·주요 특징을 살펴보고, 두 기술의 차이점 및 적합한 사용 시나리오를 정리.
IDL(Interface Definition Language)
syntax = "proto3";
service UserService {
rpc GetUser (GetUserRequest) returns (User);
rpc ListUsers (ListUsersRequest) returns (stream User);
}
message GetUserRequest { int32 id = 1; }
message ListUsersRequest { }
message User { int32 id = 1; string name = 2; }
코드 생성
protoc 컴파일러로 서버·클라이언트 스텁(stub) 코드 생성(Java/Kotlin, Go, Python 등) 통신
스키마 정의
type Query {
user(id: ID!): User
users(limit: Int): [User!]!
}
type User {
id: ID!
name: String!
posts: [Post!]!
}
리졸버(Resolver)
단일 엔드포인트
/graphql 하나의 HTTP 엔드포인트로 인증·권한·복잡도 제어
@auth 디렉티브 적용 등| 구분 | gRPC | GraphQL |
|---|---|---|
| 전송 프로토콜 | HTTP/2 바이너리 | HTTP/1.1 또는 HTTP/2, JSON |
| 데이터 직렬화 | Protocol Buffers | JSON |
| 엔드포인트 구조 | 서비스·메소드별 엔드포인트 | 단일 /graphql 엔드포인트 |
| 타입 안정성 | 컴파일 타임 IDL 검증 | 런타임 스키마 검증 |
| 스트리밍 지원 | 양방향 스트리밍 기본 지원 | 표준은 스트리밍 미지원 (구현별로 WebSocket 등 확장) |
| 도구 생태계 | protoc, gRPC interceptor, 다양한 언어 SDK | GraphiQL, Apollo, Relay, 서버 프레임워크 연동 |
| 장점 | 고성능·낮은 레이턴시, 언어간 호환성, 스트리밍 | 유연한 쿼리, 과·과소 요청 해소, 자동 문서화 |
| 단점 | 러닝커브, HTTP/2·proto 환경 구성 복잡 | 쿼리 복잡도 관리 필요, 캐싱 제어 추가 작업 필요 |
gRPC
GraphQL