본문 바로가기

NestJS

Chapter3 - DB 연결(TypeORM)

안녕하세요 개발자 정씨입니다.

이번 포스팅에서는 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