이 페이지에서는...

users 라는 이름의 모듈, 컨트롤러, 서비스, (커스텀)레포지토리를 만들어서 DB에 접근하는 방법을 기록한다.

TypeORM - mysql2 설치

npm install @nestjs/typeorm typeorm mysql2

users 모듈, 컨트롤러, 서비스 생성

nest generate module users
nest generate controller users
nest generate service users

Untitled

TypeORM 세팅

먼저 TypeORM에 데이터베이스 세팅을 해주도록 한다.

루트 모듈인 app.module.ts 에는 TypeORM과 데이터베이스를 연결하는 기초적인 세팅을 하고,

users.module.ts 에는 생성할 테이블(엔티티)을 정의해준다고 생각하면 된다.

세팅은 TypeOrmModule.forRoot() 메소드를 사용한다.

app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersModule } from './users/users.module';

@Module({
  imports: [
    **TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: '유저이름',
      password: '패스워드',
      database: '사용할 데이터베이스'

			// 이 옵션을 넣어주어야 상위 모듈에서 지정한 엔티티를 불러온다.
			autoLoadEntities: true
			
			// 서버가 시작할 때마다 테이블을 생성하는 옵션 - 디버깅 후에는 꼭 지우기!
			synchronize: true,
			// 이미 테이블이 있으면 테이블을 drop하는 옵션 - 디버깅 후에는 꼭 지우기!
      dropSchema: true,
    }),**
    UsersModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

엔티티 생성

테이블로 사용할 엔티티를 만들어준다.

users 폴더 안에 users.entity.ts 파일을 만든다.

users.entity.ts

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Users {
	// 기본키
  @PrimaryGeneratedColumn()
  userId: number;
	
	// 여러가지 컬럼 옵션이 있는데 찾아보기
  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Column({ default: true })
  isActive: boolean;
}

커스텀 레포지토리 생성