개발/Node & Javascript

Nest.js 탐험기 6 - microservice (grpc) 를 사용해보자 - Metadata 설정

말고기 2022. 2. 13. 22:22
728x90
반응형

개요

  • 이전 챕터까지는 통신방식의 구현까지 다루었다.
  • 이제부터는 부가 기능에 대해서 하나씩 다루어 보려고 한다.
  • 우선 이번에는 Metadata를 다루어 보자.

Metadata

  • HTTP Header와 같이 GRPC에서는 metadata를 설정할 수 있다. (metadata)
  • 실제적으로 Headers frame을 통해서 통신한다.

예제

예제 1. 서버에서 클라이언트 헤더 값을 받을 때

// HeroesController에 아래와 같이 값을 가져올 수 있다.
@GrpcMethod('HeroesService', 'FindOne')
findOne(data: HeroById, metadata?: Metadata, call?: ServerUnaryCall<any,any>): Hero {
  // console.log('method call', data, metadata, call);
  const items = [
    { id: 1, name: 'John' },
    { id: 2, name: 'Doe' },
  ];

  const malgogi = metadata?.get('malgogi');
  console.log(`metadata: ${malgogi}`);
  return items.find(({ id }) => id === data.id);
}

위의 코드를 통해서 테스트하면 아래와 같이 값을 볼 수 있다.

예제 2. 서버에서 클라이언트에 헤더 값을 전송할 때

서버에서 클라이언트로 헤더값을 보낼 때는 call.sendMetadata를 활용하면 된다.

// ... 위의코드에서 call에 metadata를 전송할 수 있다.
const respMeta = new Metadata();
respMeta.add('c', 'd');
call.sendMetadata(respMeta);

결론

  • nest.js에서 grpc를 통해서 metadata를 주고 받는법을 살펴보았다.
  • 실제로 headers frame을 통해서 통신하며, 이를 통해서 공통된 로직들을 쉽게 처리할 수 있을 것이다.
728x90
반응형