그룹웨어 - 채팅 구현(2)

김채영·2024년 9월 15일

채팅

목록 보기
2/8

웹소켓 연결 유지 확인

웹소켓

  • 클라이언트와 서버 간에 양방향 통신을 실시간으로 가능하게 하는 통신 프로토콜
  • 서버와 클라이언트 간의 지속적인 연결을 유지하여 데이터를 실시간으로 주고받을 수 있게 함
  • HTTP와 달리 클라이언트가 요청을 보내지 않아도 서버가 데이터를 전송

특징

  • 실시간 양방향 통신: 양방향으로 데이터를 주고 받음
  • 지속적인 연결 유지: 한번 연결이 이루어지면 HTTP와 달리 요청과 응답주기 없이 지속적인 데이터 통신이 가능
  • 낮은 오버헤드 : HTTP처럼 매번 헤더를 주고받지 않아도 되어, 네트워크 트래픽이 줄어들어 오버헤드가 적음

    오버헤드 : 시스템 자원을 사용하거나 데이터를 처리할 때 추가로 발생하는 비용 또는 부하를 의미
    HTTP오버헤드 : HTTP는 요청마다 헤더, 쿠키, 인증 정보 등을 포함해 전송하는데 데이터의 크기가 작을수록 헤더의 비율이 상대적으로 커져 오버헤드가 커짐
    WebSocket오버헤드 : 웹소켓은 HTTP와 비교할 때 초기 연결을 유지하면서 추가적인 요청이나 응답없이 데이터를 주고 받으니 헤더를 반복해서 보내는 오버헤드가 적은 편임

웹소켓 연결


(1) 스프링부트 의존성 추가

//Gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
}

(2) WebSocketConfig 설정


@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    private final WebSocketHandler webSocketHandler;

    public WebSocketConfig(WebSocketHandler webSocketHandler) {
        this.webSocketHandler = webSocketHandler;
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        // WebSocket 핸들러를 등록하고 엔드포인트 설정
        registry.addHandler(webSocketHandler, "/ws").setAllowedOrigins("*");
    }
}

(3) WebSocketHandler 설정

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        // 수신한 메시지 출력
        System.out.println("Received message: " + message.getPayload());

        // 클라이언트에게 응답 메시지 전송
        session.sendMessage(new TextMessage("Server received: " + message.getPayload()));
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("Client connected: " + session.getId());
    }
}

(4) 테스트한 값 확인하기

  • 인코딩 문제로 콘솔창에 한글 깨짐 발생은 있지만, 값 확인 가능
profile
백엔드 개발⭐

0개의 댓글