ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿƒ NestJS + MongoDB ์™„์ „ ์ •๋ณต – Mongoose ์—ฐ๋™ ๊ฐ€์ด๋“œ


NestJS๋Š” MongoDB๋ฅผ ์œ„ํ•œ ๊ณต์‹ ๋ชจ๋“ˆ๋กœ **@nestjs/mongoose**๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด **Mongoose ODM(Object Data Modeling)**์„ Nest์˜ DI(์˜์กด์„ฑ ์ฃผ์ž…) ์•„ํ‚คํ…์ฒ˜์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์€ NestJS ๊ณต์‹ ๋ฌธ์„œ MongoDB๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ,
์‹ค๋ฌด์—์„œ MongoDB๋ฅผ NestJS๋กœ ํšจ์œจ์ ์œผ๋กœ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก NestJS + Mongoose ์กฐํ•ฉ์€ MongoDB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋งค์šฐ ์ ํ•ฉํ•˜๋ฉฐ,
๋ณต์žกํ•œ Schema ์„ค๊ณ„์™€ ์œ ์—ฐํ•œ ์ฟผ๋ฆฌ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


โœ… 1. ์„ค์น˜

npm install @nestjs/mongoose mongoose

โœ… 2. MongoDB ์—ฐ๊ฒฐ ์„ค์ •

// app.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost/nestdb'), // URI๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ ๊ถŒ์žฅ
  ],
})
export class AppModule {}

โ˜‘๏ธ .env ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ MONGODB_URI ๊ฐ’์„ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๋„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.


โœ… 3. ์Šคํ‚ค๋งˆ ์ •์˜

NestJS๋Š” Mongoose์˜ Schema ํด๋ž˜์Šค๋ฅผ @Schema() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค.

// user.schema.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type UserDocument = User & Document;

@Schema()
export class User {
  @Prop({ required: true })
  name: string;

  @Prop()
  email: string;
}

export const UserSchema = SchemaFactory.createForClass(User);
๋ฐ˜์‘ํ˜•

 

์ด ์ง€์ ์€ ์Šคํ‚ค๋งˆ ์ •์˜์™€ ์‹ค์ œ Nest ์„œ๋น„์Šค์— ํ†ตํ•ฉ๋˜๋Š” ์˜ˆ์ œ๊ฐ€ ๋‚˜์˜ค๋Š” ํ•ต์‹ฌ ํŒŒํŠธ์ž…๋‹ˆ๋‹ค.
์• ๋“œ์„ผ์Šค ๊ด‘๊ณ  ์‚ฝ์ž…์— ์ตœ์ ์ž…๋‹ˆ๋‹ค.

<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-XXXXXX"
     data-ad-slot="YYYYYY"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>

โœ… 4. ์Šคํ‚ค๋งˆ ๋ชจ๋“ˆ์— ๋“ฑ๋ก

// user.module.ts
import { MongooseModule } from '@nestjs/mongoose';
import { Module } from '@nestjs/common';
import { User, UserSchema } from './user.schema';
import { UserService } from './user.service';

@Module({
  imports: [
    MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
  ],
  providers: [UserService],
})
export class UserModule {}

โœ… 5. ์„œ๋น„์Šค์—์„œ Mongoose ๋ชจ๋ธ ์ฃผ์ž…

// user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User, UserDocument } from './user.schema';

@Injectable()
export class UserService {
  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}

  async findAll(): Promise<User[]> {
    return this.userModel.find().exec();
  }

  async create(data: Partial<User>): Promise<User> {
    return new this.userModel(data).save();
  }
}

โœ… 6. Controller์—์„œ ์‚ฌ์šฉ

// user.controller.ts
@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get()
  async getAllUsers() {
    return this.userService.findAll();
  }

  @Post()
  async createUser(@Body() body: { name: string; email: string }) {
    return this.userService.create(body);
  }
}

๐Ÿ’ก ์‹ค๋ฌด ํŒ – ๋ณต์žกํ•œ ๊ด€๊ณ„ ์„ค๊ณ„

  • MongoDB๋Š” ์ฐธ์กฐํ˜• ๊ด€๊ณ„(Population) ๋˜๋Š” ๋‚ด์žฅํ˜•(Embedded) ์„ค๊ณ„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • NestJS + Mongoose์—์„œ๋„ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฐธ์กฐ ์„ค์ • ๊ฐ€๋Šฅ:
@Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'User' })
author: User;
this.postModel.find().populate('author').exec();

๐Ÿง  NestJS + MongoDB ์‹ค์ „ ์ „๋žต

๊ธฐ๋Šฅ NestJS ๊ตฌ์„ฑ ์š”์†Œ

Mongo ์—ฐ๊ฒฐ MongooseModule.forRoot()
์Šคํ‚ค๋งˆ ์ •์˜ @Schema(), @Prop()
DB ์ž‘์—… ์ˆ˜ํ–‰ @InjectModel()์œผ๋กœ ์ฃผ์ž…๋ฐ›์€ Model<T> ์‚ฌ์šฉ
๋ฌธ์„œ ๊ด€๋ฆฌ (Document) T & Document ํƒ€์ž…์œผ๋กœ ํƒ€์ž… ์•ˆ์ •์„ฑ ํ™•๋ณด
๊ด€๊ณ„ ์„ค์ • (Population) ref: '๋ชจ๋ธ๋ช…' ์œผ๋กœ ๊ด€๊ณ„ ์„ค์ • + populate() ์‚ฌ์šฉ

โœ… ์žฅ์  ์š”์•ฝ

  • โœ… Nest์˜ DI์™€ Mongoose ๋ชจ๋ธ์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ
  • โœ… ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•œ NoSQL ์„ค๊ณ„ ๊ฐ€๋Šฅ
  • โœ… Schema, Document, Model์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ
  • โœ… populate, Index ๋“ฑ Mongoose์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ์ง€์›

 

NestJS MongoDB,NestJS Mongoose,NestJS NoSQL ์—ฐ๋™,NestJS Mongo ์Šคํ‚ค๋งˆ,NestJS MongooseModel ์‚ฌ์šฉ๋ฒ•,NestJS DB ์—ฐ๋™ ๊ฐ€์ด๋“œ,NestJS Mongo ์‹ค๋ฌด,NestJS ODM,NestJS populate ๊ด€๊ณ„ ์„ค์ •,NestJS Document ๋ชจ๋ธ


 

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•