프로그래머스 풀스택 28
posted on 02 Oct 2024 under category programmers in series programmers
프로젝트: Node.js 기반의 REST API 구현(5)
💫 회원가입 API 구현
💫 http-status-codes 모듈 활용
npm install http-status-codes --save
이걸 현재 프로젝트 폴더의 터미널에 입력해주면 설치완료!
res.status(StatusCodes.CREATED).json({
message: "회원가입이 완료되었습니다.",
results
});
http-status-codes을 보면 숫자에 맞는 단어가 적혀져 있으므로 그대로 사용하면됨!
💫 node.js 패키지 구조
app.js : 프로젝트의 메인 라우터 역할
/routes
users.js : 하위 라우터 역할 = 경로를 찾아주자
books.js : 하위 라우터 역할
…
경로를 찾은 다음 역할 = ‘콜백함수’ 를 빼내자!
💫 컨트롤러
=> router를 통해서
”사용자의 요청이” 길을 찾아오면
매니저(콜백함수 = controller)가 환영해줌!
👉 알바생(서비스)한테 일을 시키고, 결과물을 다시 매니저에게 전달함.
매니저가 사용자에게 res를 돌려줌.
✔ 라우터가 로직까지 다~ 수행할 때 단점!!
1) 프로젝트 규모가 커질수록, 코드가 엄~청 복잡해짐.
✨해결방법 : 코드를 간결하고 가독성이 높게 만들자!!!!✨
2) 가독성 X
3) 트러블 슈팅 X
=> “유지보수 하기 어렵다!!!“
cf. 유지보수란? 10년~운영! 요구사항 반영, 에러 해결, …
💫 로그인 api 구현 + unauthorized
jwt 모듈 사용하기!
로그인 실패시
401 : Unauthorized(비인증 상태) -> 그 사람이 누군지 모름
403 : Forbidden (접근 권리 없음) -> 서버가 그 사람이 누군지 알고 있음
아이디가 틀리면 401이고 비밀번호가 틀리면 403이라고 생각하기~
현재 코드는 이메일,비밀번호 둘 중에 틀렸을 때 알려주는 거라 Unauthorized사용하기
💫 비밀번호 초기화 요청 & 초기화
<수정완료>
💫 회원가입 시 비밀번호 암호화
crypto 모듈 사용하기
const crypto = require('crypto');
// 비밀번호 암호화
const salt = crypto.randomBytes(64).toString('base64');
const hashPassword = crypto.pbkdf2Sync(password, salt, 10000, 64,'sha512').toString('base64');
randomBytes : 매개변수로 들어오는 숫자를 가지고 랜덤바이트를 생성
pbkdf2Sync : digest
라는 자리에 sha512
알고리즘 넣어줌, 키 길이 넣어줌(현재는 64길이의 salt), 10000 -> 해쉬 함수반복 횟수, salt(랜덤하게 생성된 값), password // 설명은 역순임!
단방향이라서 암호화만 되고 복호화가 안됨!
=> salt 값을 고정 하고 반쪽짜리 암호화 OR salt가 매번 바뀌는거 OK, 어차피 암호화할 때 salt말고도 해쉬함수를 몇번을 돌릴 건지 알고리즘을 뭘 쓸건지 결정하니까 salt를 데이터베이스에 저장하자~!
💫 로그인은 어떻게? 비밀번호 초기화?
<로그인 부분>
<비밀번호 초기화 부분>
Y 일을 통해 명확히 알게 되었거나 이해한 부분(한 일)에 대해 정리 :
http-status-codes, 컨트롤러 분리, API 구현
W 배운 점과 시사점 :
http-status-codes 모듈을 통해 숫자 날것이 아닌 표현을 가능한 걸 배움
컨트롤러 분리를 통해 코드의 유지보수를 용이하게 함
T 응용하여 배운 것을 어디에 어떻게 적용할지:
앞으로 컨트롤러 분리를 통해 코드의 유지보수를 용이하게 할 수 있게 됨!