휴면회원 관리
이번 프로젝트에서는 추후에 업데이트 될 서비스를 위해 실제로 서비스를 사용하는 유저를 구별할 필요성이 있었다.
그리하여 한달동안 로그인을 하지 않은 유저는 휴면회원 처리를 하여 이메일 인증을 해야만 사이트를 이용할 수 있게 하였다.
주기적으로 정해진 시간에 로직을 실행시킬 수 있는 라이브러리를 찾아보다가 Node-schedule을 찾게 되어 적용하였다.
내가 생각한 방법
- DB에 LoginHistory (마지막으로 로그인한 기록), expiration (휴면상태인지 아닌지를 표현) 이렇게 두 가지의 column을 만든다.
- 로그인을 할 때마다 그 계정의 LoginHistory를 현재 날짜와 시간으로 업데이트 한다.
- 매일 00시 00분 마다 DB에 저장된 모든 유저들의 LoginHistory에 1달을 더한다.
- 1달을 더한 값이 현재의 시간보다 과거라면 expiration을 true로 바꿔서 휴면계정으로 만든다.
구현 과정
1번과 2번은 mongoose를 이용한 findOneAndUpdate를 사용하여 평소에 하던 것처럼 손쉽게 할 수 있었기 때문에 생략했다.
3번 같은 경우는 nodeschedule을 이용했다.
nodeschedule의 시간을 매일 00시 00분으로 맞춰놓고 유저 DB에서 마지막 로그인 기록을 가져온 뒤 setMonth를 사용해서 한달을 더해 주었다.
더하는 과정에서 한달을 더해주는 기능은 함수로 따로 만들어서 관리를 해주었다.
구현 코드
