Etc

[NestJS] mysql 데이터베이스 연동하기

체리1001 2022. 7. 6.

오늘은 Nest.js와 mysql DB 연동을 진행해 보겠습니다.

 

0. Mysql 설치

우선 너무나도 당연한거지만 컴퓨터에 mysql이 설치되어 있어야 합니다. 혹은 docker를 사용해 주셔도 됩니다~

https://dev.mysql.com/downloads/mysql/

 

MySQL :: Download MySQL Community Server

Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86

dev.mysql.com

 

컴퓨터에 mysql이 설치되어 있는지 확인해보고 싶으면 mysql --version 명령을 통해 확인할 수 있습니다.

mysql --version

 

mysql 설치 이후에는 실행하여 비밀번호를 설정해줘야 사용이 가능합니다!!

 

1. Mysql2 설치하기

왜 mysql이 아닌 mysql2를 설치하는걸까?

mysql은 콜백 기반이기 때문에 Promise를 사용하지 못하고 promise-mysql 모듈을 따로 설치해야만 사용이 가능합니다. 반면 mysql2는 Promise를 지원하기 때문에 추가적으로 다른 모듈을 설치할 필요가 없다.

npm i --save mysql2

 

2. TypeORM 설치

TypeORM은 NestJS에서 제공하는 ORM(Object-relational mapping) 입니다.

https://github.com/typeorm/typeorm

 

GitHub - typeorm/typeorm: ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL

ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Elect...

github.com

npm i --save @nestjs/typeorm typeorm

 

 

3. mysql 연결

(1) .env.dev 파일 생성

DB 연결을 위한 정보는 따로 관리해야 하기 때문에 .env.dev 파일을 만들어 DB 정보를 입력해 줍니다.

 

(2) app.module.ts 설정

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: process.env.NODE_ENV == 'dev' ? '.env.dev' : '.env.test',
      ignoreEnvFile: process.env.NODE_ENV === 'prod',
    }),
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: process.env.DB_HOST,
      port: +process.env.DB_PORT,
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      synchronize: false,
      logging: true,
      entities: [entity 목록],
      autoLoadEntities: true,
    }),
  ],
  controllers: [],
  providers: [],
})

forRoot() 메소드 인자로 앞서 작성한 .env.dev 파일에 있는 DB 정보를 넣어주면 됩니다! 처음 연결을 진행할 때 Entity 파일을 작성하고 synchronize를 true로 설정하면 자동으로 테이블이 만들어진다.

 

(3) entity 생성

DB 연결 확인을 위해 User entity를 생성해 봅시다!

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

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar', nullable: false, unique: true })
  userId: string;

  @Column({ type: 'varchar', nullable: false })
  pwd: string;

  @Column({ type: 'varchar', nullable: false, unique: true })
  email: string;

  @Column({ type: 'varchar', nullable: false, unique: true })
  phoneNumber: string;

  @Column({ type: 'varchar', nullable: false })
  name: string;
}

app.module.ts의 entities에 User를 넣어주고 서버를 실행시켰을 때 아무런 오류 없이 실행이 된다면 DB 연결 성공!

table 목록을 확인하면 user 테이블이 자동으로 생성된 것을 볼 수 있습니다 :)

 

 

참고
https://yuni-q.github.io/backend/typeorm-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0/ 
https://it-timehacker.tistory.com/166 https://velog.io/@suasue/NestJS-TypeORM-Mysql-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0 https://docs.nestjs.com/techniques/database 

'Etc' 카테고리의 다른 글

Flyway checksum 에러  (0) 2024.04.15

댓글