안녕하세요 개발자 정씨입니다.
이번 포스팅에서는 docker를 이용해 MongoDB를 띄우고 typeORM을 이용해 연결해보겠습니다.
1. MongoDB
- 아래와 같은 명령어를 이용해 docker에서 mongoDB를 띄울수 있습니다.
docker pull mongo
docker run -d --name mongodb-container -p 27017:27017 mongo
2. typeORM 설치 및 설정
- 아래와 같은 명령어를 이용해 typeorm과 그에 필요한 dependency을 설치 할 수 있습니다.
npm install @nestjs/typeorm typeorm mongodb
- 설치가 완료되었다면 src/config/typeorm.config.ts를 생성하고 아래와 같이 설정파일을 작성합니다.
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const typeORMConfig: TypeOrmModuleOptions = {
type: 'mongodb',
host: 'localhost',
port: 27017,
database: 'nestjs',
entities: [__dirname + '/../**/*.entity.{ts,js}'],
synchronize: true,
};
- 위의 설정을 import하기 위해 app.module.ts을 아래와 같이 수정합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeORMConfig } from './config/typeorm.config';
import { UserModule } from './user/user.module';
import { ProductModule } from './product/product.module';
@Module({
imports: [TypeOrmModule.forRoot(typeORMConfig), UserModule, ProductModule],
})
export class AppModule {}
3. Entity
- Entity는 주로 ORM에서 사용되며, 데이터베이스의 구조와 정보를 표현하는 객체입니다.
- src/user/entity/user.entity.ts를 생성하고 아래와 같이 작성합니다.
import { Entity, Column, ObjectIdColumn, ObjectId } from 'typeorm';
@Entity()
export class Calculation {
@ObjectIdColumn()
_id: ObjectId;
@Column()
email: string;
@Column()
password: string;
@Column()
name: string;
}
@Entity | 해당 Class가 Entity임을 명시합니다. |
@ObjectIdColumn | 해당 Property가 ObjectID 형식의 기본 키 |
@Column | 해당 Property가 데이터베이스의 Column임을 명시합니다. |
4. DTO
- DTO(Data Transfer Object)는 계층간(Service, controller) 데이터 교환을 위한 객체입니다.
- interface로도 구현이 가능하지만, class사용이 일반적입니다.
- 데이터 유효성을 체크하는데 효율적이고 더 안정적입니다.
- src/user/dto/create-user.dto.ts를 생성하고 아래와 같이 작성합니다.
export class CreatePlusDto {
email: string;
password: string;
name: string;
}
5. Pipes
- pipes는 data transformation(데이터를 원하는 형태로 변환)과 data validation(데이터의 유효성 검사)를 위해 사용합니다.
- 우선 main.ts를 아래와 같이 수정하여, 글로벌하게 파이프를 설정해줍니다.
import { NestFactory } from '@nestjs/core';
import { ValidationPipe } from '@nestjs/common';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
- 필요한 패키지들을 설치해줍니다.
npm install class-validator class-transformer
- 위의 DTO에 Pipe를 적용시켜, 아래와 같이 작성 합니다.
import { IsString, IsEmail, IsNotEmpty } from 'class-validator';
export class CreatePlusDto {
@IsEmail()
@IsNotEmpty()
email: string;
@IsString()
@IsNotEmpty()
password: string;
@IsString()
@IsNotEmpty()
name: string;
}
'NestJS' 카테고리의 다른 글
Chapter2 - Module 구성 (0) | 2023.12.07 |
---|---|
Chapter1 - 구조 살펴보기 (0) | 2023.09.22 |