상태 및 온라인 상태 추적
온라인 사용자를 표시하는 실시간 상태 시스템을 구축하고, 연결 및 연결 해제 이벤트를 브로드캐스트하며, 사용자의 현재 상태를 표시하는 방법을 익혀 보세요.
상태 및 온라인 상태 추적은(는) CoddyKit의 무료 WebSockets & Real-Time Systems with Spring 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 WebSockets & Real-Time Systems with Spring 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. WebSockets & Real-Time Systems with Spring 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
What Is Presence?
Presence is knowing who is currently online: the green dots in chat apps, the live cursors in collaborative editors, the active-now lists. It is one of the most requested real-time features.
Presence Is About Lifecycle Events
The core insight: presence is derived from connection lifecycle. When a session opens, mark the user online; when it closes, mark them offline, then broadcast the change.
Listening to Connect Events
Spring publishes a SessionConnectedEvent when a STOMP session is established. Use it to record the user as online.
@EventListener
public void onConnect(SessionConnectedEvent e) {
String user = e.getUser().getName();
presence.markOnline(user);
broadcast(user, "ONLINE");
}Listening to Disconnect Events
A matching SessionDisconnectEvent fires on close. Mark the user offline and broadcast it.
@EventListener
public void onDisconnect(SessionDisconnectEvent e) {
String user = userFor(e.getSessionId());
presence.markOffline(user);
broadcast(user, "OFFLINE");
}Storing Presence State
For a single server a concurrent map works. For a cluster, store presence in Redis so every node sees the same online set.
redis.opsForSet().add("online:users", username);
redis.opsForValue().set("presence:" + username, "ONLINE", Duration.ofMinutes(2));Broadcasting Status Changes
Push each change to a presence topic so every interested client updates its UI live.
messagingTemplate.convertAndSend("/topic/presence",
new PresenceEvent(username, status));Multiple Tabs and Devices
A user with two tabs has two sessions. Reference-count them: only mark offline when the last session closes, or you will flicker the status.
Handling Ungraceful Disconnects
A crash may not send a clean close. Pair presence with heartbeats and a TTL: if no heartbeat arrives before the key expires, treat the user as offline.
Last-Seen Timestamps
Beyond online/offline, record a last-seen time on disconnect. The UI can then show "active 5 minutes ago" for offline users.
redis.opsForValue().set("lastseen:" + username, Instant.now().toString());Sending the Initial Snapshot
When a client first connects it needs the current online list, not just future changes. Send a snapshot on subscription, then stream deltas.
@SubscribeMapping("/presence.init")
public Set<String> initial() {
return presence.onlineUsers();
}Privacy Considerations
Presence can leak behavior patterns. Offer an invisible mode and respect it server-side, so a user who opts out is never broadcast as online.
Quick Check
Test your presence knowledge.
Recap
You built presence:
- Presence derives from connect/disconnect lifecycle events
- Use
SessionConnectedEvent/SessionDisconnectEventand broadcast changes - Store shared state in Redis for clustering; reference-count multiple sessions
- Pair with heartbeats and TTLs to catch ungraceful disconnects
- Send an initial snapshot, track last-seen, and honor invisible mode
자주 묻는 질문
“상태 및 온라인 상태 추적” 강의는 무료인가요?
네 — “상태 및 온라인 상태 추적” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 WebSockets & Real-Time Systems with Spring 강의 전체를 잠금 해제할 수 있습니다. WebSockets & Real-Time Systems with Spring 강의에는 총 4개의 강의가 포함되어 있습니다.
“상태 및 온라인 상태 추적”에서 뭘 배우나요?
온라인 사용자를 표시하는 실시간 상태 시스템을 구축하고, 연결 및 연결 해제 이벤트를 브로드캐스트하며, 사용자의 현재 상태를 표시하는 방법을 익혀 보세요. 브라우저에서 직접 실행하는 실습 코드로 WebSockets & Real-Time Systems with Spring을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
WebSockets & Real-Time Systems with Spring을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 WebSockets & Real-Time Systems with Spring은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“상태 및 온라인 상태 추적” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 WebSockets & Real-Time Systems with Spring 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 WebSockets & Real-Time Systems with Spring 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 서버 전송 이벤트(SSE)와 WebSockets 비교
- 실시간 데이터 푸시 아키텍처
- 사용자 알림 구현
- 상태 및 온라인 상태 추적