이전 포스트 Nest, Node의 프레임웍에 이어 NestJS에 DB를 연결 해보도록 하겠습니다.
들어가기 앞서 Nest의 기본적인 명령어를 알아 보겠습니다.
$ nest
>>>
│ name │ alias │ description │
│ application │ application │ Generate a new application workspace │
│ class │ cl │ Generate a new class │
│ configuration │ config │ Generate a CLI configuration file │
│ controller │ co │ Generate a controller declaration │
│ decorator │ d │ Generate a custom decorator │
│ filter │ f │ Generate a filter declaration │
│ gateway │ ga │ Generate a gateway declaration │
│ guard │ gu │ Generate a guard declaration │
│ interceptor │ in │ Generate an interceptor declaration │
│ interface │ interface │ Generate an interface │
│ middleware │ mi │ Generate a middleware declaration │
│ module │ mo │ Generate a module declaration │
│ pipe │ pi │ Generate a pipe declaration │
│ provider │ pr │ Generate a provider declaration │
│ resolver │ r │ Generate a GraphQL resolver declaration │
│ service │ s │ Generate a service declaration │
│ library │ lib │ Generate a new library within a monorepo │
│ sub-app │ app │ Generate a new application within a monorepo │
│ resource │ res │ Generate a new CRUD resource
nest의 명령어들 중 우리가 가장 많이 사용하는 세가지 이다.
$ nest generate module 모듈이름 or (nest g mo 모듈이름)
$ nest generate service 서비스이름 or (nest g s 서비스이름)
$ nest generate controller 컨트롤러이름 or (nest g co 컨트롤러이름)
NestJS 프레임웍의 가장 장점 중 하나로 해당 명령어들로 모듈, 서비스, 컨트롤러 또는 다른 것들을 생성할 때 자동으로 적용 시켜준 다는 것입니다.
$ npm i @nestjs/typeorm typeorm pg
일부 파일이 eslint 오류로 빨갛게 보이지만 스크립트 실행에 문제는 없습니다.
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const config: TypeOrmModuleOptions = {
type: 'postgres',
username: 'postgres',
password: 'root',
port: 5432, // 1
host: '127.0.0.1', // 2
database: 'nest-typeorm', // 3
synchronize: true, // 4
entities: ['dist/**/*.entity{.ts,.js}'], // 5
};
import { config } from './orm.config';
@Module({
imports: [TypeOrmModule.forRoot(config), UsersModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
해당 파일의 imports에 TypeOrmModule.forRoot(config) 추가한다.
$ nest generate module users
$ nest generate service users
$ nest generate controller users
해당 명령어를 차례대로 입력하면 users 폴더 아래에 모듈, 서비스, 컨트롤러가 생성된다.
실행 시 service, controllerd의 .spec.ts가 같이 생성되는데 Jest 테스팅에 사용 되는 파일이니 지우셔도 됩니다.
entity를 생성 할 때 users폴더 밖에 entity 폴더를 생성해서 따로 관리 해주어도 된다.
import { CreateDateColumn, PrimaryGeneratedColumn } from 'typeorm';
export class BaseEntity {
@PrimaryGeneratedColumn() // 1
id: number;
@CreateDateColumn({ nullable: true })
createdAt: Date;
@CreateDateColumn({ nullable: true })
updatedAt: Date;
}
import { BaseEntity } from '../base-entity';
import { Column, Entity } from 'typeorm';
@Entity('users')
export class User extends BaseEntity { // 1
@Column({ type: 'varchar', length: 100, nullable: false })
name: string;
@Column({ type: 'varchar', length: 100, nullable: false, unique: true })
email: string;
}
orm.config.ts 파일은 synchronize 속성 때문에 스크립트를 다시 실행 하지 않아도 PostgreSQL DB의 Table에 생성 되는 것을 볼 수 있습니다.
다음 포스트에서는 연결된 DB에 유저를 회원가입, 유저정보 수정, 유저 삭제 등을 해보도록 하겠습니다.
base-entity 코드에서 @CreateDateColumn({ nullable: true }) 여기 부분은
CreateDateColumn을 사용해서 type이 생략 된건가요??