준비사항
TypeORM 및 MySQL 패키지 설치
npm i @nestjs/typeorm typeorm mysql2
Nest JS와 TypeORM으로 프로젝트 코드 구성
controller, service 파일은 각자 구성하였다고 가정하고 Nest.js 을 실행했을 때 가장 먼저 열리는 초기 파일인 app.module.ts 파일에 대한 설정에 대해 다뤄보려고 한다.
기본적인 코드는 아래와 같이 작성했다.
// app.module.ts
import Joi from 'joi';
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { Post } from './post/entities/post.entity';
import { PostModule } from './post/post.module';
const typeOrmModuleOptions = {
useFactory: async (
configService: ConfigService,
): Promise<TypeOrmModuleOptions> => ({
type: 'mysql',
host: configService.get('DB_HOST'),
port: configService.get('DB_PORT'),
username: configService.get('DB_USERNAME'),
password: configService.get('DB_PASSWORD'),
database: configService.get('DB_NAME'),
entities: [Post],
synchronize: configService.get('DB_SYNC'),
logging: true,
}),
inject: [ConfigService],
};
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
validationSchema: Joi.object({
DB_HOST: Joi.string().required(),
DB_PORT: Joi.number().required(),
DB_USERNAME: Joi.string().required(),
DB_PASSWORD: Joi.string().required(),
DB_NAME: Joi.string().required(),
DB_SYNC: Joi.boolean().required(),
}),
}),
TypeOrmModule.forRootAsync(typeOrmModuleOptions),
PostModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
이 때, env로 설정해놓은 변수들을 설정해주어야 한다.
// .env
DB_HOST=<localhost> 또는 <rds 주소[rds 엔드포인트]>
DB_PORT=3306(mysql 기본포트번호로 적음)
DB_USERNAME=<데이터베이스 아이디>
DB_PASSWORD=<데이터베이스 비밀번호>
DB_NAME=<DB생성시 부여할 이름>
DB_SYNC=<true> 또는 <false>
DB_SYNC 값이 들어가는 속성을 보면 synchronize에 들어가는 것을 볼 수 있다.
synchronize는 우리가 서버를 실행할 때마다 entities의 최신화 버전을 동기화 할 것이냐, 말것이냐를 선택하는 옵션이라고 보면 된다. 개발단계에서는 true로 설정해놓고 하는 경우가 많은데 프로덕션 단계에서는 바로 반영되면 안되는 경우도 있기 때문에 적절하게 상황에 맞추어 설정하면 된다.
DB 생성하기
Nest.js의 TypeORM으로 DB를 생성하는 방법에는 여러가지가 있다.
- cmd를 이용해 mySQL에 들어가 DB생성하기
- vscode를 이용해 DB생성하기
- DBEAVER를 이용해 DB 생성하기
cmd를 이용해 DB 생성하기
cmd에서 MySQL로 들어가는 명령어는 다음과 같다.
// cmd
mysql -u <데이터베이스 아이디> -p
// example
mysql -u root -p
❗ 주의사항
현재 명령어는 localhost로 MySQL에 접속하는 명령어이다.
나의 경우 localhost로 접속하는 명령어인줄 모르고 여기서 DB를 만들었는데 여기서 생성된 DB가 RDS에 연결된 DBEAVER에서 보이지 않아 꽤나 애먹었다..
만약 RDS에 연결하여 DB를 생성하고 싶다면 다음과 같은 명령어를 써주자.
// cmd
mysql -h <RDS 주소[RDS 엔드포인트]> -u <데이터베이스 아이디> -p
❗mysql 명령어가 듣지 않는다면?
https://yoonchan1121.tistory.com/124
올바르게 작성했다면 "Enter password"라는 문구가 뜨는데 RDS 생성시 작성했던 데이터베이스의 비밀번호를 입력해주면 된다.
정상적으로 연결되었다면 cmd 시작 문구가 " mysql> "로 바뀌게 된다.
여기까지 완료했다면 다음 명령어로 db를 생성할 수 있다.
// cmd
create database <생성할 DB이름>;
위와 같은 문구가 떴다면 정상적으로 생성되었다는 것을 알 수 있다.
그래도 눈으로 확인하고 싶다면 SHOW DATABASE; 를 사용하자.
물론, VS Code의 mysql 익스텐션이나, DBEAVER, MySQL workbench로도 확인이 가능하다.
VS Code를 이용해 DB 생성하기(feat. MySQL 익스텐션)
1. vscode를 키고 왼쪽 EXPLORER 탭 아래쪽 MySQL 탭에서 rds 데이터베이스 우클릭 후 "New Query" 실행
2. "create database <생성할 DB이름>;" sql 명령어 입력 후 sql파일에서 우클릭 후 "Run MySQL Query"실행
3. "affectedRows:1"이 나온다면 정상적으로 실행이 되었다는 것을 알 수 있다.
4. rds 데이터베이스 우클릭 후 refresh 버튼을 누르면 DB가 생성된 것을 확인할 수 있다.
DBEAVER를 이용하여 DB생성하기
1. rds 데이터베이스에 연결하기
2. 좌측 상단 database 우클릭 - "Create New Database" 클릭 - 원하는 데이터베이스 이름 작성후 "확인" 클릭
'ORM' 카테고리의 다른 글
[Prisma] 초기 세팅 및 순서 (0) | 2023.12.12 |
---|---|
[Prisma] model에 ENUM값 추가하기 (0) | 2023.12.09 |