ddodoi 님의 블로그
7주차-파트03:http-status-codes 모듈, 컨트롤러, 해싱,비밀번호 암호화(crypto) 본문
CHAPTER 1. http-status-codes 모듈
실습하면서 매번 HTTP상태코드를 하드코딩으로 할 경우 다양한 문제점이 발생할 수 있다. 외부 모듈을 설치하여 자동적으로 HTTP상태코드를 정의하도록 해주자.
https://www.npmjs.com/package/http-status-codes
설치 후 원래 코드에 모듈을 불러온다.
const {StatusCodes} = require('http-status-codes'); //status code모듈
이제 상태코드를 고쳐주자.
CHAPTER 2. Node.js 패키지 구조
우리가 실습한 프로젝트 파일의 구조를 살펴보자.
app.js: 프로젝트의 메인 라우터 역할
/routes
/users.js : 하위 라우터 역할 = 경로를 찾아주자
/book.js: 하위 라우터 역할
......
경로를 찾은 다음 역할 = '콜백함수'를 빼내자!
✔️라우터가 로직까지 다 수행할 때 단점
1) 프로젝트 규모가 커질수록, 코드가 매우 복잡해진다 🚀해결방법: 코드를 간결하고 가독성 높게 만들어주자!🚀
2) 가독성 x
3) 트러블 슈팅 x
=>"유지 보수 하기 어렵다"
cf. 유지보수란? 요구사항 반영, 에러 해결,....
✔️컨트롤러(controller)
-프로젝트에서 매니저 역할을 하는 파일: 관장!
-누군가에게 일을 어떻게 시켜야할 지 알고 있다 = 직접 일을 하지 않음
=> router를 통해
"사용자의 요청(req)이 길(url)을 찾아오면
매니저(콜백함수 = controller)가 환영해준다!
// 알바생(서비스)에게 일을 시키고, 결과물을 매니저에게 전달한다.
매니저(controller)가 사용자에게 res를 돌려준다.
우리는 이전까지 라우터 역할을 하는 라우터 파일에서 기능까지 수행했었다. controller파일을 만들어 라우터 역할과 기능을 분리하면 훨씬 가독성 좋고 유지보수가 쉬운 코드가 된다.
CHAPTER 3. 회원가입시 비밀번호 암호화(crypto)
✔️해싱(Hashing)
https://nfttown.io/learn/school/class/2982
기존 코드에서는 비밀번호를 body값으로 가져와 그대로 데이터베이스에 저장했었다. 받아오는 비밀번호를 암호화 해보자.
먼저 기존 코드에 다음 코드를 추가해 crypto모듈을 불러와준다. crypto는 내장 모듈이기 때문에 따로 설치할 필요가 없다.
const crypto = require('crypto'); //crpto 내장 모듈 : 암호화
이제 회원가입 코드 부분에 다음 코드를 추가해주자.
//비밀번호 암호화
const salt = crypto.randomBytes(64).toString('base64');
const hashPassword = crypto.pbkdf2Sync(password, salt, 10000, 64, 'sha512').toString('base64');
- const salt: crypto모듈의 randomBytes 매서드는 매개변수로 들어오는 숫자로 randomByte를 만들어준다. 여기서는 64만큼의 길이로 바이트 값을 랜덤하게 만들어준다. 그후 'base64'방식을 이용하여 생성된 바이트 값을 다시 문자열로 바꿔준다.
-const hashPassword : pbkdf2Sync는 암호화 알고리즘 함수로 매개변수는 순서대로 (해싱할 값, salt, 해시함수를 반복하여 실행하는 횟수,키 길이, 해시 알고리즘) 이다.
자세히 알아보기 위해 새로운 파일을 만들어서 확인해보자. salt때문에 매번 랜덤한 값이 불려오는 것을 확인 할 수 있다.
'웹풀스택 일일정리' 카테고리의 다른 글
8주차-파트01: LEFT JOIN, MYSQL에서 시간 구하기, 페이징(Paging) (0) | 2024.10.10 |
---|---|
7주차-파트05: Lorem Picsum, URL이 같을 경우 (0) | 2024.10.05 |
7주차-파트02: Express-generator 구조 , 프로젝트 셋팅, Primarykey VS Uniquekey (0) | 2024.10.04 |
7주차-파트01: DB diagram사이트 소개, API 설계(2) (0) | 2024.10.01 |
6주차-파트04: API 설계(1) (1) | 2024.09.29 |