nest js -5 Connect to DataBase(mysql) with TypeORM
이번에는 NestJS에 TypeORM을 사용하도록 하겠습니다. TypeORM은 쿼리문을 사용하지 않고서도 DB의 Table, column, record등을 TypeScript로 작성할수 있게 해주는 툴입니다.
![]() |
사진1) dependencies 설치 |
$ npm i --save mysql2 typeorm @nestjs/typeorm
먼저 위 사진처럼 3개의 dependencies를 추가합니다.
![]() |
사진2) config폴더 및 파일 생성 |
이제 위 사진처럼 폴더와 파일을 생성합니다.
// typeorm.config.ts : /src/config
// TypeORM의 option 설정
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
// TypeORM과 DataBase를 연결하기 위한 셋팅
export const typeOrmConfig:TypeOrmModuleOptions = {
type: 'mysql', // 데이터베이스 타입
host: 'localhost', // 주소
port: 3306, // 데이터베이스 포스트
username: 'root', // 데이터베이스 소유자 이름
password: 'password', // 데이터베이스 비밀번호
database: 'members', // 데이터베이스 이름
autoLoadEntities: true, // 자동으로 entities를 DB에 배포
synchronize: true // 동기화
};
typeorm.config.ts파일에는 DB에 접속하기 위한 정보와 그 위의 것들을 작성합니다.
![]() |
사진3) entity, repository생성 |
entity, repository ts파일을 생성한다.
// member.entity.ts : /src/members
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Member {
// pk number 생성
@PrimaryGeneratedColumn()
id: number;
// 컬럼 생성 : name
@Column()
name: string;
// 컬럼 생성 : password
@Column()
password: string;
// 컬럼 생성 : email
@Column()
email: string;
// 컬럼 생성 : age
@Column('int') // int는 정수
age: number;
}
member.entity.ts 파일에는 테이블과 테이블에 들어가는 컬럼을 작성해 줍니다. 여기서 다른 테이블과 일대다, 다대다, 다대일 관계도 설정할수 있지만 이번 글에서는 테이블을 생성하도록 하겠습니다.
// member.repository.ts : /src/members
import { Member } from './member.entity';
import { EntityRepository, Repository } from 'typeorm';
// Member entity를 불러서 DB의 테이블 생성
@EntityRepository(Member)
export class MemberRepository extends Repository<Member> {
}
이제 실제 DB에 테이블을 생성하는 코드입니다. 위 코드에서 여러 method를 추가하여 DB작업을 할수 있습니다. 이번 글에서는 테이블만 생성하겠습니다.
// member.module.ts : /src/members
// module를 생성하는데 필요한 component
import { Module } from '@nestjs/common';
// MembersController, MembersService를
// 각각의 파일에서 import한다.
import { MembersController } from './member.controller';
import { MembersService } from './member.service';
// MemberRepository를 module에 import한다.
import { MemberRepository } from './member.repository';
// TypeOrmModule를 적용
import { TypeOrmModule } from '@nestjs/typeorm';
// members모델 생성
@Module({
imports:[
TypeOrmModule.forFeature([MemberRepository])
],
// 해당 controllers(members컨트롤) 및
// providers(members서비스)를 배열로 입력.
controllers: [MembersController],
providers: [MembersService],
})
export class MembersModule{
}
이제 member모듈의 imports에 추가를 해줍니다. 이때 TypeOrmModule.forFeature를 사용하여 줍니다.
// app.module.ts : /src/
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
// AppModule에 추가하려는 ProductsModule를 import
import { MembersModule } from './members/member.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfig } from './config/typeorm.config';
import { ConfigModule } from '@nestjs/config';
@Module({
// ProductsModule를 현 AppModule에 추가하였다.
imports: [
MembersModule,
TypeOrmModule.forRoot(typeOrmConfig),
ConfigModule.forRoot({
isGlobal: true
})
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
![]() |
사진4) members DB는 존재하지 않음 |
하지만 DB는 직접 생성하셔야 합니다. 따라서 아래와 같은 쿼리문을 작성합니다.
mysql> CREATE DATABASE members;
![]() |
사진5) members DB생성 |
$ npm run start:dev
![]() |
사진6) 코드 실행 |
![]() |
사진7) DB에 Table생성 |
위와 같이 따라하게되면 DB에 Table을 생성할수 있습니다. 위 코드들은 nest js글을 작성하면서 짠것입니다.
댓글
댓글 쓰기