GIGO MIND DEV BLOG

User Online Status

디스코드나 스카이프 같은 웹 애플리케이션 심지어는 게임 클라이언트 (요새는 다 html5 써서, electron, react native같은 프레임워크 등등으로 제작되더라..)에서도 유저 online state를 제공한다.

구현하는 개념이 어떨까?


먼저 유저가 로그인했는지 안했는지 알려면, 우리는 보통 쿠키나 세션에 유저가 로그인했다는 정보를 넣어서 브라우저가 들고 있게 한다.

브라우저는 꽤나 잘만들어져서 유저가 아무것도 안하고 일정 시간이 지나면 세션을 새로 리셋 시켜준다.

비슷하게도 유저가 온라인인지 아닌지 다른 사람이 볼 수 있게 하려면, 서버는 다음과 같은 두가지 개념이 필요하다.

  • 유저 한명한명 마다의 “세션”
  • “세션”을 다른 사람의 시점에서 언제 업데이트해주나

유저 한명한명마다 정보를 담고 있다.. 이거 어디서 들어봤는데?

그냥 데이터베이스에 테이블을 하나 만들어주면 된다.

Primary Key/foreign key는 유저, 그리고 유저의 “세션”.
세션은 가상의 개념으로 우리가 구상해볼 수 있다.
세션은 유저가 웹사이트에 들어와서 로그인을 했을 때, 그 떄 우리에게 보내는 웹 관련 request들을 토대로 그 시점의 시간으로 정할 수 있다.
만약 마지막에 유저가 보낸 request 시간이 어떤 time interval 안이라면, 유저는 온라인이다. 그 반대는 오프라인이다.

만약 다른 유저가 어떤 유저의 온라인 상태를 봤다 쳤을때 언제마다 업데이트 해주면 되나? 이건 자바스크립트의 time interval을 써서 몇초마다 계속 업데이트 해주면 된다.
이것이 어느정도의 overhead는 있지만, 제일 간단한 방식이다.


디스코드같이 오프라인 모드는 어떻게 하나?
만약 유저가 숨김 status(모드)를 정해놨을시, 이 시간 부분을 훨씬 전으로 바꿔주면 된다. 그리고, status가 숨김일 시, request에 online update를 안해주면 된다.

idle은 아직 잘 모르겠다. 이 부분은 더 찾아봐야겠다.