[8주차 02] Controller + 비밀번호 암호화

개발냥이·2025년 3월 10일

데브코스

목록 보기
25/75
post-thumbnail

Controller

지금까지 강의 프로젝트에서는 Routers는 경로 + 콜백함수(로직)의 역할을 해주고 있었다.

// Router 파일

router.post(
  '/login', //경로
  (req, res) => { //콜백함수
  }
);

하지만 Router는 경로를 찾아주는 역할이 원래는 알맞은 역할이었다.
콜백함수도 넣는다고 틀린 것은 아님!!

만약 Router에 콜백함수꺼지 넣어준다면 프로젝트 규모가 커질수록 코드가 복잡해져 가독성이 떨어져 유지보수가 어려워진다고 한다

이때 사용하기 좋은 것은 Controller ❗❗
영단어 "관리인", "지배자"라는 뜻처럼 자기가 작업은 하지 않고
명령을 받으면 명령을 전달하는 역할 을 한다.

// Router 파일
router.post(
  '/login', //경로
);


// Controller 파일
(req, res) => { //콜백함수
  }

비밀번호 암호화


만약 사용자 비밀번화가 다음과 같이 저장될 경우
DB가 털리게 되면 그대로 비밀번화가 유출되어 매우 위험하다.
따라서 비밀번호 암호화는 중요하고 필수적이다!!!

  • crypto 모듈

crypto 모듈은 Node.js에서 제공하는 내장 모듈로 암호화 및 해싱기능을 지원해준다.

  • Salt 생성 및 비밀번호 해싱
const salt = crypto.randomBytes(10).toString('base64');

const hashPW = crypto
.pbkdf2Sync(password, salt, 10000, 10, 'sha512')
.toString('base64');

랜덤 데이터를 Base64 형식의 문자열형식으로 salt를 생성한다.

그다음 비밀번호를 해싱한다.
password : 사용자가 입력한 비밀번호(req,body)
salt : 앞서 생성한 랜덤 데이터
10000 : 반복 횟수
10 : 생성할 해시 길이
sha512 : 사용할 알고리즘
(참고로 해시 알고리즘 중 하나로 암호화만 가능한 단방향 알고리즘이다)

  • 회원가입 시

기존 저장 방식

기존 원본 비밀번호를 그대로 저장하던 방식에서
암호화된 비밀번호와 salt를 저장해준다.

  • 로그인 시

기존 : 원본 비밀번호 = 사용자가 입력한 비밀번호 비교 후 로그인
암호화 후 : salt 비밀번호 = 사용자가 입력한 비밀번호 암호화 비교 후 로그인

=> 어떻게 보면 번거로울 수 있지만 암호화한 후 DB에 저장하고 로그인 시에도 암호화 후 DB 데이터와 비교를 하니 보완이 좋아졌다 👍👍


후기

그동안 비밀번호를 저장할 때 암호화해서 저장한다는 것은 알았지만 로그인 때 사용자가 입력한 걸 또 암호화해서 비교한 후 로그인한다는 로직은 생각지도 못해서 신기했다.
역시 백엔드는 깊게 파면 팔수록 공부해야 할 게 많은 거 같다.

profile
웹 개발자가 되고픈

0개의 댓글