애플리케이션의 데이터 관리는 성공적인 소프트웨어 개발의 핵심 요소 중 하나입니다. 데이터베이스와의 원활한 통합은 데이터의 저장, 검색, 수정 및 삭제를 효율적으로 수행할 수 있게 해줍니다. 이번 포스트에서는 Nest.js 프레임워크를 사용하여 TypeORM과 Mongoose를 통해 관계형 및 비관계형 데이터베이스에 연결하는 방법을 자세히 살펴보겠습니다.
1. TypeORM 설정
TypeORM은 TypeScript로 작성된 ORM(Object-Relational Mapping) 라이브러리로, 관계형 데이터베이스와의 상호작용을 매우 용이하게 만들어줍니다. Nest.js에서 TypeORM을 사용하기 위해서는 다음과 같은 단계들을 차근차근 따라야 합니다.
1.1 패키지 설치
먼저, TypeORM과 MySQL 드라이버를 설치해야 합니다. 아래의 명령어를 실행하여 필요한 패키지를 설치합니다.
npm install --save @nestjs/typeorm typeorm mysql2
이 과정은 데이터베이스와의 연결을 위한 기초 작업으로, 이후의 모든 데이터베이스 작업에 필수적인 환경을 마련합니다.
1.2 데이터베이스 모듈 생성
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: 'your_username',
password: 'your_password',
database: 'your_database_name',
entities: [__dirname + '/**/*.entity{ .ts,.js}'],
synchronize: true,
}),
],
})
export class AppModule {}
1.3 엔티티(Entity) 정의
엔티티는 데이터베이스 테이블의 구조를 정의하는 클래스입니다. 이 클래스는 데이터베이스에서 어떤 데이터가 어떻게 저장될지를 결정합니다.
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
1.4 서비스(Service) 생성
데이터를 처리하기 위한 서비스를 생성하는 단계입니다. 이 서비스는 데이터베이스와의 상호작용을 담당하며, 비즈니스 로직을 구현하는 데 중요한 역할을 합니다.
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private userRepository: Repository<User>,
) {}
async createUser(name: string, email:string): Promise<User> {
const user = this.userRepository.create({ name, email });
return await this.userRepository.save(user);
}
async findAll(): Promise<User[]> {
return await this.userRepository.find();
}
}
1.5 컨트롤러(Controller) 생성
데이터 요청 및 응답 처리를 위한 컨트롤러를 만드는 단계입니다. 이 컨트롤러는 클라이언트의 요청을 받아 적절한 서비스 메소드를 호출하여 결과를 반환합니다.
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post()
create(@Body() body): Promise<User> {
return this.userService.createUser(body.name, body.email);
}
@Get()
findAll(): Promise<User[]> {
return this.userService.findAll();
}
}
이렇게 하면 기본적인 사용자 CRUD(Create, Read, Update and Delete) 기능을 갖춘 API가 완성됩니다. 이 API는 사용자 데이터를 효율적으로 관리하고, 클라이언트와의 상호작용을 원활하게 만들어줍니다.
2. Mongoose 설정
Mongoose는 MongoDB와 함께 사용할 수 있는 ODM(Object Document Mapper)으로, 비관계형 데이터베이스와의 상호작용을 쉽게 만들어줍니다.
2.1 패키지 설치
Mongoose 관련 패키지를 설치합니다.
npm install --save mongoose @nestjs/mongoose
이 과정은 MongoDB와의 연결을 위한 필수적인 준비 작업입니다.
2.2 모듈 설정
app.module.ts
파일에서 Mongoose 모듈을 불러오는 과정이 필요합니다.
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
@Module({
imports:[
MongooseModule.forRoot('mongodb://localhost/nest'),
],
})
export class AppModule {}
2.3 스키마(Schema) 정의
MongoDB 문서 구조를 정의할 스키마 클래스를 만드는 단계입니다. 이 스키마는 데이터베이스에 저장될 데이터의 형식을 결정합니다.
import * as mongoose from 'mongoose';
export const UserSchema = new mongoose.Schema({
name: String,
email: String,
});
2.4 서비스(Service) 및 컨트롤러(Controller) 생성
서비스와 컨트롤러 생성은 TypeORM과 유사하게 진행하되 MongoDB에 맞게 수정하면 됩니다. 이 과정에서 데이터베이스의 특성을 고려하여 적절한 메소드를 구현하는 것이 중요합니다.
결론
Nest.js에서는 다양한 유형의 데이터베이스에 손쉽게 연결하고 활용할 수 있는 강력한 기능을 제공합니다. TypeORM과 Mongoose를 통해 개발자는 데이터베이스와의 상호작용을 간편하게 처리할 수 있으며, 애플리케이션의 데이터 관리 효율성을 극대화할 수 있습니다. 이러한 통합은 애플리케이션의 성능을 향상시키고, 개발자의 생산성을 높이는 데 기여합니다.
'프로그래밍 > Nest.js' 카테고리의 다른 글
Nest.js: 현대 웹 애플리케이션 개발의 새로운 패러다임 (0) | 2025.03.22 |
---|---|
Docker를 이용한 Nest.js 애플리케이션 배포 가이드 (0) | 2025.03.22 |
Nest.js에서 프로바이더의 중요성과 활용 (0) | 2025.03.22 |
인증 및 인가: Nest.js에서의 안전한 웹 애플리케이션 구축 (0) | 2025.03.22 |
모듈의 중요성과 활용: Nest.js에서의 코드 구조화 (0) | 2025.03.21 |