본문으로 건너뛰기
김신건의 로그

[API Design] JSON-RPC vs gRPC vs REST: RPC 패턴 비교

· 수정 · 📖 약 1분 · 364자/단어 #rpc #json-rpc #grpc #rest #api-design
JSON-RPC, RPC, JSON-RPC 2.0, RPC vs REST

정의

RPC (Remote Procedure Call) = 원격 함수 호출 추상화. 세 가지 주요 형태:

  1. JSON-RPC: JSON 위 RPC. 가벼움.
  2. gRPC: Protobuf + HTTP/2.
  3. REST (RPC 스타일): POST /api/getUser 같이 동사 endpoint.

JSON-RPC 2.0 메시지

// 요청
{
  "jsonrpc": "2.0",
  "method": "getUser",
  "params": { "id": 42 },
  "id": 1
}

// 성공 응답
{
  "jsonrpc": "2.0",
  "result": { "id": 42, "name": "koa" },
  "id": 1
}

// 에러 응답
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}

// 알림 (응답 없음)
{
  "jsonrpc": "2.0",
  "method": "log",
  "params": ["info", "user logged in"]
}

// Batch (배열)
[
  { "jsonrpc": "2.0", "method": "a", "id": 1 },
  { "jsonrpc": "2.0", "method": "b", "id": 2 }
]
표준 에러 코드의미
-32700Parse error
-32600Invalid request
-32601Method not found
-32602Invalid params
-32603Internal error
-32000 ~ -32099server error

세 가지 RPC 비교

항목JSON-RPCgRPCREST (RPC 스타일)
Wire 포맷JSONProtobufJSON
전송HTTP/WS/TCPHTTP/2HTTP/1.1+
Schema옵션필수 (proto)OpenAPI
Streaming없음4 모드SSE/WS 별도
코드 생성옵션자동OpenAPI
크기 / 속도JSON 만큼수배 작고 빠름JSON
브라우저직접grpc-web 필요직접
Batch기본 지원없음없음

JSON-RPC 의 강점

flowchart LR
    A[가벼운 spec<br/>1 페이지] --> Use1[블록체인 노드<br/>예: Ethereum]
    A --> Use2[IDE / 에디터 ↔ Language Server<br/>예: LSP]
    A --> Use3[VSCode extension API]
    A --> Use4[debugger DAP]
표준RPC 토대
LSP (Language Server Protocol)JSON-RPC
DAP (Debug Adapter Protocol)JSON-RPC
MCP (Model Context Protocol)JSON-RPC
Ethereum JSON-RPCJSON-RPC
Bitcoin RPCJSON-RPC

IMPORTANT

JSON-RPC 는 VSCode / LSP / MCP / 블록체인de facto. 복잡도 vs gRPC 의 sweet spot.

언제 어떤 RPC?

flowchart TD
    Q1{브라우저 직접 호출?}
    Q1 -->|예| Q2{내부 API?}
    Q2 -->|"아니오 (외부)"| REST[REST]
    Q2 -->|예| Q3{스트리밍 / typed?}
    Q3 -->|typed 강력 필요| RestOpenAPI[REST + OpenAPI]
    Q3 -->|아니오| REST
    Q1 -->|"아니오 (server-to-server)"| Q4{성능 critical?}
    Q4 -->|예| GRPC[gRPC]
    Q4 -->|아니오| Q5{spec 단순함 중요?}
    Q5 -->|예| JsonRpc[JSON-RPC]
    Q5 -->|아니오| GRPC

JSON-RPC 의 함정

WARNING

  1. method 이름 충돌 = namespace 없음. 큰 시스템에서 접두사 (user.get, order.create) 필요.
  2. HTTP status code 무관 = JSON-RPC 는 항상 200. error 는 body 의 error 객체. 모니터링 도구가 에러 못 잡음.
  3. Batch + notification 의 응답 매핑 = id 기반 매핑이 복잡. 잘못하면 응답이 섞임.
  4. 버전 관리 없음 = spec 자체에 버전 없음. 직접 method 이름에 v2 박는 식.

관련 위키

이 글의 용어 (4개)
[API Design] GraphQL: 단일 endpoint, N+1, persisted queriesapi-design
정의 GraphQL (Facebook, 2015) 은 클라이언트가 필요한 필드만 명시 하는 query language + 런타임. 단일 endpoint, typed schema,…
[API Design] OpenAPI / Swagger: 스펙, 코드 생성, contract testingapi-design
정의 OpenAPI Specification (OAS) 은 REST API 를 기술하는 YAML/JSON 형식. 옛 이름 Swagger. 2017 부터 OpenAPI Initia…
[API Design] REST API: 원칙, 자원 모델링, HATEOAS, 버전 관리api-design
정의 REST (Representational State Transfer) 는 Roy Fielding 의 2000년 박사논문에서 정립된 분산 시스템 아키텍처 스타일. HTTP 의…
[Network] gRPC: HTTP/2 + Protobuf, 4가지 streaming 패턴network
정의 gRPC 는 HTTP/2 위에서 Protobuf 직렬화 로 동작하는 고성능 RPC 프레임워크. Google 내부 Stubby 의 오픈소스 후계. 핵심 4가지: 1. Prot…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기