맨위로가기

JSON-RPC

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

JSON-RPC는 JSON(JavaScript Object Notation)을 데이터 형식으로 사용하는 원격 프로시저 호출(RPC) 프로토콜이다. 2005년에 처음 등장했으며, 버전 1.0, 1.1, 2.0 등의 변형이 존재한다. JSON-RPC는 클라이언트가 서버에 요청을 전송하여 서버의 메서드를 호출하는 방식으로 작동하며, 요청, 응답, 알림 구조를 가진다. 현재 널리 사용되는 버전은 2.0이며, HTTP 또는 TCP/IP 소켓을 통해 전송된다.

더 읽어볼만한 페이지

  • JSON - JSON 웹 토큰
    JSON 웹 토큰(JWT)은 헤더, 페이로드, 서명으로 구성되어 정보를 안전하게 전송하는 개방형 표준으로, 사용자 인증 및 권한 부여에 주로 사용되지만 알고리즘 관련 취약점, 키 관리, 토큰 무효화 등의 문제점도 존재한다.
  • JSON - JSON-LD
    JSON-LD는 JSON 데이터를 RDF 모델로 표현하는 직렬화 방법으로, 컨텍스트를 활용해 JSON 속성을 온톨로지 개념에 연결하며 SEO, 의료 정보학, IoT 등 다양한 분야에서 활용되고 Schema.org, 구글 지식 그래프 등에서 중요한 역할을 한다.
  • 원격 프로시저 호출 - D-Bus
    D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
  • 원격 프로시저 호출 - DCE/RPC
    DCE/RPC는 분산 컴퓨팅 환경에서 원격 프로시저 호출을 가능하게 하는 프로토콜로, 오픈 소프트웨어 재단에서 개발되었으며, 다양한 운영체제와 환경에서 사용된다.
  • 웹 서비스 - 빅쿼리
    빅쿼리는 구글의 데이터 분석 서비스로, 드레멜을 기반으로 수조 행의 데이터에 대한 빠른 쿼리를 가능하게 하며, 데이터 관리, 쿼리 실행, 서비스 통합, 접근 제어, 기계 학습 기능을 제공한다.
  • 웹 서비스 - 시맨틱 웹
    시맨틱 웹은 컴퓨터가 정보를 스스로 처리하도록 웹 정보에 의미를 부여하는 차세대 웹 기술로, RDF, OWL, XML 등의 표준 기술과 온톨로지를 기반으로 지식 베이스를 구축하여 데이터 통합, 정보 검색, 지식 관리 등에 활용될 수 있으며 웹 3.0의 핵심 요소로 간주된다.
JSON-RPC

2. 역사

JSON-RPC는 여러 버전을 거치며 발전해왔다. 각 버전별 주요 특징과 발표 날짜는 아래 표와 같다.

JSON-RPC 버전 역사
버전설명날짜
1.0원본 버전2005년
1.1 WDhttps://jsonrpc.org/historical/json-rpc-1-1-wd.html 작업 초안. 명명된 매개변수, 특정 오류 코드, 인트로스펙션 기능 추가.2006년 8월 7일
1.1 Althttp://jsonrpc.org/historical/json-rpc-1-1-alt.txt 단순 JSON-RPC 1.1에 대한 제안. 1.1 WD의 대안.2007년 5월 6일
1.1 객체 명세http://jsonrpc.org/historical/json-rpc-object-specification.html 객체 명세. 1.1 WD/1.1ALT의 대안.2007년 7월 30일
1.2http://jsonrpc.org/historical/jsonrpc12_proposal.html 제안. 이후 2.0으로 이름 변경.2007년 12월 27일
2.0http://jsonrpc.org/historical/json-rpc-1-2-proposal.txt 명세 제안2009년 5월 24일
2.0 (개정)http://jsonrpc.org/spec 명세2010년 3월 26일


2. 1. 1.0

JSON-RPC 1.0은 2005년에 나온 초기 버전이다.[1]

버전설명날짜
1.0원본 버전2005년


2. 2. 1.1 (Working Draft)

JSON-RPC 1.1 버전은 2006년 8월 7일에 작업 초안(Working Draft, WD)으로 발표되었다.[1] 이 버전에서는 명명된 매개변수, 특정 오류 코드, 인트로스펙션(introspection) 기능이 추가되었다.[2]

버전설명날짜
1.1 WDhttps://jsonrpc.org/historical/json-rpc-1-1-wd.html 작업 초안. 명명된 매개변수를 추가하고, 특정 오류 코드를 추가하며, 인트로스펙션 기능을 추가함.2006년 8월 7일


2. 3. 1.1 Alt

http://jsonrpc.org/historical/json-rpc-1-1-alt.txt 단순 JSON-RPC 1.1에 대한 제안은 1.1 WD의 대안으로, 2007년 5월 6일에 제안되었다.[1]

2. 4. 1.1 객체 명세

http://jsonrpc.org/historical/json-rpc-object-specification.html 객체 명세는 1.1 WD/1.1ALT에 대한 대안 제안으로 2007년 7월 30일에 제안되었다.[1]

