[Node JS] 비밀 설정 정보 관리

Hα ყҽσɳɠ·2020년 7월 29일
0

Node JS

목록 보기
5/8
post-thumbnail

🔓 Password 관리

지난번 MongoDB연결하기 포스팅에서 mongoose.connect 부분에 mongoDB를 연결해주면서 비밀번호를 입력하는 부분이 있었다.

const mongoose = require('mongoose');
mongoose.connect('mongoURI: 'mongodb+srv://hayeong:<password>@ha0.hnyx8.mongodb.net/<dbname>?retryWrites=true&w=majority',{
    useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false
}).then(() => console.log('MongoDB connected...'))
.catch(error => console.log(error))

[password]로 가려놓았지만, 코드를 작성했을 때 비밀번호가 코드에 포함되어 깃허브에 올라가게 되는 것을 방지해야 한다. 따라서 보안을 위해 config 디렉토리를 생성하고 dev.js (원하는 이름으로 설정)에 mongoDB 접속 URL을 저장한다.

환경변수 process.env.NODE_ENV

개발을 할 때는 local 환경에서 development mode로 할 수 있고, 클라우드 서비스를 통해 deploy 한 후에는 production mode로 개발을 할 수 있다. 이 두가지 경우는 정보를 가져오는 루트가 다르므로 분기를 나눠주어야 한다.
development mode에서는 process.env.NODE_ENVdevelopment로, production mode에서는 process.env.NODE_ENVproduction으로 나온다. 따라서 아래와 같이 config 파일들을 구성한다.

keys.js

if(process.env.NODE_ENV === 'production') {
    module.exports = require('./prod');
}
else {
    module.exports = require('./dev');
}

dev.js

module.exports = {
    MongoURI: 'mongodb+srv://hayeong:[password]@ha0.hnyx8.mongodb.net/<dbname>?retryWrites=true&w=majority'
}

prod.js

module.exports = {
  mongoURI: process.env.MONGO_URI
}

index.js

const db = require('./config/keys');
const mongoose = require('mongoose');

mongoose.connect(db.mongoURI,{
  useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false
}).then(() => console.log('MongoDB connected...'))
.catch(error => console.log(error))

⚠️ Error

npm run start로 서버를 실행시켰을 때, 다음과 같은 에러가 발생했다. 이런 경우, Mongodb 사이트에 들어가서 Network Access 설정을 바꿔주어야 한다. ALLOW ACCESS FROM ANYWHERE 버튼을 눌러 접근 가능하도록 만들어주면 해결된다.

{ MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/
    at NativeConnection.Connection.openUri (/Users/hayeong/Server_Development/Develog/dev_0/node_modules/mongoose/lib/connection.js:828:32)
    at Mongoose.connect (/Users/hayeong/Server_Development/Develog/dev_0/node_modules/mongoose/lib/index.js:335:15)
    at Object.<anonymous> (/Users/hayeong/Server_Development/Develog/dev_0/index.js:16:10)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)


🗑 .gitignore

.gitingore은 project에 원하지 않는 파일들을 Git에서 제외시킬수 있는 설정 파일이다. Git에 비밀번호 설정을 제외하고 올리기 위해 .gitignore에 비밀번호가 포함되었던 파일인 dev.js를 포함시켜준다.


도움을 받았당 혼자하다가 누가 알려주는거 너무 짜릿해

profile
𝑯𝒐𝒏𝒆𝒔𝒕𝒚 𝑰𝒏𝒕𝒆𝒈𝒓𝒊𝒕𝒚 𝑬𝒙𝒄𝒆𝒍𝒍𝒆𝒏𝒄𝒆

0개의 댓글