프로젝트 생성
TodoList 프로젝트를 만들기 위한 프로젝트 생성을 합니다.
nestjs의 기본 프로젝트 생성은 아래의 링크에서 확인하시면 자세한 설명을 확인하실 수 있습니다.
1. 프로젝트 생성
npm i -g @nestjs/cli
nest new nest-graphql-todolist
2. 프로젝트 실행
npm run start:dev
Typeorm + Mysql
TodoList 프로젝트의 Todo를 관리하기 위해서 Typeorm과 mysql을 사용하기로 했습니다.
프로젝트 생성을 했기 때문에 Typeorm과 mysql 연결을 위한 구성과 간단한 todo entity를 만들어보겠습니다.
1. Package 설치
npm install --save @nest/typeorm typeorm mysql2 @nestjs/config joi
2. Config 구성
config.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import * as Joi from 'joi';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
validationSchema: Joi.object({
DB_HOST: Joi.string().required(),
DB_PORT: Joi.string().required(),
DB_USERNAME: Joi.string().required(),
DB_PASSWORD: Joi.string().required(),
DB_NAME: Joi.string().required(),
DB_CHARSET: Joi.string().required(),
}),
}),
TypeOrmModule.forRoot({
type: 'mysql',
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
charset: process.env.DB_CHARSET,
autoLoadEntities: true,
synchronize: true,
logging: true,
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
}),
],
})
export class CommonConfigModule {}
CommonConfigModule을 app.module.ts 파일 imports에 추가합니다.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CommonConfigModule } from './common/config/config.module';
@Module({
imports: [CommonConfigModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
config 종속성이 없는 상태로 실행하면 에러가 발생하여 env 파일을 정상적으로 불러오기 위해 config 종속성과 스키마 유효성 검사를 위한 joi를 구성했습니다.
3. Todo Entity 만들기
이제 typeorm과 mysql을 연결했으니 이번 프로젝트에서 메인으로 사용할 todo entity를 만들어보겠습니다.
nest
nest만 명령어 입력하게 되면 위 이미지 처럼 nest의 여러가지 command와 options가 나옵니다. 여기에서 사용하기 적합한걸 골라 사용하시면 됩니다.
저는 지금 기본적으로 todo module을 생성하려고하기 때문에 mo를 사용하겠습니다.
nest g mo todo
todo 폴더 안에 entities라는 폴더를 만들고 그 안에 todo.entity.ts 를 만들어보겠습니다. 여기서 주의할건 typeorm module을 구성할 때 entities는 *.entity.ts or *.entity.js 으로 하기로 약속했기 때문에 형식을 유지하여 파일을 생성해야합니다.
.....
TypeOrmModule.forRoot({
.....
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
}),
.....
todo.entity.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class Todo {
@PrimaryGeneratedColumn()
id: number;
// PK
@Column()
title : string
// todo의 제목
@Column()
description : string
// todo의 자세한 설명
@Column()
deadline : Date
// todo의 마감기한
}
todo.module.ts
객체 매핑을 위한 TodoModule에 Typeorm과 entity를 연결합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Todo } from './entities/todo.entity';
@Module({
imports : [TypeOrmModule.forFeature([Todo])]
})
export class TodoModule {}
마무리
다음 글에서는 본격적으로 Graphql을 다뤄보겠습니다.
감사합니다.
'Backend > Nestjs' 카테고리의 다른 글
[Nestjs] Nestjs + GraphQL 적용한 TodoList 만들기 (4) (0) | 2022.02.14 |
---|---|
[Nestjs] Nestjs + GraphQL 적용한 TodoList 만들기 (3) (0) | 2022.02.07 |
[Nestjs] Nestjs + GraphQL 적용하기 (1) (0) | 2022.01.17 |