**RPC(Remote Procedure Call)**는 서버에 데이터를 요청해 응답받는 과정을 라이브러리에서 자동으로 처리한다. 단순히 로컬단말에서 함수를 호출하는 것처럼 코드를 만들기만 해도 클라이언트와 서버 간에 데이터를 주고받는 기능이 동작한다.
JSON-RPC는 JSON포맷으로 데이터를 주고받을 수 있어 자바스크립트를 사용하는 노드 프로그램에서 훨씬 자연스럽게 사용할 수 있다.
서버와 데이터를 주고받는 기능은 RPC가 담당하기 때문에 개발자는 클라이언트에서 일반 함수를 사용하듯 서버에 데이터를 요청하기만 하면된다.
라이브러리에서는 STUP을 통해 서버로 요청을 보낸다. 필요한 데이터를 주고받을 때 사용하는 데이터 포맷은 XML,바이너리 포맷등이 있다.
JSON-RPC 공식 사이트 JSON-RPC Wiki 사이트
JSON-RPC는 어떤 OS와 언어를 사용하든 서로 데이터를 주고 받을 수 있도록 다양한 언어로 작성된 라이브러리가 있다. 여기서는 jayson모듈을 사용한다.
$ npm install jayson --save
웹 서버로 요청하는 패스 중 한 가지 패스를 JSON-RPC로 실행하도록 만들 수 있다. 이러한 함수들을 보통 **Handler(핸들러)**라고 부른다.
console.log("handler_info 파일 로딩됨");
var handler_info = [
{file : './echo', method: 'echo'}
];
module.exports = handler_info;
file은 핸들러 모듈 파일의 이름이고 method는 등록한 핸들러의 이름이다.
echo핸들러는 클라이언트에서 보낸 데이터를 그대로 클라이언트로 다시 보내 주는 단순한 기능을 하는 함수이다.
// echo 함수
var echo = function(params, callback) {
console.log('JSON-RPC echo 호출됨.');
console.dir(params);
callback(null, params);
};
module.exports = echo;
첫번째 파라미터는 클라이언트로부터 전달받은 것이며 배열 객체로 되어있다. 두번째 파라미터는 함수로 클라이언트한테 응답을 보낼 때 사용한다. 클라이언트에서 보내 온 데이터를 그대로 다시 보낼 것이므로 **callback() **함수를 호출하면서 params객체를 그대로 넣어준다.
속성 | 설명 |
---|---|
id | 요청 ID를 지정할 수 있다. 이 요청 ID는 서버로부터 받는 응답을 구별하는데 사용한다. |
params | 서버로 보낼 데이터를 넣는 배열 객체 |
success | 응답을 성공적으로 받았을 때 호출되는 콜백 함수 |
error | 오류 응답을 받았을 때 호출되는 콜백 함수 |
속성 | 설명 |
---|---|
id | 요청할 때 전달한 id 값이 들어 있다. |
jsonrpc | JSON-RPC 스펙의 버전을 표기한다. |
result | 응답 데이터가 배열 객체로 들어있다. |
RPC와 기존 방식의 가장 큰 차이점은 서버에서 응답 받는 것이 웹 문서가 아니라 데이터라는 것이다.
// echo 에러 테스트 함수
var echo_error = function(params, callback) {
console.log('JSON-RPC echo_error 호출됨.');
console.dir(params);
// 파라미터 체크
if (params.length < 2) { // 파라미터 부족
callback({
code: 400,
message: 'Insufficient parameters'
}, null);
return;
}
var output = 'Success';
callback(null, output);
};
module.exports = echo_error;
이 함수에서는 클라이언트에서 보내 온 데이터를 확인한다.