NestJS와 Socket.IO를 활용한 실시간 채팅 서버 구축하기

sh.j225·2023년 8월 28일
0

NestJS와 MongoDB 연동하기

NestJS와 MongoDB를 연동하여 데이터를 저장하고 관리할 수 있는 환경을 구축해보겠습니다. MongoDB는 NoSQL 데이터베이스로서 JSON 형식의 데이터를 저장하며, NestJS에서는 TypeORM을 통해 MongoDB와 손쉽게 연동할 수 있습니다.

import { TypeOrmModuleOptions } from '@nestjs/typeorm';

export const typeOrmConfig: TypeOrmModuleOptions = {
  type: 'mongodb',
  host: 'localhost',
  port: 27017,
  database: 'chat_app',
  entities: [__dirname + '/../**/*.entity{.ts,.js}'],
  synchronize: true,
};

채팅 서버 구축하기

Socket.IO를 사용하여 실시간 채팅 서버를 구축해봅시다. NestJS에서는 @nestjs/websockets 모듈을 사용하여 쉽게 WebSocket 기능을 구현할 수 있습니다.


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

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

  @SubscribeMessage('chatMessage')
  handleChatMessage(client: Socket, data: { message: string }): void {
    this.server.emit('chatMessage', {
      user: client.id,
      message: data.message,
      timestamp: new Date(),
    });
  }
}

결제 시스템 구축하기

또한, 결제 시스템을 트랜잭션과 소켓을 활용하여 구축해봅시다. NestJS에서는 @nestjs/typeorm 모듈의 @Transaction() 데코레이터와 @TransactionManager() 데코레이터를 사용하여 트랜잭션을 간편하게 처리할 수 있습니다.

import { Controller, Post, Body, HttpCode, HttpStatus } from '@nestjs/common';
import { PaymentService } from './payment.service';
import { PaymentDto } from '../dto/payment/payment.dto';
import { Transaction, TransactionManager } from 'typeorm';

@Controller('payments')
export class PaymentController {
  constructor(private readonly paymentService: PaymentService) {}

  @Post()
  @HttpCode(HttpStatus.CREATED)
  @Transaction() // 트랜잭션 시작
  async createPayment(
    @TransactionManager() manager: EntityManager,
    @Body() paymentDto: PaymentDto,
  ): Promise<void> {
    await this.paymentService.createPayment(manager, paymentDto);
    // API 로직 추가
  }
}

오늘의 질의 응답😎

TCP/UDP에 대해서 설명해주세요.

나의 답변 😄

TCP는 신뢰성 있는 데이터 전송을 위한 연결 지향 프로토콜로, 순서와 손실을 관리하여 안정적인 통신을 제공합니다. 3-way 핸드쉐이킹으로 연결 설정하고 4-way 핸드쉐이킹으로 연결을 해제합니다. 파일 전송, 이메일, 웹 브라우징과 같은 신뢰성 필요한 서비스에 사용됩니다.

UDP는 비연결성 프로토콜로, 데이터의 신뢰성을 보장하지 않고 빠른 데이터 전송을 지향합니다. 데이터 순서와 손실이 발생할 수 있지만 연결 설정 과정이 없어 더 빠른 전송이 가능합니다. 실시간 반응성이 필요한 스트리밍, 온라인 게임 등에 사용됩니다.

0개의 댓글