# 사용자의 최근 활동 사용자의 최근 활동 시간을 쉽고 빠르게 트래킹 하는 방법이 없을까요?
## 마이그레이션 마이그레이션을 통한 컬럼 추가 ``` rails g migration add_last_seen_at_to_users last_seen_at:datetime ``` 모든 액션별 시간 기록 in ApplicationController ``` before_action :set_last_seen_at, if: proc { user_signed_in? } private def set_last_seen_at current_user.update_attribute(:last_seen_at, Time.current) end ``` ## 위 방법의 단점과 극복 리소스 사용율이 큼 => 모든 액션을 취하지말고, 15분정도에 하나씩 남겨보자. ``` before_action :set_last_seen_at, if: proc { user_signed_in? && (session[:last_seen_at] == nil || session[:last_seen_at] < 15.minutes.ago) } ``` ## 추가 고려사항 + 세션을 사용하면 느리다. 이미 devise를 사용하여 current_user에 접근할 수 있지 않나? + `update_attribute`는 `updated_at`을 변경한다. `update_column`을 사용해서 이를 피해보자. + 백그라운드 워크를 사용해 퍼포먼스 향상을 노려보자. `ActiveJob / Resque / Sidekiq` + high DB locking 회피를 위해 테이블을 나눠보자. ``` before_action :set_last_seen_at, if: proc { user_signed_in? && (user.last_seen_at.nil? || user.last_seen_at < 15.minutes.ago) } private def set_last_seen_at current_user.update_column(:last_seen_at, Time.now) end ``` ## 레퍼런스 + Rails: how to show user's “last seen at” time? (https://goo.gl/WGB6ux)