프로그래밍/Nest.js

Nest.js에서 TypeORM 및 Mongoose 설정하기

shimdh 2025. 3. 19. 09:33
728x90

Nest.js는 현대적인 웹 애플리케이션 개발을 위한 강력한 프레임워크로, 다양한 데이터베이스와의 연동을 지원합니다. 이 글에서는 Nest.js에서 TypeORM과 Mongoose를 설정하는 방법에 대해 자세히 알아보겠습니다. 두 라이브러리는 각각 관계형 데이터베이스와 비관계형 데이터베이스를 다루는 데 유용하며, 개발자가 데이터를 효율적으로 관리할 수 있도록 돕습니다.

Meta description:

Nest.js에서 TypeORM과 Mongoose를 설정하는 방법을 알아보세요. 관계형 및 비관계형 데이터베이스와의 연동을 통해 애플리케이션의 데이터 관리를 효율적으로 할 수 있습니다.

1. TypeORM 개요

TypeORM은 TypeScript로 작성된 ORM(Object-Relational Mapping) 라이브러리로, 관계형 데이터베이스와의 상호작용을 간편하게 만들어줍니다. TypeORM의 주요 기능은 다음과 같습니다:

  • Entity: 데이터베이스 테이블에 대응하는 클래스를 정의하여 데이터 구조를 명확하게 표현합니다.
  • Repository: CRUD 작업을 수행하는 메서드를 제공하여 데이터베이스와의 상호작용을 간소화합니다.
  • Migration: 데이터베이스 스키마 변경을 쉽게 관리할 수 있는 기능으로, 안전하게 구조의 변화를 적용할 수 있습니다.

2. Mongoose 개요

Mongoose는 MongoDB를 위한 ODM(Object Document Mapping) 라이브러리로, NoSQL 데이터베이스인 MongoDB와 쉽게 상호작용할 수 있게 해줍니다. Mongoose의 주요 특징은 다음과 같습니다:

  • Schema: 문서 구조를 정의하고 유효성 검사를 추가하여 데이터의 일관성을 유지합니다.
  • Model: Schema에 따라 생성된 모델 인스턴스를 통해 MongoDB에서 데이터를 처리합니다.

3. Nest.js에서 TypeORM 설정하기

TypeORM을 Nest.js 프로젝트에 통합하려면 다음 단계를 따릅니다:

3.1 필요한 패키지 설치

npm install --save @nestjs/typeorm typeorm mysql2

3.2 AppModule 수정

app.module.ts 파일을 열고 TypeOrmModule을 임포트하여 설정합니다.

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'test',
      password: 'test',
      database: 'test_db',
      entities: [__dirname + '/**/*.entity{ .ts,.js}'],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

3.3 Entity 생성

사용자 정보를 저장하는 User 엔티티를 생성합니다.

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;
}

3.4 Repository 사용

Repository를 사용하여 간단한 CRUD 작업을 수행합니다.

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private userRepository: Repository<User>,
  ) {}

  async createUser(name: string, email: string): Promise<User> {
    const newUser = this.userRepository.create({ name, email });
    return await this.userRepository.save(newUser);
  }

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

4. Nest.js에서 Mongoose 설정하기

Mongoose를 설정하는 방법도 비슷합니다.

4.1 필요한 패키지 설치

npm install --save @nestjs/mongoose mongoose

4.2 AppModule 수정

app.module.ts 파일에 Mongoose 모듈을 추가하여 MongoDB와의 연결을 설정합니다.

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

@Module({
 imports: [
     MongooseModule.forRoot('mongodb://localhost/nest'),
 ],
})
export class AppModule {}

4.3 Schema 정의하기

사용자 정보를 위해 Schema를 정의합니다.

import * as mongoose from 'mongoose';

export const UserSchema = new mongoose.Schema({
 name: String,
 email: String,
});

4.4 Model 사용하기

서비스 내에서 Model 인스턴스를 이용하여 데이터를 조작합니다.

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';

@Injectable()
export class UserService {
 constructor(@InjectModel('User') private readonly userModel: Model<any>) {}

 async createUser(name: string, email: string): Promise<any> {
     const newUser = new this.userModel({ name, email });
     return await newUser.save();
 }

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

결론

Nest.js에서는 TypeORM과 Mongoose 같은 라이브러리를 활용하여 관계형 및 비관계형 데이터베이스와 효과적으로 연결하고 데이터를 관리할 수 있습니다. 각 기술의 특성을 이해하고 적절히 활용하면 더 나은 애플리케이션 개발이 가능하며, 이는 개발자의 생산성을 높이고 유지보수성을 향상시키는 데 기여할 것입니다. 데이터베이스와의 원활한 연동은 애플리케이션의 성능과 안정성에 중요한 영향을 미치므로, 이러한 도구들을 잘 활용하는 것이 중요합니다!

728x90