로그인, 회원가입 구현해보기

박정호·2021년 12월 22일
0

컴퓨터를 사용하면서 가장 많이 하는 행위는 아마 로그인(+회원가입)일 것이다.
네이버, 카카오톡, 롤 그리고 오래 사용하지 않았던 사이트들에서 계정을 찾는 행동 등
심지어는 핸드폰 FaceID 혹은 패턴까지 말이다.

로그인, 회원가입에서 가장 중요시해야 하는 관점은 권한이라고 생각한다.
(DB, 비밀번호 정규식, 등등 여러 키워드 중에서)
유저가 이용할 모든 것의 준비단계이니 말이다.

Authorization

  1. 로그인의 목적은 세션(캐시)를 통해 로그인 접속이 유지 될것
  2. db or 메모리에 저장된 유저가 맞는지 권한을 부여하는 것
  3. 세션에 저장할 데이터 정도

구현은 최대한 간단하게 진행한다.
복잡한건 목적에 따라 조금씩 추가하면서 써내려 가면 된다.
목적이 있어야, 그리고 뭘 알아야 뭐라도 쓸 수 있지 않겠는가
서비스를 시작했는데 나의 미성숙한 결과물에 그대로 데이터가 쏟아졌다면 그 결과는 굳이 상상하고 싶지 않다

미들웨어의 역할을 가지게 되는 상태까지 구현을 해보도록 한다.

로그인 구현에서 가져가야할 주제를 생각해보면
1. 로그인, 회원가입 등의 행위를 통해 유저에게 권한을 부여해야 한다.
2. 권한이 일정 시간 동안에 유지되어야 한다.

  • 로그인이 풀리는 것을 막기 위해 세션에 저장을 해야한다.
  • 성능 이슈를 고려하여 세션에 최대한 적은 데이터를 넣기를 고려해야한다.
  1. 유저 데이터를 저장할 곳을 정해야한다.
  • 데이터베이스는 MYSQL 그리고 시퀄라이즈 라이브러리를 사용하였다
  1. 권한을 부여하는 조건을 기술해야한다.
  • 비밀번호 정규식
  1. 권한을 재부여 하는 것도 생각해야 한다.
  • 비밀번호 찾기

각각의 번호를 구체화 시켜본다(앞선 글들에서 언급한 육하원칙을 이용하여)
다시 생각해도 육하원칙을 따르는 것은 정말 개발에 도움이 많이 되는 것 같다.

1. 이번 글에서는 노드, 그리고 익스프레스 라이브러리를 이용하여 서버를 구성하겠다.

  • 조금 더 깊게 들어가면 노드 앞에 NGINX 등을 둘 수도 있는데(NGINX에서 자체적으로 로그인 처리를 구현해 놓아 바로 이용할 수 있게끔 되어있더라)

2. 부여한 권한을 세션 처리를 할 것이다. 이를 쉽게 구현하기 위해 패스포트 라이브러리를 이용하겠다.

세션은 DB에서 유저 정보가 확인이 되었을 경우 생성하도록 한다.
그리고, 성능이슈를 고려해 세션에는 유저의 id만 저장을 하고 다른 요청이 들어올 시에 나머지 정보를 가져오는 식으로 한다.

3. 유저 데이터는 MYSQL을 이용할 것이다. 이를 쉽게 구현하기 위해 시퀄라이즈 라이브러리를 이용하겠다.

4. 유저가 DB에 있는지, 비밀번호는 맞게 쳤는지 등을 구현해본다

  • 사실 정규식에 대한 지식이 부족하긴 하다. 문자 + 숫자 + 특수문자 식으로 적는 규칙이 그렇게 믿음직한 규칙인가..?? 맨날 누가 내 계정에 접속했다고 뜨던데...
    나중에 정규식 효율에 대해 검색을 좀 해봐야겠다.

5. 비밀번호 찾기

예전에는 비밀번호 찾기시 비밀번호를 알려주는 식이었지만, 그건 암호화가 되지 않았거나 양방향으로 되어있는 것이기 때문에 (나는 단방향으로 암호화를 할 것이다) 요즘 트렌드는 링크에 일정 시간을 주어 새로운 비밀번호를 입력하게 하는 식이니까 이때 토큰을 좀 이용해 보겠다

코드는 깃에 올려놓았다.
https://github.com/pjh94/MakeLoginJoin

코드는 3차 프로젝트에서 구현했던 것을 가져왔다.
3차 프로젝트 당시 OPEN API를 사용하면서 요청, 응답 등의 프로세스에 관심이 있었고
데이터베이스 서버를 하나 따로 두어 로그값을 살펴볼 수 있도록 했다.
비동기 요청으로 오고 가고한 것만 참고해서 코드를 보면 좋을 듯 하다.

profile
개발하기

0개의 댓글