[typescript] Nest.js에서 타입스크립트를 사용한 메시지 큐 처리

이번 포스트에서는 Nest.js 프레임워크에서 타입스크립트를 사용하여 메시지 큐를 처리하는 방법에 대해 알아보겠습니다. 메시지 큐는 시스템 간의 통신 및 비동기 작업 처리에 유용하며, Nest.js와 타입스크립트를 함께 활용하면 간편하게 메시지 큐를 다룰 수 있습니다.

1. Nest.js 프로젝트 설정

우선, Nest.js 프로젝트를 생성하고 필요한 의존성 패키지를 설치합니다.

npm install @nestjs/microservices amqplib

@nestjs/microservices 패키지는 Nest.js에서 마이크로서비스를 구축할 수 있도록 도와주고, amqplib는 RabbitMQ와 통신하기 위한 패키지입니다.

2. RabbitMQ 연결 설정

다음으로, RabbitMQ와의 연결을 설정합니다. MicroserviceOptions 객체를 사용하여 RabbitMQ 호스트 및 포트를 지정하고, Nest.js 애플리케이션과 연결합니다.

import { NestFactory } from '@nestjs/core';
import { RabbitMQOptions, Transport } from '@nestjs/microservices';

async function bootstrap() {
  const app = await NestFactory.createMicroservice<RabbitMQOptions>(
    AppModule,
    {
      transport: Transport.RMQ,
      options: {
        urls: ['amqp://localhost:5672'],
        queue: 'message_queue',
        queueOptions: {
          durable: false,
        },
      },
    },
  );
  app.listen(() => console.log('Microservice is listening'));
}
bootstrap();

위 코드에서 urls는 RabbitMQ 서버의 주소로 설정하고, queue는 메시지 큐의 이름을 지정합니다.

3. 메시지 송수신 구현

이제 메시지를 송수신하는 기능을 구현해보겠습니다.

import { Controller } from '@nestjs/common';
import { MessagePattern } from '@nestjs/microservices';

@Controller()
export class MessageController {
  @MessagePattern('message_queue')
  handleMessage(data: Record<string, unknown>) {
    console.log('Received message:', data);
    // 메시지 처리 로직 구현
  }
}

위 코드에서 @MessagePattern('message_queue')는 지정된 메시지 큐에서 메시지를 수신하는 핸들러를 정의합니다. 해당 핸들러 내부에서는 받은 메시지를 처리하는 로직을 추가할 수 있습니다.

결론

Nest.js와 타입스크립트를 사용하여 RabbitMQ와 통신하는 방법에 대해 간단히 알아보았습니다. 이를 활용하여 메시지 큐를 효과적으로 다루고 비동기 작업을 처리할 수 있습니다.

위 내용은 Nest.js 공식 문서 및 RabbitMQ 관련 자료를 참고하여 작성되었습니다.

더 자세한 내용은 Nest.js 공식 문서를 참고하시기 바랍니다.