2. 5. 1.2

JSON-RPC영어 1.2는 2007년 12월 27일에 제안되었으며, 이후 2.0으로 명칭이 변경되었다.[1]

JSON-RPC 버전 역사
버전설명날짜
1.2제안, 나중에 2.0이 됨[1]2007년 12월 27일


2. 6. 2.0

JSON-RPC 2.0은 2009년 5월 24일에 제안된 버전으로, 현재 가장 널리 사용되는 표준이다.[6] 2010년 3월 26일에 최종 명세가 발표되었다.[7]

버전설명날짜
2.0http://jsonrpc.org/historical/json-rpc-1-2-proposal.txt 명세 제안2009년 5월 24일
2.0 (개정)http://jsonrpc.org/spec 명세2010년 3월 26일


3. 사용

JSON-RPC는 이 프로토콜을 구현하는 서버에 요청을 보내 사용된다. 클라이언트는 일반적으로 원격 시스템의 메서드를 호출하기 위한 소프트웨어이다. 여러 개의 입력 파라미터를 배열이나 객체로 원격 메서드에 전송할 수 있으며, 원격 메서드는 여러 개의 출력 데이터를 반환할 수 있다(이는 구현 버전에 따라 다르다).

모든 전송 데이터는 직렬화된 JSON 객체로 표시된다[7]. 요청은 원격 시스템이 제공하는 특정 메서드를 호출하며, 다음 세 가지 속성을 포함해야 한다.


  • `method` - 실행할 메서드 이름 문자열.
  • `params` - 메서드에 전달되는 매개변수의 객체 또는 배열.
  • `id` - 요청에 해당하는 응답을 식별하기 위한 문자열 또는 숫자.


요청을 받은 측은 받은 모든 요청에 대해 올바른 응답을 반환해야 한다. 응답은 정상 또는 오류 여부에 따라 다음 속성을 포함해야 한다.

  • `result` - 정상적으로 실행된 경우, 메서드 실행 결과.
  • `error` - 오류가 발생한 경우, 그 내용을 나타내는 객체.
  • `id` - 요청으로 전달된 id.


응답이 필요 없는 알림을 위한 구조도 도입되었다. 알림은 응답을 반환하지 않으므로 id가 필요하지 않아, 알림 요청은 id를 제거한 요청 형식으로 되어 있다. 알림의 경우 `id`를 보내지 않거나(버전 2.0) `null`로 해야 한다(버전 1.0).

3. 1. 작동 방식

JSON-RPC는 이 프로토콜을 구현하는 서버로 요청을 보내 동작한다. 이때 클라이언트는 통상 리모트 시스템의 메소드 하나를 호출하려는 소프트웨어이다. 다수의 입력 파라미터가 배열 혹은 객체 형태로 리모트 메소드로 전달될 수 있고, 메소드 자신은 다수의 출력 데이터를 마찬가지로 리턴할 수 있다. (구현 버전에 따라 다르다.)[8]

하나의 리모트 메소드는 HTTP 혹은 TCP/IP 소켓(버전 2.0부터)을 사용해 리모트 서비스로 요청을 보내 호출된다. HTTP를 사용할 때는 content-type이 application/json로 정의될 수도 있다.[8]

모든 전송 타입은 JSON을 사용해 직렬화한 단일 객체이다.[9] 하나의 요청은 리모트 시스템에 의해 제공되는 특정한 메소드에 대한 호출이다. 이는 다음 3가지 속성을 포함해야 한다.

  • `method` - 호출될 메소드의 이름 문자열.
  • `params` - 정의된 메소드에 대한 파라미터로서 전달될 객체들의 배열.
  • `id` - 임의 타입의 값. 이것은 요청에 대해 대응되는 응답을 매치시킨다.


요청 수신자는 모든 수신된 요청에 대해 유효한 응답으로 답해야 한다. 응답은 아래에서 언급한 속성들을 포함해야 한다.

  • `result` - 호출된 메소드에 의해 반환되는 데이터. 메소드 호출 중 에러가 발생했다면, 이 값은 null이어야 한다.
  • `error` - 메소드 호출 중 에러가 있었으면, 특정한 에러 코드. 아니면 `null`.
  • `id` - 응답하는 요청의 id.


응답이 필요 없거나 처음부터 요구되지도 않는 상황들이 있기 때문에, 알림(notification)이 도입되었다. 알림은 id가 없는 요청과 유사하다. 응답이 리턴되지 않을 것이기 때문에 id가 필요 없는 것이다. 이 경우, `id` 속성은 생략(버전 2.0)되거나 `null`(버전 1.0)이어야 한다.

3. 2. 요청 구조

JSON-RPC에서 요청은 원격 시스템에서 제공하는 특정 메서드를 호출하는 것이다. 모든 전송 타입은 JSON을 사용해 직렬화한 단일 객체이다.[1] 요청은 다음 세 가지 속성을 포함해야 한다.[9]

  • `method`: 호출될 메서드의 이름 문자열.
  • `params`: 정의된 메소드에 대한 파라미터로서 전달될 객체들의 배열.
  • `id`: 임의 타입의 값. 이것은 요청에 대해 대응되는 응답을 매치시킨다.


