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는 신뢰성 있는 데이터 전송을 위한 연결 지향 프로토콜로, 순서와 손실을 관리하여 안정적인 통신을 제공합니다. 3-way 핸드쉐이킹으로 연결 설정하고 4-way 핸드쉐이킹으로 연결을 해제합니다. 파일 전송, 이메일, 웹 브라우징과 같은 신뢰성 필요한 서비스에 사용됩니다.
UDP는 비연결성 프로토콜로, 데이터의 신뢰성을 보장하지 않고 빠른 데이터 전송을 지향합니다. 데이터 순서와 손실이 발생할 수 있지만 연결 설정 과정이 없어 더 빠른 전송이 가능합니다. 실시간 반응성이 필요한 스트리밍, 온라인 게임 등에 사용됩니다.