Node.js/Nest.js

Docker로 Mysql 사용해 NestJS 프로젝트와 연결하기

후뿡이 2023. 8. 11. 01:05

🐳 Mysql Docker Container 생성하기

 

먼저 mysql Official Image에서 사용법을 살펴보자

docker run --name {Container name} -e MYSQL_ROOT_PASSWORD={your password} -p 3306:3306 -d mysql:tag

 

1. --name : 컨테이너 이름을 명명한다.

2. MYSQL_ROOT_PASSWORD : 필수적으로 입력해야 하며 root 슈퍼유저의 비밀번호를 설정한다. 이를 이용해서 초기에 데이터베이스에 접근할 수 있다 !

MYSQL_ROOT_PASSWORD
This variable is mandatory and specifies the password that will be set for the MySQL 
root
 superuser account. In the above example, it was set to 
my-secret-pw.

3. -p 3306:3306 : 왼쪽은 내 컴퓨터의 3306번 포트를 의미하고 오른쪽은 컨테이너의 3306번 포트를 의미한다.

즉 -p 3306:3306 을 하게 되면 내 컴퓨터의 3306번 포트와 컨테이너의 3306번 포트를 연결해 주라는 의미가 된다.

4. -d : 백그라운드에서 실행하라는 의미이다.

5. tag : Mysql image의 버전을 설정할 수 있다.

6. 추가로 컨테이너에 저장된 데이터를 내가 지정한 스토리지에 저장하고 싶은 경우 -v ( volume ) tag 를 사용해주면 된다 !

✅ 먼저 image를 pull 하지 않더라도 명령어를 실행하면 image가 없는 경우 알아서 image를 pull 한다 !

 

🐳 실행결과

제대로 컨테이너가 생성된 것을 확인할 수 있었다.

이제는 NestJS 프로젝트를 생성한 후 typeORM을 이용해 연결해 보자 !

 

🐳 NestJS 프로젝트 생성 및 typeORM 세팅

1. 프로젝트 생성

@nestjs/cli 가 global 하게 설치되어 있다면 아래의 명령어를 실행해주자

npx nest new docker-test

 

그러면 위와 같이 project를 생성할 수 있다. ( 저는 프로젝트 명을 docker-test로 설정해 주었습니다 )

 

2. 필요한 모듈 설치

그 후에 프로젝트 폴더 내에 typeorm @nestjs/typeorm mysql2를 설치해 주자

npm i --save typeorm @nestjs/typeorm mysql2

 

3. typeORM 설정 세팅

nestjs의 Database 부분 공식문서를 참고해 typeORM을 활용한 DB에 접속하는 방법을 알아보자

 

// app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'test',
      database: 'mysql',
      synchronize: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

위의 코드처럼 typeORM 설정을 app.module.ts에 작성해 주자 

✅ 이때 password는 처음 Container를 생성할 때 MYSQL_ROOT_PASSWORD 에 입력한 password를 사용해야 한다 !

( 저는 password 를 test로 설정했기 때문에 설정에 test라고 입력했습니다. )

 

그런 후에 server를 실행해 보자 !

 

🐳 실행 결과

DB가 정상적으로 연결 되어 서버가 실행된 모습을 확인할 수 있다 !!

 

간단해 보이면서도 docker의 태그들의 의미를 찾아가느라 애를 먹었다 ... 그리고 정말 많은 에러들을 만났다 .. 

MYSQL_ROOT_PASSWORD 가 root 계정의 password를 설정해 주는 부분이니 조심해서 작성하자 !

 

그리고 뭔가 모를 때는 ChatGPT도 좋고 블로그도 다 좋지만 무조건!!! 공식문서를 꼭 읽어보자 !

 

모든 방법을 동원해 봤지만 결국 공식문서를 읽으니 해결됐다.

mysql docker image 공식 문서 : https://hub.docker.com/_/mysql

NestJS Database 공식문서 : https://docs.nestjs.com/techniques/database