WEB6 - Multi User Auth
WEB5에서 발생한 문제를 해결한 후, 드디어 WEB6를 시작했다. 제목은 'Multi User Auth'로, 한 명의 사용자만 로그인할 수 있었던 기존의 서비스를 개선해 여러 명의 사용자가 로그인할 수 있는 서비스를 구현하는 방법을 배우는 강의였다. WEB5 - Passport를 두 번 학습하며 Passport에 대한 이해도도 높아졌고, 다중 사용자는 실질적으로 웹 서비스를 만들 때 필수적인 기능이었기에 기대가 되었다.
WEB5에선 한 명의 사용자만 존재했기 때문에, 미리 auth.js 파일에 사용자의 정보를 저장해 두었고, 웹 상에서 새로운 사용자를 등록하는 것은 불가능했다. 하지만 다중 사용자 시스템에서는 새로운 사용자의 등록이 필수적이었고, 이를 위해 register 기능을 구현했다. 또, 여러 명의 사용자 정보를 저장하기 위해 lowdb를 활용했다. 새로운 사용자의 등록 후 자동으로 그 사용자로 로그인하는 기능을 구현하던 중, 사용자의 정보가 데이터베이스에는 저장되었지만 세션 저장소에 저장되지 않는 오류가 발생했다. WEB5에서 같은 문제를 해결해 본 경험이 있기 때문에, 당황하지 않고 명시적으로 세션 데이터를 저장하는 코드를 추가해 오류를 제거할 수 있었다. 또한 이 문제를 해결하기 위해 구글링하던 중, Passport가 authenticate 메소드를 통해 login 메소드를 암묵적으로 실행한다는 사실도 알게 되었다.
회원가입, 로그인 로직을 lowdb를 활용하도록 변경 한 이후, 게시글 역시 데이터베이스에 저장되도록 변경했다. 또한 게시글의 작성자를 표시했고, 작성자가 아닌 다른 사용자가 데이터를 변경할 수 없도록 설정했다. 이와 함께 사용자 ID와 글의 제목을 모두 직접적인 이름이 아닌 무작위의 식별자를 생성해 연결하도록 했다. 마지막으로, 보안을 향상시키기 위해 bcrypt라는 라이브러리를 활용했는데, 이를 통해 데이터베이스에는 사용자가 회원가입 과정에서 입력한 비밀번호의 원본 값이 아니라, 그 비밀번호를 해싱한 값만을 보관하도록 했다. 웹 서비스의 운영자 조차도 사용자의 진짜 비밀번호를 알 수 없도록 조치한 것이다.
디자인적인 요소는 배제하고 기능 구현에만 집중했기 때문에 웹 사이트가 보기 좋은 모습은 아니었지만, 기능적으로는 점점 발전하고 있어 뿌듯했다. 아직 실제로 활용하기에는 부족하지만, 기능적인 부분과 보안 측면에서 개선을 거치고 시각적인 요소를 추가한다면, 간단한 개인 블로그 정도의 용도로는 충분히 사용할 수 있을 것 같았다. WEB7을 통해 소셜 로그인 기능까지 구현된다면, 사용자의 편의성 역시 훨씬 좋아질 것이다.
WEB2 - OAuth 2.0
WEB6 다음은 WEB7이지만, 그 전에 WEB2 - OAuth 2.0을 학습했다. 연합 인증(Federated Identity, 타사의 API를 이용해 '소셜 로그인' 기능을 구현하는 기술)을 본격적으로 공부하기 전에 배워두면 도움이 될 것이라고 생각했기 때문이었다. 강의 분량도 짧은 편이었고, 이전까지의 강의와는 달리 직접 실습을 해보지 않고 단순히 동영상을 시청하면서 공부했다. 연합 인증의 구체적인 원리가 아니라 대략적인 개념 정도만 다루는 수업이어서 학습 시간이 길지는 않았지만, 유익했던 수업이었다.
강의명 : Opentutorials - WEB6 - Multi User Auth
학습 기간 : 2021.07.26 ~ 2021.07.28
강의명 : Opentutorials - WEB2 - OAuth 2.0
학습 기간 : 2021.07.29
'Dev' 카테고리의 다른 글
WEBn (Fin.) (0) | 2021.08.07 |
---|---|
WEB7 - Login with Google / Facebook on Passport (0) | 2021.08.06 |
DATABASE2 - lowdb / WEB5 - Passport _ REWORK (0) | 2021.07.30 |
WEB5 - Passport.js (0) | 2021.07.21 |
WEB3 - Node.js - Cookie & Auth / WEB4 - Express - Session & Auth (0) | 2021.06.03 |