순수 서블릿에서의 웹소켓 동작 폼이다.
@ServerEndpoint("/connect")
public class SimpleWebSocketServer {
@OnOpen
public void onOpen(Session session) {}
@OnMessage
public void onMessage(String message, Session session) {}
@OnClose
public void onClose(Session session) {}
}
실제로 메서드를 채우면 아래와 같다.
@ServerEndpoint("/connect")
public class SimpleWebSocketServer {
// Spring에서의 sessions와 동일하게 메모리에서 관리
private static final Set<Session> sessions = ConcurrentHashMap.newKeySet();
@OnOpen
public void onOpen(Session session) {
sessions.add(session);
}
@OnMessage
public void onMessage(String message, Session session) {
for (Session s : sessions) {
if (s.isOpen()) {
try {
s.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@OnClose
public void onClose(Session session, CloseReason reason) {
sessions.remove(session);
}
@OnError
public void onError(Session session, Throwable throwable) {
throwable.printStackTrace();
}
}
순수 서블릿에서 사용하는 웹소켓 코드이다.
스프링에서는 웹소켓이 아래와 같이 변한다.
@Component
public class SimpleWebSocketHandler extends TextWebSocketHandler {
// 메모리에서 관리하는 사용자들의 세션
private final Set<WebSocketSession> sessions = ConcurrentHashMap.newKeySet();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String payload = message.getPayload();
for (WebSocketSession s : sessions) {
if (s.isOpen()) {
s.sendMessage(new TextMessage(payload));
}
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions.remove(session);
}
}
[Servlet WebSocket -> Spring WebSocketServlet]
@OnOpen public void onOpen(Session session) : 연결 알림
=> afterConnectionEstablished(WebSocketSession session)
@OnMessage public void onMessage(String message, Session session) : 메시지 수신
=> handleTextMessage(WebSocketSession session, TextMessage message)
@OnClose public void onClose(Session session, CloseReason reason) : 연결 종료
=> afterConnectionClosed(WebSocketSession session, CloseStatus status)
Servlet WebSocket -> Spring WebSocket 이후 Stomp 개념이 등장한다.

'Java & Spring' 카테고리의 다른 글
| [Java] Map 정렬 (0) | 2026.03.03 |
|---|---|
| [Spring] ResponseEntity (0) | 2026.02.22 |
| [Spring] Security (0) | 2026.02.15 |
| [Java] Reflection (0) | 2026.01.01 |
| [JAVA] JVM의 구조 (0) | 2025.12.09 |