ConfigModule

express.js를 사용하셨던 분이라면, dotenv 모듈을 사용하여 환경변수에 접근하는 방식이 익숙하실 겁니다. Nest.js에서는 dotenv를 래핑한 @nestjs/config 모듈을 지원하기 때문에, 공식적으로 해당 모듈 사용을 권장합니다.

환경변수를 특정 모듈에서 사용하기 위해선, ConfigModule을 반드시 import 해줘야 합니다. isGlobal 옵션을 같이 주면, 환경변수를 어디서든 process.env.ENV_VAR_NAME을 통해 접근할 수 있습니다. 해당 옵션을 주지 않으면, configService를 주입받아서 사용해야 합니다. 이번에는 전자의 경우만 설명하고, 후자의 경우엔 나중에 기회가 되면 찾아보시면 좋을 것 같습니다.

import { Module } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { ServeStaticModule } from "@nestjs/serve-static";
import { join } from "path";

@Module({
    imports: [
        ConfigModule.forRoot({
            isGlobal: true,
        }),
        ServeStaticModule.forRoot({
            rootPath: join(__dirname, "..", "..", "client", "build"),
        }),
    ],
    controllers: [AppController],
    providers: [AppService],
})
export class AppModule {}

Prisma

시작하기

Prisma와 Nest를 연동하는 작업은 npx prisma init 명령어를 통해 시작할 수 있습니다. 하지만, 그 전에 설치가 되어 있지 않다면, prisma를 먼저 설치해야 되겠죠? 다음 명령어를 통해 prisma를 먼저 설치할 수 있습니다. npm install prisma --save-dev

Prisma는 기본 세팅 파일을 자동으로 설정해주는 명령어를 지원합니다. npx prisma init를 통해 파일을 생성해보세요. 그럼 prisma 폴더 안에 schema.prisma 파일과, 루트 디렉토리에 .env파일이 생성된 것을 보실 수 있을 겁니다.

schema.prisma 파일은 크게 세 부분으로 구분지어볼 수 있습니다. Generator, Data Source, Data Model이 바로 그것이죠. Generator는 Prisma 클라이언트를 정의하는 블럭이고, Datasource는 연결할 DB에 대한 정보를, Model은 엔터티(테이블)을 정의하는 부분이라고 보시면 됩니다.

우리 프로젝트에서는 schema.prisma 파일 안에 datasource 블럭 부분을 mysql에 맞게 수정하여 mysql과 연동을 시켜보려고 합니다. 아래와 같이 mysql을 사용하게끔 datasource 블럭을 바꿔주면 됩니다. 저희 프로젝트에는 이미 연동되게끔 파일을 올려두어서 pull만 하시면 될 거에요. 하지만, .env 파일의 경우, git에 올라가지 않다보니 따로 설정을 해주셔야 합니다. 아래 코드를 보면서 각자 로컬 설정에 맡게 URL 부분을 수정해주세요.

// prisma/schema.prisma
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

// .env
// DATABASE_URL="mysql://${사용자이름}:${비밀번호}@${호스트명}:${포트번호}/${DB_이름}
DATABASE_URL=mysql://root:12345678@localhost:3306/runwithme

이제, model 부분만 작성하면 db에 테이블을 생성할 수 있게 됩니다.

모델 만들기