자바스크립트에서 JSON RPC를 구현하는 방법

JSON RPC는 원격 프로시저 호출(RPC) 프로토콜 중 하나로, 클라이언트와 서버 간에 통신을 원활하게 할 수 있는 방법입니다. 이 글에서는 자바스크립트에서 JSON RPC를 구현하는 방법에 대해 알아보겠습니다.

JSON RPC란?

JSON RPC는 JSON 데이터를 이용하여 클라이언트-서버 간의 원격 메서드 호출을 수행하는 프로토콜입니다. 클라이언트는 JSON으로 요청을 보내고, 서버는 해당 요청에 대한 응답을 JSON으로 반환합니다. 이를 통해 간단한 형태의 RPC를 구현할 수 있습니다.

자바스크립트에서 JSON RPC 구현하기

자바스크립트에서 JSON RPC를 구현하는 방법은 다양하지만, 가장 간단하고 효율적인 방법은 XMLHttpRequest 객체를 이용하는 것입니다. 아래는 예시 코드입니다.

function sendRPCRequest(method, params, onSuccess, onError) {
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/jsonrpc', true);
  
  // JSON RPC 요청 형식으로 데이터 생성
  var requestData = {
    jsonrpc: '2.0',
    method: method,
    params: params,
    id: Math.random().toString(36).substr(2, 9) // 임의의 ID 생성
  };
  
  xhr.setRequestHeader('Content-Type', 'application/json');
  
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        var response = JSON.parse(xhr.responseText);
        
        if (response.error) {
          onError(response.error);
        } else {
          onSuccess(response.result);
        }
      } else {
        onError('Server error: ' + xhr.status);
      }
    }
  };
  
  xhr.onerror = function() {
    onError('Network error');
  };
  
  xhr.send(JSON.stringify(requestData));
}

위의 코드는 sendRPCRequest라는 함수를 정의하고 있습니다. 이 함수는 서버에 JSON RPC 요청을 보내는 역할을 합니다.

이 함수를 사용하여 JSON RPC 요청을 보내고 응답을 처리하는 방법은 다음과 같습니다.

sendRPCRequest('add', [5, 10], function(result) {
  console.log('Sum:', result);
}, function(error) {
  console.error('Error:', error);
});

위의 예시는 add라는 메서드에 [5, 10]라는 파라미터를 전달해 서버에 요청을 보내는 코드입니다. 성공적인 응답인 경우 result 값을 출력하고, 에러가 발생한 경우 error 메시지를 출력합니다.

JSON RPC 서버 구현하기

클라이언트에서 JSON RPC 요청을 처리하기 위해서는 서버에서도 JSON RPC 요청을 처리할 수 있는 코드가 필요합니다. 이를 위해 서버 사이드에서는 해당 요청을 처리하기 위한 핸들러를 구현해야 합니다.

JSON RPC 서버를 구현하는 방법은 서버 사이드 플랫폼에 따라 다를 수 있습니다. 아래 예시는 Node.js에서 JSON RPC 요청을 처리하는 방법입니다.

const http = require('http');

function handleRPCRequest(request, response) {
  let requestData = '';

  request.on('data', (chunk) => {
    requestData += chunk;
  });

  request.on('end', () => {
    try {
      const rpcRequest = JSON.parse(requestData);
      
      // 요청에 대한 작업 수행
      
      const rpcResponse = {
        jsonrpc: '2.0',
        result: // 결과 값,
        id: rpcRequest.id
      };
      
      response.statusCode = 200;
      response.setHeader('Content-Type', 'application/json');
      response.end(JSON.stringify(rpcResponse));
    } catch (error) {
      response.statusCode = 500;
      response.setHeader('Content-Type', 'application/json');
      response.end(JSON.stringify({ jsonrpc: '2.0', error: { code: 500, message: 'Internal Server Error' } }));
    }
  });
}

const server = http.createServer((request, response) => {
  // JSON RPC 요청을 처리하는 핸들러 호출
  handleRPCRequest(request, response);
});

server.listen(3000, () => {
  console.log('JSON RPC server is running on port 3000');
});

위의 예시 코드는 Node.js에서 HTTP 서버를 생성하고, 클라이언트에서 전송한 JSON RPC 요청을 처리하기 위한 핸들러를 구현한 것입니다. 핸들러에서는 요청에 대한 작업을 수행한 후 응답을 생성하여 클라이언트에게 반환합니다.

이러한 방식으로 JSON RPC를 자바스크립트에서 구현할 수 있습니다. JSON RPC는 원격 프로시저 호출을 단순화하고 편리하게 만들어주기 때문에 다양한 애플리케이션에서 유용하게 활용될 수 있습니다.