3. Nest.js 광부왕 게임 서버 로그 저장 [로그 데이터]

2023. 2. 19. 19:07프로젝트/게임 서버 - Nest.js

- Log DB

DB : MongoDB

 

사용 이유 : 대용량의 데이터를 저장 하기 유리한 NoSql 방식의 MongoDB 사용

 

1. 라이브러리 설치

@nestjs/mongoose mongoose 설치

npm install --save @nestjs/mongoose mongoose

 

 

2. model 파일 생성

model 폴더 안에 model 파일 생성

logs.model.ts

 

* 로그 저장 설정 : 로그 저장 기간은 3개월이 되면 자동으로 제거되도록 설정 한다.

 

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

const options = {
  timestamps: true,
  collection: 'logs',
};

const expire = 1000 * 60 * 60 * 24 * 30 * 12;
@Schema(options)
export class Logs extends Document {
  @Prop({
    required: true,
    default: [],
  })
  accountLog: any[];

  @Prop({
    required: true,
    default: [],
  })
  stageLog: any[];

  @Prop({
    required: true,
    default: [],
  })
  itemLog: any[];

  @Prop({
    required: true,
    default: [],
  })
  companyLog: any[];

  @Prop({
    required: true,
  })
  user: string;

  @Prop({
    required: true,
  })
  date: string;

  @Prop({ default: Date.now() + expire })
  expireAt: Date;
}

export const LogsSchema = SchemaFactory.createForClass(Logs);

 

3. app.module.ts mongoose Module 설정

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Companies } from './model/companies.model';
import { GameRecords } from './model/game-records.mode';
import { Gifts } from './model/gifts.model';
import { Items } from './model/items.model';
import { Stages } from './model/stages.model';
import { Users } from './model/users.model';

//Mongoose Module import
import { MongooseModule } from '@nestjs/mongoose';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    
    //MongooseModule 설정 부분
    MongooseModule.forRoot(process.env.MONGO_DB, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    }),
    
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: process.env.MYSQL_HOST,
      port: Number(process.env.MYSQL_PORT),
      username: process.env.MYSQL_USERNAME,
      password: process.env.MYSQL_PASSWORD,
      database: process.env.MYSQL_DB,
      entities: [Companies, GameRecords, Gifts, Items, Stages, Users],
      synchronize: JSON.parse(process.env.MYSQL_SYNC),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

728x90
반응형