응답이 필요없거나 처음부터 요구되지도 않는 상황들이 있기 때문에, 알림(notification)이 도입되었다. 알림은 id가 없는 요청과 유사하다. 응답이 반환되지 않을 것이기 때문에 id가 필요없는 것이다. 이 경우, `id` 속성은 생략(버전 2.0)되거나 `null`(버전 1.0)이어야 한다.

3. 3. 응답 구조

요청을 받은 측은, 받은 모든 요청에 대해 올바른 응답을 반환해야 한다. 응답은 아래 언급된 속성들을 포함해야 한다.

  • `result` - 호출된 메소드에 의해 반환되는 데이터. 메소드 호출 중 에러가 발생했다면, 이 값은 null이어야 한다.[4]
  • `error` - 메소드 호출 중 에러가 있었으면, 특정한 에러 코드. 아니면 `null`.[5] 객체는 ''code''(정수)와 ''message''(문자열) 멤버를 포함해야 한다.[6] 선택적 ''data'' 멤버는 서버별 추가 데이터를 포함할 수 있다. XML-RPC에 대해 정의된 오류 코드를 따르는 사전 정의된 오류 코드가 있다.
  • `id` - 응답하는 요청의 id.

3. 4. 알림

응답이 필요 없거나 처음부터 요구되지 않는 상황을 위해 알림(notification)이 도입되었다. 알림은 응답이 반환되지 않으므로 `id`가 필요하지 않다는 점을 제외하면 요청과 유사하다. 이 경우 `id` 속성은 생략(버전 2.0)하거나 `null`(버전 1.0)이어야 한다.[3]

4. 예제

다음 예시에서 `-->`는 서비스로 전송된 데이터(''요청'')를 나타내고, `<--`는 서비스에서 전송된 데이터를 나타낸다. `<--`는 클라이언트-서버 컴퓨팅에서 종종 ''응답''이라고 불리지만, JSON-RPC 버전에 따라 반드시 ''요청에 대한 응답''을 의미하지는 않는다.[1]

버전 2.0, 버전 1.1, 버전 1.0에 대한 예시는 각 하위 섹션을 참고.

4. 1. 버전 2.0

javascript

  • -> {"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 3}

<-- {"jsonrpc": "2.0", "result": 19, "id": 3}

```

위 예시는 `subtract` 메서드에 `minuend`와 `subtrahend` 파라미터를 사용하여 요청하고, 결과로 19를 받는 것을 보여준다. 요청과 응답 모두 `"id": 3`을 통해 연결된다.

```javascript

  • -> {"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}

```

위 예시는 `update` 메서드에 `[1,2,3,4,5]` 파라미터를 전달하는 알림(notification)을 보여준다. 알림은 응답을 받지 않는다.

서버에 대한 요청은 `-->`로, 서버의 응답은 `<--`로 나타낸다.[1]

4. 2. 버전 1.1 (Working Draft)

다음은 요청과 응답 예시이다. 서버에 대한 요청은 `-->`로, 서버의 응답은 `<--`로 나타낸다.

```javascript

  • -> {"version": "1.1", "method": "confirmFruitPurchase", "params":

<-- {"version": "1.1", "result": "done", "error": null, "id": "194521489"}

```

```javascript

  • -> {"version": "1.1", "method": "confirmFruitPurchase", "params":

<-- {"version": "1.1", "result": "done", "error": null, "id": "194521489"}

4. 3. 버전 1.0

javascript

  • -> {"method": "echo", "params": ["Hello JSON-RPC"], "id": 1}

<-- {"result": "Hello JSON-RPC", "error": null, "id": 1}

```

다음 예제에서는 서버에 대한 요청을 `-->`로, 서버의 응답을 `<--`로 나타낸다(단, 응답은 JSON-RPC 버전에 따라 필수가 아닐 수 있다).[1]

참조

[1] 웹사이트 specification - JSON-RPC - Trac http://json-rpc.org/[...] 2008-05-14
[2] 웹사이트 JSON-RPC 2.0 Specification https://www.jsonrpc.[...]
[3] 웹사이트 JSON-RPC 2.0 Specification https://www.jsonrpc.[...]
[4] 웹사이트 JSON-RPC 2.0 Specification https://www.jsonrpc.[...]
[5] 웹사이트 JSON-RPC 2.0 Specification https://www.jsonrpc.[...]
[6] 웹사이트 JSON-RPC 2.0 Specification https://www.jsonrpc.[...]
[7] 웹사이트 JSON-RPC 2.0 Specification https://www.jsonrpc.[...]
[8] 문서 RFC 4627 https://tools.ietf.o[...]
[9] 웹인용 specification - JSON-RPC - Trac http://json-rpc.org/[...] 2008-05-14



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com