소스코드를 git에다 올리면 다른 사람들이 scret한 정보들을 볼 수도 있다. 이를 못보게 하려면, 비밀정보들을 다 한 파일에 몰아둔 후 .gitignore 파일에 넣어주어야 한다.
ex. index.js에 있는 mongo DB 이름과 비밀번호는 비밀정보!
그런데 개발 환경이 local 또는 deploy에 따라서 다르게 설정해주어야함.

local이면 위에서 말한 것과 같이 gitignore에 비밀정보를 담아주면 되고, deploy(배포 후) 경우는 예를들어 heroku에서 배포 했다하면, heroku 홈페이지에서 따로 설정을 해주어야 한다.
config 폴더 생성
- key.js => NODE_ENV이 production인지, development인지 판단 후 경로를 알려줌
- prod.js => production
- dev.js => development
마지막으로 gitignore에 dev.js 추가하면 끝!

위의 사진은 전에 post로 이름, 이메일, 비밀번호를 서버로 보낸 것이다. 이렇게 개인정보들이 투명하게 보이니 보안에 위험이 있다. 그렇기 때문에 보낼 때는 저런식으로 투명하게 보내더라도 DB에 저장될 때는 암호화 되어서 저장하는 것을 해볼 것이다.
(1) Bcrypt 라이브러리 설치
npm install bcrypt --save
(2) regiser route로 이동
⭐ User.js
// index.js에서 save 전에 funtion 안의 내용을 실행
userSchema.pre('save', function(next){
var user = this
// 유저가 비밀번호를 변경하려 할 때
if(user.isModified('password')){
// 비밀번호 암호화
// salt를 generate 할 때, saltRounds 필요
bcrypt.genSalt(saltRounds, function(err, salt) {
if(err) return next(err)
//myPlaintextPassword은(= user.password ) 투명하게 보인 비밀번호
bcrypt.hash(user.password , salt , function(err, hash){
if(err) return next(err)
// hash는 암호화된 비밀번호
user.password = hash
next()
})
});
}else {
// 비밀번호 변경 외의 경우
next()
}
})
⭐ index.js
app.post('/api/users/register', async(req, res)=> {
const user = new User(req.body)
try {
//💡 save 전에 User.js에서 암호화 진행 !!
// next() 메서드로 인해 이 곳으로 이동 !!
await user.save();
return res.status(200).json({success:true})
} catch (err) {
return res.json({success:false, err})
}
})
(3) 암호화 설정 후 다시 postman 실행 > MONGO DB 확인

MONGO DB > 나의 DB > Collection > test > user에서 확인해보면, 이전에는 암호화가 없이 투명하지만 암호화 설정 후에는 qw332211이 암호화 되어서 나타난다.
