환경변수는 애플리케이션 설정을 코드와 분리하여 관리할 수 있게 해주며, 보안, 유연성, 유지보수성, 통일성을 높이는 데 중요한 역할을 합니다.
NestJS에서는 환경변수를 사용하여 애플리케이션의 설정을 관리하고, 다양한 환경에서 일관된 동작을 보장할 수 있습니다.
보안: API 키, 데이터베이스 비밀번호 등 민감한 정보를 코드에 직접 작성하지 않고, 환경변수를 통해 안전하게 관리할 수 있습니다.
이는 코드 유출 시 보안 위험을 줄여줍니다.
유연성: 애플리케이션을 다양한 환경(개발, 테스트, 운영)에서 쉽게 설정하고 실행할 수 있도록 도와줍니다.
환경별로 설정을 다르게 하여 코드 변경 없이 환경에 맞는 설정을 적용할 수 있습니다.
유지보수성: 설정 변경 시 코드 수정 없이 환경변수 파일을 통해 간단히 업데이트할 수 있어 유지보수성을 높입니다.
설정이 외부 파일에 분리되어 있어 코드와 설정을 독립적으로 관리할 수 있습니다.
통일성: 동일한 애플리케이션을 여러 환경에서 일관된 방식으로 배포하고 운영할 수 있도록 합니다.
환경변수를 통해 환경 간의 설정 차이를 쉽게 관리할 수 있습니다.
NestJS에서 환경변수를 쉽게 사용하려면 dotenv 패키지를 설치하고, .env 파일을 통해 설정을 관리합니다.
npm install dotenv
루트 디렉토리에 .env 파일을 생성하고, 환경변수를 정의합니다.
# .env 파일
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=myuser
DATABASE_PASSWORD=mypassword
API_KEY=supersecretapikey
NestJS의 ConfigModule을 사용하여 환경변수를 쉽게 로드하고 사용할 수 있습니다.
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true, // 전역으로 설정하여 어디서든 사용 가능
}),
],
})
export class AppModule {}
환경변수 사용: NestJS의 ConfigService를 통해 환경변수를 사용할 수 있습니다.
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class DatabaseService {
constructor(private configService: ConfigService) {}
getDatabaseConfig() {
const host = this.configService.get<string>('DATABASE_HOST');
const port = this.configService.get<number>('DATABASE_PORT');
const user = this.configService.get<string>('DATABASE_USER');
const password = this.configService.get<string>('DATABASE_PASSWORD');
return {
host,
port,
user,
password,
};
}
}
다음은 ConfigService를 사용하여 환경변수를 읽어오는 간단한 예제입니다.
import { Controller, Get } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Controller('config')
export class ConfigController {
constructor(private configService: ConfigService) {}
@Get()
getConfig() {
const apiKey = this.configService.get<string>('API_KEY');
return { apiKey };
}
}
이 코드에서는 ConfigService를 통해 API_KEY 환경변수를 가져와 응답으로 반환합니다.
환경변수를 적절히 활용하면 애플리케이션의 보안, 유연성, 유지보수성, 통일성을 크게 향상시킬 수 있습니다.
NestJS에서 환경변수를 사용하는 방법을 이해하게 되었고 좀더 활용하면 보다 견고하고 관리하기 쉬운 애플리케이션을 만들 수 있다는 생각이 들었습니다.