관리 메뉴

Mini

[Nest] 환경변수 .env 구현 본문

JS/Nest.js

[Nest] 환경변수 .env 구현

Mini_96 2024. 9. 22. 14:59
  • .env
JWT_SECRET=temp
HASH_ROUNDS=10
PROTOCOL=http
HOST=localhost:3000

DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_DATABASE=postgres
  • npm 설치
yarn add @nestjs/config
  • 앱 모듈에 import
@Module({
  imports: [
    UsersModule,
    PostsModule,
    ConfigModule.forRoot({
      envFilePath: ".env",
      isGlobal: true, //모든서비스에 자동 import
    }),

 

* 서비스 코드 수정

  • 서비스 주입
@Injectable()
export class AuthService {
  constructor(
    private readonly jwtService: JwtService,
    private readonly usersService: UsersService,
    private readonly configService :ConfigService,
  • 사용
    • 문제 : 스트링을 직접 입력하는게 별로임.
rotateToken(token: string, isRefreshToken: boolean){
   const decoded = this.jwtService.verify(token,{
     secret:this.configService.get<string>('JWT_SECRET'),
   });
  • 해결 : common.const를 만들어서 env의 key와 연결시킴
export const ENV_PROTOCOL_KEY = 'PROTOCOL' //env의 PROTOCOL 키와 연결시킴
export const ENV_HOST_KEY = 'HOST'
export const ENV_JWT_SECRET_KEY = 'JWT_SECRET_KEY'
export const ENV_HASH_ROUND_KEY = 'HASH_ROUNDS'
export const ENV_DB_HOST_KEY = 'DB_HOST'
export const ENV_DB_PORT_KEY = 'DB_PORT'
export const ENV_DB_USERNAME_KEY = 'DB_USER'
export const ENV_DB_PASSWORD_KEY = 'DB_PASSWORD'
export const ENV_DB_DATABASE_KEY = 'DB_DATABASE'
  • 개선후
secret:this.configService.get<string>(ENV_JWT_SECRET_KEY),
parseInt(this.configService.get<string>(ENV_HASH_ROUND_KEY)),

 

* process => 환경변수 불러오기

  • 문제 : app 모듈에서는 configservice 사용불가능 -> process 이용 => db 정보 얻기
@Module({
  imports: [
    UsersModule,
    PostsModule,
    ConfigModule.forRoot({
      envFilePath: ".env",
      isGlobal: true, //모든서비스에 자동 import
    }),
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: process.env[ENV_DB_HOST_KEY],
      port: +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],

process.env는 .env에서 넣어준 값들을 들고있다.