25.03.25 TIL Websocket

신성훈·2025년 3월 25일
0

TIL

목록 보기
155/162

오늘은 멋쟁이사자처럼에서 WebSocket에 대해 공부했습니다.
WebSocket은 기존 HTTP 기반의 요청-응답 방식과 달리 양방향, 실시간 통신이 가능한 프로토콜이다.
이를 활용하면 실시간 채팅, 주식 거래, 라이브 스트리밍 등의 기능을 구현할 수 있다.


1. WebSocket의 주요 개념

1) 핸드셰이크(Handshake) → HTTP 요청을 통해 WebSocket 연결을 설정 (Upgrade: websocket)
2) 양방향 통신(Full-Duplex) → 클라이언트와 서버가 독립적으로 메시지를 주고받을 수 있음
3) 프레임 단위 통신 → WebSocket은 텍스트 또는 바이너리프레임으로 데이터를 송수신
4) Ping/Pong 프레임 → 연결 상태를 유지하기 위해 주기적으로 확인
5) 연결 종료(Close Frame) → 클라이언트 또는 서버가 종료 요청을 보내고 연결을 닫음


2. WebSocket과 HTTP의 차이점

비교 항목WebSocketHTTP
통신 방식양방향 (Full-Duplex)단방향 (Request-Response)
연결 유지지속적인 연결 유지요청마다 새로운 연결
데이터 교환실시간 전송요청 시에만 응답
사용 사례채팅, 주식 데이터, IoT 등일반적인 웹 서비스

3. Spring Boot에서 WebSocket 구현

1) WebSocket 설정

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new ChatWebSocketHandler(), "/ws").setAllowedOrigins("*");
    }
}
  • /ws 엔드포인트로 WebSocket 핸들러 등록
  • setAllowedOrigins("*") → CORS 문제 해결

2) WebSocket 핸들러 구현

@Component
public class ChatWebSocketHandler extends TextWebSocketHandler {
    private final Set<WebSocketSession> sessions = new CopyOnWriteArraySet<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        sessions.add(session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) {
        for (WebSocketSession webSocketSession : sessions) {
            if (webSocketSession.isOpen()) {
                webSocketSession.sendMessage(message);
            }
        }
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
        sessions.remove(session);
    }
}
  • 클라이언트가 메시지를 보내면, 모든 세션에 전송
  • CopyOnWriteArraySet → 멀티스레드 환경에서 세션을 안전하게 관리

4. WebSocket의 장점과 단점

장점

  • 실시간 양방향 통신이 가능
  • HTTP보다 네트워크 부하가 적음 (연결 유지)
  • Polling 방식보다 효율적

단점

  • 서버 부하 증가 (연결을 유지해야 함)
  • 브라우저 지원 여부 확인 필요
  • 추가적인 인증 및 보안 설정 필요

5. 마무리

WebSocket은 실시간 데이터 처리가 필요한 서비스에서 필수적인 기술이다.
하지만서버 부하 관리 및 세션 처리가 중요하므로 적절한 인증 및 부하 분산 전략을 함께 고려해야 한다는 점을 배웠다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글