node, express - configuration

이동근·2021년 8월 17일
0

node, express

목록 보기
1/1

서버에서 설정한 모든 키는 컴퓨터에 환경변수 형태로 저장하는 것이 좋다. 환경변수에 있는 설정된 값을 읽고 가져온다.

서버가 동작하는 컴퓨터에서 환경변수 안에 설정이되면 안전하다.

환경변수를 넣게되면 그 터미널 안에서만 사용이 되는 것이고 영구적으로 넣어주기 위해서는 shell에서 추가적으로 해줘야 합니다.

보통은 영구적이 아니라, 관련된 값을 가져오도록 한다.

파일에다가 절대로 적는 것이 아니라 환경변수를 사용해서 해주도록 한다. 그럴때 사용해주는 라이브러리가 'dotenv'이다.

npm i dotenv

.env를 만들어주고, .gitignore에 추가해 준다.
.env에는 우선 JWT_SECRECT과, JWT_EXPRIES_SEC, BCRYPT_SALT_ROUNDS를 추가해 준다.

그리고 app.js에

import dotenv from 'dotenv'
dotenv.config();

를 추가해 준다.

그리고 환경변수를 출력해 보면 환경변수에 자동으로 추가가 된 모습을 볼수있다.


추가 구현

환경변수를 추가해서 단순히 사용하도록 만들었다. 그냥 사용해도 되지만 입력시에 오타와 같은 부분을 해결하기 위해서 config.js를 통해 개선을 하려고 한다.

export const config = {
  jwt: {
    secretkey: process.env.JWT_SECRET,
    expiresInSec: process.env.JWT_EXPIRES_SEC,
  },
  bcrypt: {
    saltRounds: process.env.BCRYPT_SALT_ROUNDS
  }
}

이런식으로 config를 사용해서 만들어 준다. 그래서 config를 import를 해주게 되면

config.jwt.secretKey 이런식으로 입력만해도 된다.

추가구현2

위의 코드에서 좀 더 발전시키게 되면, 개발 도중에 명시되지 않은 부분에 대해서 오류코드를 보여주는 코드이다.

function required(key, defaultValue=undefined) {
  const value = process.env[key] || defaultValue;
  if (value === null) {
    throw new Error(`key ${key} is undefined`);
  }
  return value
}

이렇게 판별하는 required함수를 만들어 준다.
파라미터로는 key와 defaultValue(기본값)만약 없을 시에는 undefined로 해준다.

const value = process.env[key] || defaultValuel;
-> process.env[key] 혹은 defaultValue; or 구문일 경우 return되는 값이 무엇인지에 대해서 생각을 해보면 이 부분을 왜 이렇게 썼는지 알 수 있다.

그래서 value가 null 혹은 undefined면
throw new Error('Key ${key} is undefined')
-> 개발 도중에 에러메세지를 보여준다.

위의 판별 함수를 응용하게 된다면

export config = {
  jwt: {
    secretKey: required('JWT_SECRET'),
    expiresInSec: parseInt(required('JWT_EXPIRES_SEC'. 86400))
  },
  bcrypt: {
    saltRounds: parseInt(required('BCRYPT_SALT_ROUNDS', 12))
  },
  host: {
    port: parseInt(required('HOST_PORT', 3000))
  }
}

이렇게 위의 config를 바꿔줄 수 있다. default값이 명시되어 있는 부분에 대해서는 .env에 값이 없더라도 오류가 발생하지 않으나!!

null 혹은 undefined인 부분에 대해서는 일치하는 값이 없다고 오류를 보여준다!!!

그리고 PORT번호와 함께 나중에는 mysql과 관련된 secrectKey라던지 에 대한 민감한 부분도 여기 추가해서 보안을 유지하면서 사용한다.

profile
하루하루 1cm 자라는 개발자

0개의 댓글