자바스크립트 기반 NestJS 애플리케이션의 동시성 처리 방법

NestJS는 Node.js를 기반으로 하는 서버 사이드 애플리케이션 개발을 위한 프레임워크로, 자바스크립트와 TypeScript를 모두 지원합니다. 동시성 처리는 웹 애플리케이션의 성능과 확장성을 향상시키는 중요한 요소이며, NestJS에서도 효율적인 동시성 처리 방법을 제공합니다.

비동기 프로그래밍

NestJS에서 동시성 처리를 위해 주로 사용되는 방법은 비동기 프로그래밍입니다. 이를 위해 JavaScript의 async/awaitPromise를 사용할 수 있습니다.

async function getProduct(id) {
  try {
    const product = await ProductService.getById(id);
    console.log(product);
  } catch (error) {
    console.error(error);
  }
}

위 예제에서 getProduct 함수는 ProductService.getById 메서드를 비동기로 호출하고, 해당 결과를 받아와서 로깅합니다. 만약 에러가 발생하면 적절한 처리를 합니다. async 키워드를 사용하여 함수를 비동기 함수로 정의하고, await 키워드를 사용하여 비동기 작업의 완료를 기다립니다.

병렬 처리

NestJS에서 비동기 작업을 병렬로 처리하기 위해 Promise.all 메서드를 사용할 수 있습니다. Promise.all 메서드는 여러 개의 비동기 작업을 동시에 실행하고, 모든 작업이 완료될 때까지 기다린 후 결과를 반환합니다.

async function processOrders(orderIds) {
  try {
    const orders = await Promise.all(
      orderIds.map(orderId => OrderService.getById(orderId))
    );
    
    console.log(orders);
  } catch (error) {
    console.error(error);
  }
}

위 예제에서 processOrders 함수는 OrderService.getById 메서드를 orderIds 배열의 각 요소에 대해 병렬로 호출하고, 모든 작업이 완료된 후에 결과를 받아와서 로깅합니다. Promise.all 메서드를 사용하여 병렬로 실행되는 모든 작업의 완료를 기다립니다.

웹 소켓을 통한 실시간 통신

NestJS는 웹 소켓을 지원하여 실시간 통신을 가능하게 합니다. 이를 통해 동시성 처리와 함께 실시간으로 데이터를 전송하고 받을 수 있습니다. NestJS에서 웹 소켓을 사용하기 위해서는 @nestjs/websockets 패키지를 설치하고, @WebSocketGateway 데코레이터를 사용하여 웹 소켓 게이트웨이를 정의해야 합니다.

import { WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
import { Server } from 'socket.io';

@WebSocketGateway()
export class AppGateway {
  @WebSocketServer()
  server: Server;

  handleConnection(client) {
    console.log('New client connected');
  }

  handleDisconnect(client) {
    console.log('Client disconnected');
  }

  sendMessage(message) {
    this.server.emit('message', message);
  }
}

위 예제에서 AppGateway 클래스는 웹 소켓 게이트웨이를 정의하며, handleConnectionhandleDisconnect 메서드는 클라이언트의 연결과 연결 해제 이벤트를 처리합니다. sendMessage 메서드는 데이터를 전송하는데 사용됩니다.

NestJS 애플리케이션에서 비동기 작업과 실시간 통신을 효율적으로 처리하기 위해 위와 같은 방법을 활용할 수 있습니다. 동시성 처리를 올바르게 구현하면 애플리케이션의 성능과 확장성을 크게 향상시킬 수 있습니다.

참고 자료:

#NestJS #비동기프로그래밍