NestJS 설치 및 MySQL 연동
May 05, 2021
1. NestJS 설치
-
NestJS cli 설치 및 프로젝트 생성
npm i -g @nestjs/cli nest new project-name
2. NestJS DB 커넥션 모듈 추가
-
의존성 라이브러리 설치
npm i --save @nestjs/config npm install --save @nestjs/typeorm typeorm mysql2
-
.env
파일 추가## .env.development DB_HOST=localhost DB_PORT=3306 DB_USERNAME=scott DB_PASSWORD=tiger DB_DATABASE=local
-
Config
모듈 및TypeORM
모듈 추가// config/configuration.ts import 'dotenv/config'; export default () => ({ host: process.env.DB_HOST ?? '', port: process.env.DB_PORT ?? 3306, username: process.env.DB_USERNAME ?? '', password: process.env.DB_PASSWORD ?? '', database: process.env.DB_DATABASE ?? '', }); // app.module.ts import { ConfigModule, ConfigService } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import configuration from './config/configuration'; import { join } from 'path'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [configuration], envFilePath: ['.env.development', '.env.production', '.env'], }), TypeOrmModule.forRootAsync({ imports: [ConfigModule], useFactory: (configService: ConfigService) => ({ type: 'mysql', host: configService.get('host'), port: +configService.get<number>('port'), username: configService.get('user'), password: configService.get('password'), database: configService.get('database'), entities: [join(__dirname, '/**/*.entity.js')], synchronize: true, }), inject: [ConfigService], }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
3. Docker-compse로 MySQL 환경 구성
-
docker-compose.yml
파일 추가version: '3.9' volumes: db_dev: {} services: db: image: mysql command: --default-authentication-plugin=mysql_native_password restart: always volumes: - db_dev:/var/lib/mysql ports: - ${DB_PORT}:3306 environment: - MYSQL_RANDOM_ROOT_PASSWORD=yes - MYSQL_USER=${DB_USERNAME} - MYSQL_PASSWORD=${DB_PASSWORD} - MYSQL_DATABASE=${DB_DATABASE} adminer: image: adminer restart: always ports: - 8080:8080
-
docker-compose 실행
docker-compose --env-file ./.env.development --file docker-compose.dev.yml up -d
-
트러블 슈팅
-
docker-compose.yml
파일에서environment
타입 오류 발생→
environment: key:value
을environment: key=value
로 수정 -
docker-compose.yml
로 이미지 생성 후 실행 시 db 컨테이너가 재시작 하는 오류 발생→
MYSQL_USER
를root
가 아닌 다른 이름으로 수정 -
adminer
서비스에서db
서비스로 로그인이 안됨→
adminer
로그인 서버 정보를localhost
가 아니라docker-compose.yml
에서 지정한 서비스 명인db
로 입력
-