Post

[Nest.js 정리] env활용 (Config, process)

[Nest.js 정리] env활용 (Config, process)

목차

  1. Config를 활용한 환경변수 활용

  2. 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.