# 사용자의 최근 활동
사용자의 최근 활동 시간을 쉽고 빠르게 트래킹 하는 방법이 없을까요?
sehongpark님의 답변
## 마이그레이션
마이그레이션을 통한 컬럼 추가
```
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)