20240306 기술매니저님 Q&A
(1) 내 코드 :
const { nickname, password, userType } = await signupSchema.validateAsync(req.body);
(2) 성희님 코드 :
const{error, value} = signUpSchema.validate(req.body, { abortEarly: true });
재훈님 코드 먼저 리뷰
// log.middleware.js
logger 에서 Console() 로 출력을 하는데 우리가 하루종일 콘솔을 보고 있을 수 없으니
파일로 저장하여 관리할 수 있게 만들어야한다.
winston-daily-rotate
성희님 코드 리뷰
로그인 할 때도, Joi 사용하는 게 좋다.
Joi 를 사용하면 최대한 양식에 맞지 않는 입력값을 걸러낼 수 있다.
걸러낸다는 말은 DB를 거치지 않기 때문에 코스트 사용이 덜 든다는 뜻.
리프레쉬토큰은 페이로드에 내용은 딱히 필요없다. DB에 저장하기 때문에.
리프레쉬토큰은 DB에 관리한다. DB에 저장을 하기 때문에 굳이 내용을 적을 필요가 없다는 뜻.
리프레쉬토큰이 만료될 수도 있다. 그러면 로그인하라고 하면 된다.
액세스 토큰을 새로 만들 때, 리프레쉬토큰도 같이 새로 발급한다.
JWT refresh rotate
우정 코드 리뷰
try 부분에서 return 말고 throw 해서 error 날리자.
decodedAccessToken = {nickname, role} 지우기!
아니면 사용자 확인 바로 위로 코드 순서 바꾸자.
액세스토큰 새로 만들 때, 리프레쉬 토큰도 새로 발급.
req.user = user; / res.locals 차이점
locals는 개발자들이 사용하라고 만든 영역이다.
req를 할당하게 되면 req의 내용이 바뀔 수 있기 때문에 위험하다. req의 값은 바뀌면 안된다.
// 카테고리 라우터
401 로그인 되지 않은 상태인 경우 이 부분은 미들웨어에서 처리할 수 있기 때문에 카테고리 API 에서 지울 수 있다.
401 사장님 토큰을 가지고 있지 않은 경우도
===> 에러 처리하는 메세지를 미들웨어로 처리할 수 있다.
jwt 토큰이 만료된 경우도 미들웨어에서 처리하기 때문에 API에서 지울 수 있다. == 코드 깔끔!
ex: !categoryId
Joi 사용하면 API 코드가 더 간결해질 수 있다.
app.js 에러처리미들웨어 추가
bcrypt : 비밀번호 암호화 하는 데 특화 된 라이브러리
argon2
을 사용하면 조금 더 편하게 사용할 수 있다.
성능 순서 - argon2 > scrypt > bcrypt
더 빠르고, 더 편하다.
Jira : 일 할당
5주차 과제
deletedAt : 실제로 데이터를 지우진 않고 지웠다는 기록만 남긴다. 기록용.
log는 완전 중요하다. 무슨 행동을 해도 log를 남겨야한다.
-cloudwatch
-datadog