오늘부터 클론 코딩을 시작하였다.
단순한 클론 코딩이 아닌 다음과 같은 방식으로 클론코딩을 진행하려고 한다.
- Programming Language
TypeScript- Framework
NestJS- API 설계
GraphQL and Apollo- Database & Relevant
PostgresQL & TypeORM
@Module({
imports: [
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: true,
}),
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'password',
database: 'DatabaseName',
synchronize: true, //typeorm 데이터베이스를 너의 모듈의 현재 상태로 마이그래이션 한다는 뜻
logging: true, //database에 무슨 일이 일어나는지 콘솔에 표시
}),
],
controllers: [],
providers: [],
})
상기 코드처럼 app.module.ts에 직접 import해주어도 되지만, 비밀번호와 같이 숨기고 싶은 데이터가 있으니 아래와 같이 dotenv 설정을 해주면 된다.
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
ignoreEnvFile: process.env.NODE_ENV === 'prod',
validationSchema: Joi.object({
NODE_ENV: Joi.string().valid('dev', 'prod').required(),
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(),
}),
}),
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
synchronize: true, //typeorm 데이터베이스를 너의 모듈의 현재 상태로 마이그래이션 한다는 뜻
logging: true, //database에 무슨 일이 일어나는지 콘솔에 표시
}),
dotenv
: 일반적으로 dotenv에 숨기고 싶은 데이터를 여러 두고 config 잡는 방법 (백엔드 DB를 연결한 사람이라면 한 번쯤을 했을 법한 방법)dotenv
패키지만을 설치하여 적용하면 되지만 NestJS에서는 @nestjs/config
와 같이 dotenv
의 상위호환인 패키지를 제공한다. @nestjs/config
: NestJS에서 제공하는 configuration module (dotenv위에서 nestjs가 합쳐져서 작용한다)env
경로 설정env
사용 무시Joi
라는 스키마 관리 Node 패키지를 설치 받아 각 각의 dotenv
요소들의 타입 및 필요 여부를 관리 해 줄 수 있다.추 후에 모듈 형식으로 전환하여 파일 이름만 import에 넣는 것으로 변경하면 그 코드도 공유 할 예정이다.