gRPC란 무엇입니까? Node.js에서 gRPC를 구현하는 방법
6434 단어 microservicesshowdevnode
gRPC (gRPC Remote Procedure Calls) is an open source remote procedure call (RPC) system initially developed at Google. It uses HTTP/2 for transport, Protocol Buffers as the interface description language, and provides features such as authentication, bidirectional streaming and flow control, blocking or nonblocking bindings, and cancellation and timeouts.
너무 많은 전문 용어.. 맞죠?. 하나씩 분해해 봅시다.
프로토콜 버퍼가 있는 원격 프로시저 호출 및 Http/2 위에 구축된 gRPC.
RPC(원격 프로시저 호출)란 무엇입니까?
첫째, 네트워크 세부 사항을 이해하지 않고도 한 프로그램이 다른 네트워크의 다른 프로그램에 있는 서비스를 요청하는 데 사용할 수 있는 프로토콜입니다.
일반 프로시저 호출과 다릅니다. 커널을 사용하여 다른 네트워크의 다른 서비스에 대한 요청 호출을 만듭니다.
프로토콜 버퍼란 무엇입니까?
protocol buffers은 구조 데이터를 직렬화하는 언어 중립적인 방법입니다. 간단히 말해서 데이터를 이진 형식으로 변환하고 네트워크를 통해 데이터를 전송합니다. XML,JSON과 비교할 때 가볍습니다.
gRPC는 어떻게 작동합니까?
gRPC 클라이언트는 서버에 요청을 보내고 gRPC 서버는 응답을 다시 보냅니다. 가장 중요한 것은 gRPC가 요청을 보내고 받는 방식이 요청을 더욱 특별하게 만든다는 것입니다.
gRPC는 다른 통신에서는 지원하지 않는 양방향 스트리밍을 지원합니다. 양방향 스트리밍은 데이터 스트림을 보내고 데이터 스트림을 수신합니다. 요청/응답을 보내는 다른 방법이 있습니다.
단항 RPC - 단일 요청을 보내고 응답을 받는 방법입니다
서버 스트리밍 RPC: 서버 측에서 데이터 스트림을 보내는 과정입니다.
클라이언트 스트리밍 RPC: 클라이언트 측에서 데이터 스트림을 보내는 프로세스입니다.
Bi-Directional Streaming RPC's : 클라이언트와 서버에서 데이터 스트림을 보내는 과정입니다.
소스 : https://grpc.io/docs/guides/
Node.js에서 gRPC 구현
CRUD API로 간단한 할 일 애플리케이션을 빌드하여 Node.js에서 gRPC를 사용하는 방법을 살펴보겠습니다.
먼저 애플리케이션에 대한 종속성을 설치해야 합니다.
npm install --save grpc
npm install --save uuid
그런 다음 데이터의 프로토콜 버퍼에 불과한 todo.proto라는 파일을 만들어야 합니다.
데이터를 가져오는 API
syntax = "proto3";
service TodoService {
rpc List(Empty) returns (TodoList) {}
}
message Empty {}
message Todo {
string id=1;
string title = 2;
bool iscompleted = 3;
}
message TodoList {
repeated Todo todo = 1;
}
첫째, .proto 파일은 요청 및 응답 데이터를 구조화하기 위해 정의하는 방법과 같습니다.
주로 proto 버퍼 파일에는 Entity, Request Object 및 Response Object의 세 부분이 있습니다.
message Empty {}
서비스 rpc에서 사용되는 요청 객체입니다.
message TodoList {
repeated Todo todo = 1;
}
TodoList는 응답 객체입니다. 응답으로 클라이언트에 보냅니다. 참고로 반복이라는 것이 있습니다. 그것은 배열과 같은 것입니다. 여기에서 todo의 배열처럼 정의하고 있습니다.
이제 server.js라는 파일을 생성해야 합니다. 여기서 우리는 handle the request
const grpc = require('grpc');
const uuid = require('uuid/v1');
const todoproto = grpc.load('todo.proto')
const server = new grpc.Server()
server.bind('127.0.0.1:50051',
grpc.ServerCredentials.createInsecure())
console.log('server is running at http://127.0.0.1:50051')
server.start()
명령줄에서 server.js를 실행하면 다음 메시지가 표시됩니다.
서버는 http://127.0.0.1:50051에서 실행 중입니다.
node server.js
이제 서버 파일에 서비스를 추가해야 합니다. server.js 파일에 다음 코드를 추가하십시오.
server.addService(todoproto.TodoService.service,{
list : (_,callback) =>{
callback(null,todos)
}
})
그런 다음 gRPC 서버에 요청을 보내는 클라이언트 역할을 하는 client.js라는 파일 이름을 만듭니다.
const grpc = require('grpc');
const PROTO_PATH = './todo.proto'
const TodoService = grpc.load(PROTO_PATH).TodoService
const client = new TodoService('localhost:50051',
grpc.credentials.createInsecure())
module.exports = client
클라이언트에서 호출을 하려면 서비스를 호출하는 실제 파일에 파일을 가져와야 합니다. 클라이언트를 사용하여 서비스를 호출하는 get_todos.js라는 파일을 만듭니다.
const client = require('./client')
client.list({},(error,todos) => {
if(!error){
console.log('successfully fetched todo lists');
console.log(todos);
}
else{
console.error(error);
}
});
목록 API를 테스트합니다. 서비스를 호출하는 서버와 클라이언트를 실행해야 합니다.
node server.js
node get_todos.js
새 Todo를 만들기 위해 RPC 삽입 서비스 만들기
먼저 todo.proto 에 삽입 서비스를 추가해야 합니다.
syntax = "proto3";
service TodoService {
rpc List(Empty) returns (TodoList) {}
rpc Insert(Todo) returns (Todo) {}
}
message Empty {}
message Todo {
string id=1;
string title = 2;
bool iscompleted = 3;
}
message TodoList {
repeated Todo todo = 1;
}
그런 다음 server.js에 삽입 서비스를 추가해야 합니다.
server.addService(todoproto.TodoService.service,{
list : (_,callback) =>{
callback(null,todos)
},
insert : (call,callback) => {
let todo = call.request;
todo.id = uuid()
todos.push(todo)
callback(null,todo)
},
})
이제 클라이언트를 사용하여 삽입 서비스를 호출하는 insert_todo.js라는 파일을 만들어야 합니다.
const client = require('./client')
let newTodo = {
title : 'New checklist',
iscompleted : false
}
client.insert(newTodo,(error,todo) => {
if(!error){
console.log('New Todo inserted successfully');
}
else{
console.error(error);
}
})
그런 다음 명령줄을 사용하여 파일을 실행할 수 있습니다.
node server.js
node insert_todo.js
마찬가지로 업데이트 및 삭제 서비스 호출을 정의하고 gRPC 클라이언트에서 사용할 수 있습니다.
완전한 소스 코드는 여기에서 찾을 수 있습니다: https://github.com/ganeshmani/grpc-node
Reference
이 문제에 관하여(gRPC란 무엇입니까? Node.js에서 gRPC를 구현하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ganeshmani/what-is-grpc-how-to-implement-grpc-in-node-js-33p5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)