이번에는 Node.js의 인증 미들웨어인 Passport.js를 학습했다. 이전 강의들에서 쿠키와 세션을 이용해 웹사이트에서 로그인 기능을 구현했는데, Passport.js는 이러한 기초적인 방법보다 훨씬 강력했다. Passport에서 로그인 방식은 'Strategy'로 표현하는데, 자체적으로 로그인을 구현하는 local과, 구글, 페이스북, 네이버, 카카오 등의 대형 기업들이 가지고 있는 사용자 정보를 사용하는 여러 방법들이 존재했다. 자체적으로 사용자 정보를 관리할 경우 서버와 보안 소요가 커지기 마련인데, Passport.js를 이용하면 사용자 정보를 자체적으로 따로 저장하지 않으면서 인증 기능만 제공하는 '소셜 로그인' 기능을 구현할 수 있다는 점이 흥미로웠다. 이번 강의에서는 가장 기초적인 local strategy를 활용했다.
간단하게 기능을 설명하자면, serializeUser는 로그인 성공 시 실행되며, 인증에 성공한 사용자의 데이터를 세션에 저장하는 역할을 한다. deserializeUser는 사용자가 웹사이트 내에서 이동할 때마다 실행되는데, serializeUser를 통해 세션에 저장된 사용자의 정보를 DB에 저장된 정보와 비교하고, 일치 할 경우 다시 사용자 정보를 매개변수를 통해 request로 전달한다. deserializeUser의 경우 한 번 로그인 한 사용자가 로그인 상태를 유지할 수 있도록 한다. Verify callback이라고 불리는 부분, passport.use의 callback 함수에서는 입력된 정보를 DB와 비교해 인증을 시도하며, 유저 정보나 에러를 반환한다. 이처럼, 단순해 보이는 로그인 기능이지만, 인증 과정이 꽤 복잡했다.
강의의 분량은 짧았지만, 내용이 꽤 어려웠다. 여러 개의 함수들이 서로 인자를 주고받으며 상호작용했던 탓에 머릿속에서 로직이 부드럽게 연결되지 않았다. 또 솔직히 말해서 전역을 앞두고 후임들과 조금 더 추억을 쌓고 싶은 마음에 공부에 소홀해진 부분도 영향이 컸다. 학습을 연속적으로 하지 못하니 이전 학습 내용을 잊어버렸고, 자연스레 진도를 나가는 속도도 더뎌졌다. 때문에 이고잉님의 강의나 Passport.js 사이트의 설명뿐만 아니라 구글링으로 다른 블로그들에 정리된 내용을 찾아보며 이해하기 위해 노력했다. 사실 학습을 끝내고 얼마 지나지 않아 후기는 전역 한 이후에 작성하게 되었는데, 몇 주만에 코드를 다시 뜯어보니 잘 와닿지 않아 다시 찬찬히 복습한 끝에 후기 작성을 완료할 수 있었다.
커리큘럼 상 다음 강의는 DATABASE2 - lowdb이다. 사실 후기 글을 작성하기 전 강의를 조금 들어 보았는데, 생각지도 못한 문제가 발생했다. 강의는 lowdb1 버전을 기반으로 하고 있는데, 21년 들어 문법이 대규모로 바뀌며 lowdb2로 업데이트 된 것이다. 만약 WEBn 시리즈 학습을 이어간다면 lowdb1 기반의 영상을 보고 lowdb2로 코딩을 해야 하므로 노력이 더 필요할 것 같다. 사실 원래 전역 후에는 알고리즘 공부를 시작 할 계획이었는데, 독학을 통해 lowdb와 소셜 로그인 기능까지 쭉 학습 할 지, WEBn 학습을 멈추고 알고리즘 공부에 집중해야 할 지, 생각을 해 보아야 할 것 같다.
* 참고
CurlyHairDev - 'Passport.js 로컬 인증 방식 사용법과 동작 흐름' : https://dev-dain.tistory.com/73
ZeroCho - 'Passport로 회원가입 및 로그인하기' : https://www.zerocho.com/category/NodeJS/post/57b7101ecfbef617003bf457
HYOSITIVE/WEB5-Passport
WEB5 - Passport.js class from Opentutorials by Egoing - HYOSITIVE/WEB5-Passport
github.com
강의명 : Opentutorials - WEB5 - Passport
학습 기간 : 2021.06.05 ~ 2021.06.08
'Dev' 카테고리의 다른 글
WEB6 - Multi User Auth / WEB2 - OAuth 2.0 (0) | 2021.07.31 |
---|---|
DATABASE2 - lowdb / WEB5 - Passport _ REWORK (0) | 2021.07.30 |
WEB3 - Node.js - Cookie & Auth / WEB4 - Express - Session & Auth (0) | 2021.06.03 |
WEB3 - Express (0) | 2021.04.23 |
DATABASE2 - MySQL / Node.js & MySQL (0) | 2021.03.14 |