2021. 6. 8. 10:15ㆍNest.js
평소에 Nest.js관련 글에 API 만들기 관련된 포스트가 없어 직접 만들면서 공부하게 되었습니다. 해당 블로그는 공부를 남기기 위한 용도입니다. 피드백 부탁드립니다.
1. DOTENV를 생성하자.
Database 연동에 앞서서 우리는 Database 연결에 필요한 정보들을 가지고 있을 필요가 있습니다. 우리는 코드를 깃으로 관리를 하고 깃허브를 통해서 저장을 하려고합니다.
하지만, 그렇게 된다면 Database에 대한 정보를 저장소에 올리게 되기때문에 보안이 좋지 않습니다. Private Repository
라도 마음이 편하지가 않습니다.
그래서 우리는 이러한 크리틱한 정보들을 한 파일에서 관리를 하고 해당 파일은 저장소에 올리지 않은채 보관을 하고싶습니다. 그래서 우리는 dotenv
라는 것을 사용하려고 합니다.
npm install --save dotenv
가장 최상단 폴더에 .env.development
와 .env.production
을 생성해 보겠습니다. 두 개의 파일을 생성한 이유는 개발서버(로컬)와 운영서버를 나누어서 NODE_ENV
가 production
일 경우에 다르게 Database를 연결하게 하기 위해서입니다.
# .env.development
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=1234
DB_NAME=tistory_blog
DB_CHARSET=utf8mb4
DB_TIMEZONE=+09:00
.env.production
에서는 실제 Database의 내용을 적어주시면 되겠습니다. 추후에 .env
에서는 Database에 관련된 내용뿐만 아니라 노출되지 않았으면 하는 정보들을 담을 예정입니다.
2. DOTENV를 불러와 프로젝트에 적용하자.
이제 우리는 .env
에 대한 준비가 끝났습니다. 하지만, 파일을 생성만 한다고해서 바로 사용할 수 있는것은 아닙니다.
우리 프로젝트에 .env
의 내용을 가져와 적용을 해야합니다. Nest
에서는 ConfigModule
을 통해서 해당 내용을 프로젝트에 적용 할 수 있습니다.
적용하기에 앞서 다시 한번 필요한 라이브러리를 받아보겠습니다.
npm install --save joi @nestjs/config
joi
는 유효값 체크를 위한 라이브러리입니다.@nestjs/config
는 ConfigModule
을 사용하기 위해서 받아야합니다.
우리는 이제 ConfigModule
을 불러와서 사용해보도록 하겠습니다. ConfigModule은 루트모듈 ( AppModule )에 선언해주겠습니다.
또한, 사용하지 않을 Controller와 Service를 지우도록 하겠습니다.
import { Module } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config";
import * as Joi from "joi";
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV === "production" ? ".env.production" : ".env.development",
validationSchema: Joi.object({
DB_HOST: Joi.string().required(),
DB_PORT: Joi.string().required(),
DB_USERNAME: Joi.string().required(),
DB_PASSWORD: Joi.string().required(),
DB_NAME: Joi.string().required(),
DB_CHARSET: Joi.string().required(),
DB_TIMEZONE: Joi.string().required()
})
})
]
})
export class AppModule {}
Nest.js
에서는 모듈을 불러올때 imports
를 통해 불러옵니다.
isGlobal
은 프로젝트 내 어디서든 사용하겠다는 의미입니다.envFilePath
는.env
파일의 위치를 알립니다. 앞서 설명했던 것처럼production
일때와 아닐때를 구분해서 다른.env
파일을 불러오도록 하고 있습니다.validationSchema
는 우리가 불러올.env
파일내에 값이 존재하는지를 체크합니다.
3. ORM으로 Database를 연결해보자.
우리는 Database를 ORM(Object Relational Mapping)으로 다룰 예정입니다. ORM 중에서 우리에서 typeorm을 사용하도록 하겠습니다.
npm install --save @nestjs/typeorm typeorm mysql2
ConfigModule
을 설정할 때와 마찬가지로 TypeOrmModule
을 통해 설정을 하도록 하겠습니다. 마찬가지로, AppModule
에서 추가를 하도록 하겠습니다.
TypeOrmModule.forRoot({
type: "mysql",
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
charset: process.env.DB_CHARSET,
timezone: process.env.DB_TIMEZONE,
synchronize: true,
logging: true,
entities: [__dirname + "/entities/*{.ts,.js}"]
})
우리가 앞서 설정한 ConfigModule
은 process.env
를 통해서 사용할 수 있습니다. tpyeorm
에서는 테이블을 Entity
라고 부릅니다.
서버를 다시 실행해보면 다음과 같은 로그가 뜨는 것을 볼 수 있습니다.
여기까지 데이터베이스 연동에 관련된 포스트를 마치도록 하겠습니다.
다음 포스트는 유저 테이블과 유저 모듈 ( 로그인 )을 구현해 보도록 하겠습니다.
현재 디렉토리 구조
.
├── .env.development
├── .env.production
├── .eslintrc.js
├── .gitignore
├── README.md
├── nest-cli.json
├── package-lock.json
├── package.json
├── src
│ ├── app.module.ts
│ └── main.ts
├── test
│ ├── app.e2e-spec.ts
│ └── jest-e2e.json
├── tsconfig.build.json
└── tsconfig.json
'Nest.js' 카테고리의 다른 글
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 6편 (0) | 2021.06.30 |
---|---|
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 5편 (0) | 2021.06.17 |
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 4편 (0) | 2021.06.08 |
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 2편 (0) | 2021.06.06 |
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 1편 (0) | 2021.06.05 |