프로젝트 회고

node 개인과제 - 로그인, 회원가입 구현 및 mysql

김영재0412 2022. 12. 8. 21:28

https://github.com/youngjae0411/nodeprc

 

GitHub - youngjae0411/nodeprc

Contribute to youngjae0411/nodeprc development by creating an account on GitHub.

github.com

 

저번 주에 했던 express + mongodb로 기본적인 게시판 형태의 CRUD를 구성한 개인과제에 로그인 + 회원가입에 db를 mysql로 바꾸는 과제였다.

 

우선 회원가입은 쉽게 구현했는데 로그인이 조금 어려웠다. 요구사항에 별 다른 말 없이 그냥 로그인 완료시 쿠키에 토큰값을 넣어줘라 이렇게 되있어서 쿠키에 값을 넣어주긴 했는데 이게 맞나? 라는 생각이 계속 들었고 포스트맨으로 요청을 보낼 때마다 토큰값을 직접 넣어줘서 보내줘서 일단 구현은 다 하긴 했다. 요구사항에 정말 딱 맞게 구현해서 따로 비밀번호 암호화, 리프레쉬 토큰 같은 건 구현하지않았다. 그리고 mysql로 마이그레이션 하는데 시퀄라이즈 세션강의를 들었을 때 이걸 어케 하라는거지 이 생각이 들었는데 생각보다 어렵지는 않았고 오히려 몽고디비보다 기능들이 많았기에 코드 바꾸는데는 더 편했었다. 그렇게 다 완성하고 예제사이트로 포스트맨 요청을 보내는데 쿠키값으로 authorization=Bearer%25eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjYsImlhdCI6MTY3MDQ4MDEzNywiZXhwIjoxNjcwNDgzNzM3fQ.9JoNX-srlL5GaImmf9-oDYPvSIpUsgP78fo9rJ1v_jg

이런 식으로 토큰을 받고있길래 저 형태로 쿠키값을 넣어주고 로그인인증 할때 hearder에서 가져오는 것이 아닌 req.cookies에서 가져오게 바꿔줬다. 이제와서 생각해보면 정말 오래 걸릴 게 없는데 그냥 어렵다는 생각이 머리에 박혀서 집중도 잘 못하고 그래서 오래 걸렸던 것 같다. 그리고 만약 로그인이 됐을 때 회원가입, 로그인 api로 요청을 보내면 이미 로그인 되어있습니다 라는 응답을 줘야하는데 이 부분이 좀 헷갈렸다. 그냥 쿠키값에 authorization 값이 있다면 로그인 된 상태로 볼 것인가 아님 쿠키로 받은 토큰값을 디코딩해서 찾은 id로 디비에 검색해서 유저가 있다면 로그인 된 상태로 볼 것인가 라는 고민에 빠졌고 나는 후자로 선택했다. 다 구현하고 잘 작동한다고 생각했는데 문제가 유효시간이 지나면 디코딩 하던 중 에러가 떠 catch문으로 빠지는거였다. 그래서 난 if(error.message === jwt is expired) 이런 식으로 catch문에서 if문을 써 만약 만료에러면 next() 이런식으로 짰더니 잘 작동했다.

 

솔직히 이번 주는 기본 기능이지만 쉽지는 않았다. 실제로 대부분의 사람들이 어려워하고 포기를 생각할정도로 어려운 주차였다. 그리고 고맙게도 질문을 해주시는 분들도 계셨고 그 질문들을 해결하면서 나도 같이 성장해가는 기분이 들었다. 이게 쭈욱 이어져서 실전때까지 이어지면 좋겠다.