[MAC] Node/React 기초 — MongoDB에 데이터 암호화하여 올리기

Nanyoung Kim
5 min readJan 14, 2021

출처 : 인프런_따라하며 배우는 노드, 리액트 시리즈 — 기본 강의

소스 안의 비밀 정보를 보호해보자.

MONGO DB의 connection string 를 gitignore에 추가하여 github에 올라가지 않게 한다.

  • 두가지 개발환경을 따로 생각해야한다.

Step 1) config폴더 아래에 파일 생성

  • dev.js
  • prod.js
  • key.js

Step2) index.js 파일 수정

const config = require('./config/key');

추가하고

const mongoose = require('mongoose')mongoose.connect(config.mongoURI,{useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false}).then(() => console.log('MongoDB Connected...')).catch(err => console.log(err))

에서 connect 함수의 첫번째 파라미터 값을 변경한다.

Step 3) Heroku 사이트 설정

Config Vars에 key는 MONGO_URI로 value는 connection string 으로 설정한다.

이후 ‘npm run start’로 실행하여 정상적으로 연결됨을 확인한다.

Step 4) dev.js 제외하고 git에 push 하기

.gitignore 에 dev.js를 추가하고

$ git commit -m "비밀 정보 보호"
$ git push origin main

으로 커밋과 푸시를 한다.

Step 5) Bcrpyt로 비밀번호 암호화하기

client가 입력한 비밀번호를 암호화한 뒤 DB에 저장해보자.

$ npm instll bcrypt --save

에서 Technique1의 코드를 가져온다.

User.js에 아래와 같이 코드를 추가한다.

const bcrypt = require('bcrypt');const saltRoudns = 10  //암호화하는데에 필요한 salt의 글자 수(길이)//저장하기 전에 비밀번호를 암호화시킨다. index.js의 save 함수 실행 전에!userSchema.pre('save', function(next){var user = this;if(user.isModified('password')){//비밀번호를 바꿀때만 암호화해야함. 이메일 바꿨는데 비밀번호가 암호화 되면 xbcrypt.genSalt(saltRoudns, function(err,salt){if(err) return next(err)//user.password : client가 입력한 비밀번호//hash : 암호화된 비밀번호bcrypt.hash(user.password, salt, function(err, hash){if(err) return next(err)user.password = hash        //해시된 비밀번호로 교체next()})})}})
  • POSTMAN에서 다시 send 를 한 뒤 MongoDB에서 확인해보니 password가 암호화되어 저장된 것을 볼 수 있었다.

블로그 이전으로 인해 이후 개발 과정은 아래 주소에서 확인 가능https://nanyoungkim.tistory.com/category/Node%20%26%20React

--

--