http-status-codes
npm 모듈로 http 상태 코드를 문자형식으로 사용할 수 있다.
https://www.npmjs.com/package/http-status-codes
const {StatusCodes} = require('http-status-codes')
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
res.status(StatusCodes.CREATED).json(results);
사용 예시 코드이다.
node.js 패키지(파일) 구조
- app.js: 프로젝트의 메인 라우터 역할
- users.js: 하위 라우터 역할
- books.js: 하위 라우터 역할
라우터가 로직까지 다 수행하면 단점이 있다.
- 프로젝트 규모가 커지면 코드가 복잡해지고
- 가독성이 떨어지고
- 유지보수가 어려워진다.
- 트러블 슈팅 어려워진다.
해결방법: 코드를 간결하고 가독성이 높게 만들어줘야한다!
컨트롤러
- 프로젝트에서 매니저 역할을 하는 파일 : 관장
- 누군가에게 일을 어떻게 시켜야 할 지 알고 있다. = 직접 일을 하진 않음
- router를 통해서 사용자의 요청(req)이 길(url)을 찾아오면 매니저(콜백함수 = controller)가 환영해준다 => 알바생한테 일을 시키고, 결과물을 매니저에게 전달
- 매니저(controller)는 사용자에게 res를 돌려준다.
컨트롤러 분리
controller 폴더를 하나 만들고 UserController.js 라는 파일을 만든다.
const conn = require('../mariadb');
const {StatusCodes} = require('http-status-codes')
const join = (req, res) => {
const {email, password} = req.body;
let sql = 'INSERT INTO users (email, password) VALUES (?, ?)';
let values = [email, password];
conn.query(sql, values, (err, results) => {
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.CREATED).json(results);
})
}
module.exports = join
기존의 콜백함수를 그대로 가져오고 콜백함수는 join이라는 변수에 담은후 exports 해준다.
const join = require('../controller/UserController')
router.post('/join', join);
라우터에서는 이렇게 join 모듈을 불러와서 넣어주기만 하면 된다. 이로써 역할의 분리가 잘 된 것을 알 수 있다.
만약 여러개의 모듈을 한꺼번에 export 하고 import 하기 위해서는 다음과 같이 해야한다.
module.exports = {
join,
login,
passwordResetRequest,
passwordReset
}
const {
join,
login,
passwordResetRequest,
passwordReset
} = require('../controller/UserController');
비밀번호 암호화
비밀번호는 데이터베이스에 저장하지만 평문으로 저장해서는 안된다. Node js 에서는 암호화를 위해 crypto 라는 모듈을 제공한다. 이는 따로 설치가 필요없는 기본 모듈이다.
const crypto = require('crypto');
//비밀번호 암호화
const salt = crypto.randomBytes(64).toString('base64');
const hashedPassword = crypto.pbkdf2Sync(password, salt, 10000, 64, 'sha512').toString('base64');
- salt : 64바이트 길이로 랜덤값을 만든다. 그 후 base64 인코딩의 문자열로 바꾼다.
- hashedPassword : Password-Based Key Derivation Function 2 라는 이름의 함수를 콜한다. 인자로는 password, salt, 해시함수 반복횟수, 길이, 해시알고리즘 순서로 전달한다.
단 salt 값은 매번 바뀌므로 회원가입시 암호화된 비밀번호와 salt 값을 함께 db에 저장해야한다.
로그인 시, 평문 비밀번호를 받으면 데이터베이스에 저장된 salt 값을 꺼내서 암호화 해보고, 현재 데이터베이스에 저장되어있는 암호화된 비밀번호와 비교한다.
후기
라우터와 컨트롤러의 분리, 비밀번호 해싱 등 중요한 내용을 배운 시간이었다.
키워드: 프로그래머스 데브코스, 국비지원교육, 코딩부트캠프
'프로그래머스 풀스택 데브코스 > 데브코스 TIL' 카테고리의 다른 글
웹 풀사이클 데브코스 TIL 34일차 (0) | 2024.01.04 |
---|---|
웹 풀사이클 데브코스 TIL 33일차 (0) | 2024.01.03 |
웹 풀사이클 데브코스 TIL 31일차 (0) | 2023.12.29 |
웹 풀사이클 데브코스 TIL 30일차 (0) | 2023.12.29 |
웹 풀사이클 데브코스 TIL 29일차 (0) | 2023.12.27 |