[Nest.js 정리] env활용 (Config, process)
 [Nest.js 정리] env활용 (Config, process) 
 목차
Config를 활용한 환경변수 활용
process 객체를 활용한 환경변수 활용
프로젝트를 할 때 보안적 측면을 고려해서 env파일을 사용한다.
API키, DB정보 등을 환경변수로 활용할 필요가 있다.
Config
이를 활용하기 위해선 @nestjs/config를 설치해야한다.
이후 이를 app.module에 import하고 이를 주입하여 사용하면된다.
app.module.ts
1
2
3
4
5
6
7
@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: '.env',
      isGlobal: true,
    }),
// ...
이런식으로 env파일의 주소를 설정할 것인지, 모든 모듈이 이를 활용할 수 있는지 설정한다.
service.ts
정말 어렵지 않다. constructor로 주입을하고 사용하면된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export class PostsService {
  constructor(
    @InjectRepository(PostsModel)
    private readonly postsRepository: Repository<PostsModel>,
    // PostsModel을 다루는 레포지토리를 주입하겠다.
    private readonly commonService: CommonService,
    private readonly configService: ConfigService,
  ) {}
// ...
// ...
// configService의 get으로 환경변수를 가져올 수 있다.
  const nextUrl =
    lastItem &&
    new URL(
      `${this.configService.get(ENV_PROTOCOL_KEY)}://${this.configService.get(ENV_HOST_KEY)}/posts`,
    );
// ...
process 활용
DB를 연결할 때, password, username을 가릴 필요가 있다.
근데, CondigModule을 import하는 app.module.ts에서는 이를 활용할 수 없기에 TypeOrmModule을 통한 DB 연결에 process를 활용한다.
1
2
3
4
5
6
7
8
9
10
11
TypeOrmModule.forRoot({
  type: 'postgres',
  host: process.env[ENV_DB_HOST_KEY],
  port: parseInt(process.env[ENV_DB_PORT_KEY]),
  username: process.env[ENV_DB_USERNAME_KEY],
  password: process.env[ENV_DB_PASSWORD_KEY],
  database: process.env[ENV_DB_DATABASE_KEY],
  entities: [PostsModel, UsersModel],
  // 개발환경에선 싱크 맞추는게 편리. 그 외는 false
  synchronize: true,
}),
 This post is licensed under  CC BY 4.0  by the author.