[MAC] Node/React 기초 — MongoDB에 데이터 암호화하여 올리기
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 사이트 설정
- Heroku : 헤로쿠(Heroku)는 웹 애플리케이션 배치 모델로 사용되는 여러 프로그래밍 언어를 지원하는 클라우드 PaaS이다. 최초의 클라우드 플랫폼들 가운데 하나인 헤로쿠는 2007년 6월 개발이 시작되었고 당시에는 루비 프로그래밍 언어만 지원하였으나 지금은 자바, Node.js, 스칼라, 클로저, 파이썬, PHP, 고를 지원한다. (출처 : https://ko.wikipedia.org/wiki/%ED%97%A4%EB%A1%9C%EC%BF%A0)
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