오늘은 Nest.js와 mysql DB 연동을 진행해 보겠습니다.
0. Mysql 설치
우선 너무나도 당연한거지만 컴퓨터에 mysql이 설치되어 있어야 합니다. 혹은 docker를 사용해 주셔도 됩니다~
https://dev.mysql.com/downloads/mysql/
컴퓨터에 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
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 |
---|
댓글