로그인을 하다 보면 아이디나 비밀번호가 맞지 않아 오류가 발생한다.
오류에 맞는 예외를 처리해봤다.
const {userId, pw} = req.body;
// userId와 pw가 맞는지 확인
db.forEach((v, i) => {
if (v.userId == userId && v.pw == pw)
res.status(201).json({
message: `${userId}님 어서오세요 ㅎㅎ`,
});
else if (v.userId != userId) {
res.status(404).json({
message: `ID를 다시 확인해주세요`,
});
} else {
res.status(404).json({
message: `pw 다시 확인해주세요`,
});
}
});
나는 사용자 요청값을 받은 후 db에 저장된 내용을
forEach문으로 순회하면서 아이디와 비밀번화가 맞는지 확인 한 후
둘 중 알맞지 않은 것이 있다면 예외를 처리해주었다.
let loginData = {};
// 사용자 찾기
db.forEach(v => {
if (v.userId === userId) {
loginData = v;
}
});
if (!isEmpty(loginData)) {
console.log('아이디 맞음');
//pw
if (loginData.pw === pw) {
console.log('비밀번호 맞다');
} else {
console.log('비밀번호 아니다');
}
} else {
console.log('입력하신 아이디는 없습니다.');
}
});
const isEmpty = obj => {
if (Object.keys(obj).length === 0) {
return true;
} else {
return false;
}
};
하지만 강의에서는 객체(loginData)를 생성 후
forEach()문을 통해 아이디를 찾은 후 아이디가 맞다면
객체에 값을 할당하여 객체가 비워있는 지 비워있지 않은지 여부에 따라
예외를 처리했다.
게다가 동일하게 반복되는 부분인 객체가 비워있는 확인하는 부분은
isEmpty()함수로 모듈화를 해줘서 재사용성까지 높였다.
솔직히 코드면에서 내가 생각한 코드가 좀 더 짧았기에 가독성면에서
내 코드가 더 좋다는 생각을 했다 ㅋㅋㅋ 넘 부끄럽다 ㅠㅠㅠ
하지만 역시 강사님 👍👍 당연히 강사님 코드가
예외 처리나 성능면에서 훨씬 우수했다!!
[이유]
나의 코드에 경우 forEach()문을 통해 db에 저장되어 있는 모든 값을
순회하면서 찾기 때문에 db에 많은 값이 저장되어 있을 경우 오류가 발생할
확률이 높아지고 메모리가 많이 소모되어 성능이 좋지 못한다 ㅠㅠ
강사님 코드는 알맞은 ID값을 객체에 할당한 뒤 해당하는 ID값을 통해
db에서 사용자 정보를 찾기 때문에 db를 한번만 순회하면 되는 좋은 코드였다.
즉 메모리도 많이 소모하지 않아 나의 코드보다 성능이 훨 좋았다 👍👍
강의를 보다보면 중간 중간 강의를 멈추고 직접 해보라고 하시는데
이때 직접 해보는 게 정말 유익하고 도움이 많이 되는 거 같다 :)
직접 구현에 성공했을 땐 짜릿하고 실패했을 때도 강의를 보며 새롭게 알게 되어 머릿속에 잘 남는 거 같다 👍👍
이번엔 결론적으로 실패하긴 했지만 로그인 예외를 처리하는 좋은 방법을
하나 알게 된 거 같아 기쁘다 😆😆