[typescript] 타입스크립트로 마이크로서비스 간 통신 구현하기

마이크로서비스 아키텍처에서는 각 서비스가 독립적으로 구축되고 실행됩니다. 이러한 독립성은 서비스 간에 효과적인 통신 메커니즘을 필요로 합니다. 타입스크립트는 이러한 마이크로서비스 간의 통신을 구현하기 위한 강력한 도구로 사용될 수 있습니다. 이번 블로그에서는 타입스크립트를 사용하여 마이크로서비스 간의 통신을 구현하는 방법에 대해 알아보겠습니다.

1. 마이크로서비스 간의 통신을 위한 REST API

REST(Representational State Transfer)는 HTTP를 이용하여 자원을 처리하는 아키텍처입니다. 타입스크립트를 사용하여 RESTful API를 구현하고 호출하는 것은 비교적 간단합니다. 먼저 서비스 간 통신을 위한 REST API를 정의하고 해당 API를 호출하는 방법에 대해 살펴보겠습니다.

// REST API 정의
import axios from 'axios';

const getUser = async (userId: string) => {
  const response = await axios.get(`https://api.service1.com/users/${userId}`);
  return response.data;
};

// REST API 호출
const user = await getUser('123');
console.log(user);

2. 마이크로서비스 간의 통신을 위한 gRPC

gRPC는 고성능, 오픈소스, 범용 RPC(Remote Procedure Call) 프레임워크입니다. gRPC를 사용하면 효율적이고 안정적인 마이크로서비스 간의 통신을 구현할 수 있습니다. 타입스크립트를 사용하여 gRPC를 구현하고 호출하는 방법은 다음과 같습니다.

// gRPC 클라이언트 정의
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';

const packageDefinition = protoLoader.loadSync('protos/helloworld.proto', {
  keepCase: true,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: true,
});

const helloProto = grpc.loadPackageDefinition(packageDefinition);

const client = new helloProto.Greeter('server:50051', grpc.credentials.createInsecure());

// gRPC 호출
client.sayHello({ name: 'World' }, (err, response) => {
  console.log('Greeting:', response.message);
});

3. 마이크로서비스 간의 통신을 위한 메시징 시스템

메시징 시스템을 사용하여 비동기 방식으로 마이크로서비스 간 통신을 구현할 수도 있습니다. RabbitMQ, Kafka 등의 메시징 시스템을 사용하여 타입스크립트로 마이크로서비스 간의 이벤트 기반 통신을 구현할 수 있습니다. 예를 들어, RabbitMQ를 사용한 Pub/Sub 모델을 타입스크립트로 구현하는 방법은 다음과 같습니다.

// RabbitMQ로 메시지 전송
import amqp from 'amqplib';

const sendMessage = async () => {
  const connection = await amqp.connect('amqp://localhost');
  const channel = await connection.createChannel();
  const exchange = 'logs';

  channel.assertExchange(exchange, 'fanout', { durable: false });
  channel.publish(exchange, '', Buffer.from('Hello, world!'));

  await channel.close();
  await connection.close();
};

sendMessage();

결론

타입스크립트는 REST API, gRPC, 메시징 시스템 등 다양한 방식으로 마이크로서비스 간의 통신을 구현하는 데 활용될 수 있습니다. 각각의 방식에 따라 타입스크립트를 사용하여 효과적으로 마이크로서비스 간의 통신을 구현할 수 있습니다.

마이크로서비스 아키텍처에서 효과적인 통신은 서비스 간의 유연성과 확장성을 확보하는 데 중요한 요소입니다. 타입스크립트를 활용하여 이러한 통신을 구현함으로써 안정적이고 효율적인 마이크로서비스 아키텍처를 구축할 수 있을 것입니다.

참고문헌: