Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ddodoi 님의 블로그

7주차-파트03:http-status-codes 모듈, 컨트롤러, 해싱,비밀번호 암호화(crypto) 본문

웹풀스택 일일정리

7주차-파트03:http-status-codes 모듈, 컨트롤러, 해싱,비밀번호 암호화(crypto)

ddodoi 2024. 10. 4. 22:14

CHAPTER 1. http-status-codes 모듈

실습하면서 매번 HTTP상태코드를 하드코딩으로 할 경우 다양한 문제점이 발생할 수 있다. 외부 모듈을 설치하여  자동적으로 HTTP상태코드를 정의하도록 해주자.

 

https://www.npmjs.com/package/http-status-codes

 

http-status-codes

Constants enumerating the HTTP status codes. Based on the Java Apache HttpStatus API.. Latest version: 2.3.0, last published: a year ago. Start using http-status-codes in your project by running `npm i http-status-codes`. There are 2773 other projects in t

www.npmjs.com

 

 

설치 후 원래 코드에 모듈을 불러온다.

const {StatusCodes} = require('http-status-codes');  //status code모듈

 

 

이제 상태코드를 고쳐주자.

(왼)원래의 http상태코드,(오)모듈을 사용하여 고쳐준 상태코드

 

 

 

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파일을 만들어 라우터 역할과 기능을 분리하면 훨씬 가독성 좋고 유지보수가 쉬운 코드가 된다.

기능을 UserController.js로 옮겨준다

 

 

 

CHAPTER 3. 회원가입시 비밀번호 암호화(crypto)

 

✔️해싱(Hashing)

https://nfttown.io/learn/school/class/2982

 

클래스 | NFTtown

 

nfttown.io

 

 


 

 

기존 코드에서는 비밀번호를 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, 해시함수를 반복하여 실행하는 횟수,키 길이, 해시 알고리즘) 이다.

매서드 pbkdf2Sync 설명

 

 

 

 

자세히 알아보기 위해 새로운 파일을 만들어서 확인해보자. salt때문에 매번 랜덤한 값이 불려오는 것을 확인 할 수 있다.