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 같은 라이브러리를 활용하여 관계형 및 비관계형 데이터베이스와 효과적으로 연결하고 데이터를 관리할 수 있습니다. 각 기술의 특성을 이해하고 적절히 활용하면 더 나은 애플리케이션 개발이 가능하며, 이는 개발자의 생산성을 높이고 유지보수성을 향상시키는 데 기여할 것입니다. 데이터베이스와의 원활한 연동은 애플리케이션의 성능과 안정성에 중요한 영향을 미치므로, 이러한 도구들을 잘 활용하는 것이 중요합니다!
'프로그래밍 > Nest.js' 카테고리의 다른 글
Nest.js: 현대 웹 애플리케이션 개발의 새로운 패러다임 (0) | 2025.03.19 |
---|---|
Nest.js 애플리케이션의 프로덕션 환경 설정 가이드 (0) | 2025.03.19 |
Nest.js 애플리케이션의 성능 최적화 및 모니터링 전략 (1) | 2025.03.19 |
Nest.js에서의 컨트롤러: 웹 애플리케이션의 중추적 역할 (0) | 2025.03.19 |
인증 및 인가: JWT 및 OAuth2 설정으로 보안 강화하기 (0) | 2025.03.19 |