본문 바로가기
프로그래밍

JSON-RPC란 무엇인가?

by bantomak 2025. 3. 19.
반응형

JSON-RPC란?

JSON-RPC는 JSON(JavaScript Object Notation)을 기반으로 하는 원격 프로시저 호출(Remote Procedure Call, RPC) 프로토콜을 말한다. 클라이언트와 서버 간에 메서드 호출을 요청하고 응답을 받는 방식으로 동작하며, 경량 프로토콜이기 때문에 사용이 쉽고 다양한 환경에서의 활용이 가능하다.

📌 JSON-RPC의 특징

  • 언어 독립적(Language-Independent) : JSON을 사용하기 때문에 다양한 프로그래밍 언어에서 구현 가능
  • 경량 프로토콜(LightWeight Protocol) : 최소한의 데이터 전송으로 효율적
  • 요청(Request)과 응답(Response) 구조 : 클라이언트에서 요청을 보내면 서버가 응답을 반환
  • 배치(Batch) 요청 지원 : 여러 개의 요청을 한 번에 보낼 수 있음
  • 알림(Notifications) 기능 지원 : 응답을 받지 않는 요청을 보낼 수 있음

JSON-RPC 기본 구조

JSON-RPC는 기본적으로 클라이언트가 서버로 요청을 보내고, 이에 대해서 서버가 클라이언트로 응답을 반환하는 구조이다.

 

기본 요청-응답 (Request-Response)

✔ 요청 Request

{
  "jsonrpc": "2.0",
  "method": "multiply",
  "params": [5, 7],
  "id": 2
}

  응답 Response

{
  "jsonrpc": "2.0",
  "result": 35,
  "id": 2
}

 

알림 (Notification)

클라이언트가 응답을 기대하지 않는 요청을 보낼 수도 있다. "id" 필드를 생략하면 알림 요청이 된다.

{
  "jsonrpc": "2.0",
  "method": "logEvent",
  "params": ["UserLogged"]
}
  • 알림 요청에는 "id"가 없기 때문에, 서버는 응답을 반환하지 않는다.
  • 로깅, 이벤트 트래킹 등과 같은 용도로 활용

배치 요청 (Batch Request)

여러 개의 요청을 한 번에 보낼 수도 있다.

배치 요청을 사용하면 네트워크 오버헤드를 줄이고 여러 개의 연산을 동시에 수행할 수 있다.

[
  {
    "jsonrpc": "2.0",
    "method": "add",
    "params": [3, 4],
    "id": 1
  },
  {
    "jsonrpc": "2.0",
    "method": "subtract",
    "params": [10, 2],
    "id": 2
  }
]
[
  {
    "jsonrpc": "2.0",
    "result": 7,
    "id": 1
  },
  {
    "jsonrpc": "2.0",
    "result": 8,
    "id": 2
  }
]

👀 에러 처리

잘못된 요청 (Pase Error)

잘못된 JSON을 보냈을 경우 :

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32700,
    "message": "Parse error"
  },
  "id": null
}

지원되지 않는 메서드 (Method Not Found)

존재하지 않는 메서드를 호출할 경우 :

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 3
}

잘못된 매개변수 (Invalid Params)

올바르지 않은 매개변수를 보냈을 경우 :

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid params"
  },
  "id": 4
}

서버 오류 (Internal Error)

서버에서 예기치 않은 오류가 발생한 경우 :

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32603,
    "message": "Internal error"
  },
  "id": 5
}

C#으로 구현한 JSON-RPC 예제

C#에서 JSON-RPC 서버를 만드는 예제이다.

using System;
using System.Text.Json;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string jsonRequest = @"{ ""Jsonrpc"": ""2.0"", ""Method"": ""sum"", ""Params"": [4, 5], ""Id"": 1 }";
        Console.WriteLine("Request: " + jsonRequest);

        var request = JsonSerializer.Deserialize<JsonRpcRequest>(jsonRequest);
        int result = request.Params[0] + request.Params[1];

        var response = new JsonRpcResponse { Jsonrpc = "2.0", Result = result, Id = request.Id };
        string jsonResponse = JsonSerializer.Serialize(response);

        Console.WriteLine("Response: " + jsonResponse);
    }
}

public class JsonRpcRequest
{
    public string Jsonrpc { get; set; }
    public string Method { get; set; }
    public List<int> Params { get; set; }
    public int Id { get; set; }
}

public class JsonRpcResponse
{
    public string Jsonrpc { get; set; }
    public int Result { get; set; }
    public int Id { get; set; }
}

정리하자면

  • JSON-RPC는 JSON 형식을 사용하여 원격 프로시저 호출을 수행하는 경량 프로토콜을 말한다.
  • 메서드 호출 방식으로 동작하며, REST API보다 더 간결한 구조를 지님
  • 알림 및 배치 요청 기능을 지원하여 성능을 최적화할 수 있다.
  • 클라이언트-서버 간의 직접적인 데이터 교환이 필요한 경우 유용하다.

함께 읽으면 좋은 글

 

JSON 데이터 포맷의 이해

JSON이란 무엇인가?JSON은 JavaScript Object Notation의 약어로, 데이터를 표현하는 데 사용되는 형식이다. 2000년대 초반 자바스크립트의 일부로 등장했고 점점 확장돼 텍스트 기반 데이터를 기술하고 교

jettstream.tistory.com

댓글