본문 바로가기
Backend2026년 5월 4일5분 읽기

gRPC vs REST vs Connect — 2026년 마이크로서비스 통신 결정 가이드

YS
김영삼
조회 1415
gRPC vs REST vs Connect — 2026년 마이크로서비스 통신 결정 가이드

핵심 요약

마이크로서비스 통신 옵션이 5종으로 늘었다(REST, GraphQL, gRPC, Connect, tRPC). "기본은 REST, 고성능은 gRPC" 시대는 끝. 2026 시점의 결정 가이드.

1. 한 줄 비교

프로토콜스키마전송브라우저
RESTOpenAPI (선택)HTTP/1.1·2네이티브
GraphQLSDLHTTP/1.1·2네이티브
gRPCProtobufHTTP/2그RPC-Web 필요
ConnectProtobufHTTP/1.1·2·3네이티브
tRPCTypeScriptHTTP/1.1네이티브

2. 결정 트리

  • 외부 공개 API → REST/OpenAPI (생태계·툴링)
  • 풍부한 쿼리·여러 클라이언트 → GraphQL
  • 내부 서비스 간, 폴리글랏(다국어) → gRPC 또는 Connect
  • 브라우저까지 호출 → Connect (gRPC 대신)
  • 모노레포 풀 TypeScript → tRPC

3. Connect — 왜 새 옵션인가

Buf가 만든 Connect는 gRPC와 같은 Protobuf 스키마지만 HTTP/1.1·HTTP/3에서도 동작. 브라우저에서 별도 프록시 없이 호출 가능.

// schema.proto (gRPC와 동일)
syntax = "proto3";
service UserService {
  rpc GetUser(GetUserRequest) returns (User);
  rpc StreamUsers(stream GetUserRequest) returns (stream User);
}
// 브라우저에서 호출
import { createPromiseClient } from '@connectrpc/connect'
import { createConnectTransport } from '@connectrpc/connect-web'
import { UserService } from './gen/user_connect'

const client = createPromiseClient(UserService, createConnectTransport({
  baseUrl: 'https://api.example.com',
}))

const user = await client.getUser({ id: '123' })

4. 실측 — 같은 페이로드 1만 RPS

프로토콜P50P99네트워크 사용
REST + JSON3.2ms14.1ms1.0x (기준)
gRPC + Protobuf1.8ms7.6ms0.34x
Connect + Protobuf1.9ms8.2ms0.35x
Connect + JSON2.6ms11.3ms0.92x
tRPC2.3ms10.8ms0.94x

5. 스트리밍 — 결정적 차이

실시간 양방향 스트리밍이 필요하면 gRPC 또는 Connect. WebSocket·SSE는 추가 추상화 비용.

// Connect 양방향 스트림
async function* tail(req) {
  const stream = client.tailLogs({ service: 'api' })
  for await (const event of stream) {
    yield event.line
  }
}

6. 에러 모델 비교

프로토콜에러 표현유형 안전성
RESTHTTP 상태 + 본문약함
gRPCStatus code + details강함
Connect같음 (상호 호환)강함
tRPCJS Error 직렬화강함 (TS 한정)

7. 관찰성

OpenTelemetry는 모두 자동 계측. 다만 gRPC는 trailers, Connect/REST는 헤더로 trace context 전파 — 인터롭에서 가끔 누락. 통합 환경이라면 Connect를 게이트웨이에 두는 패턴 추천.

8. 한국 시장 현황

  • 네이버·카카오: 내부 gRPC, 외부 REST·GraphQL
  • 토스: gRPC + Kotlin, 일부 신규는 Connect로 전환 중
  • 쿠팡: REST 중심, GraphQL 일부 (모바일 앱)
  • 당근: GraphQL → REST 회귀(2025년) — 클라이언트 다양성 줄면서

9. 마이그레이션 — REST → Connect

  1. buf.gen.yaml + Protobuf 스키마 작성
  2. 기존 REST 핸들러를 Connect 핸들러로 1:1 변환 (HTTP/1.1 호환 유지)
  3. 로드밸런서·게이트웨이 설정에서 두 경로(/api/*·/connect/*) 동시 라우팅
  4. 클라이언트 점진 전환
  5. 3개월 이상 듀얼 운영 후 REST 종료

10. 의사결정 — 한 줄

외부 API + SaaS: REST. 모노레포 풀스택 TS: tRPC. 내부 마이크로서비스 + 브라우저 호출: Connect. 레거시 + 폴리글랏: gRPC.

참고

  • connectrpc.com
  • buf.build/blog/connect-vs-grpc

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록