🐳 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
'Node.js > Nest.js' 카테고리의 다른 글
[Nest.js] TypeORM을 활용해 공식문서처럼 Repository 만들기 (0) | 2023.07.02 |
---|---|
[Nest.js] 게시판 만들기 토이프로젝트 2일차 회고 (0) | 2023.07.01 |
[Nest.js] 게시판 만들기 토이프로젝트 1일차 ( ERD 그리기 ) (0) | 2023.06.25 |
[Nest.js] Layered Architecture ( 계층화 구조 ) 는 무엇이고 왜 사용할까? (0) | 2023.06.24 |
[Nest.js] Controller 라우팅 에러 (url 동적할당/ 정적할당) (0) | 2023.06.11 |