[javascript] 비동기 데이터 요청을 이용한 웹소켓 통신

웹소켓은 클라이언트와 서버 간 실시간 양방향 통신을 가능케 하는 프로토콜이다. 웹소켓을 이용하면 실시간 채팅, 게임, 주식 시세 업데이트 같이 실시간성이 요구되는 다양한 애플리케이션을 개발할 수 있다.

기존의 웹소켓 통신 방식

기존에는 웹소켓 통신을 위해 일반적으로는 웹소켓 API를 사용했다. 클라이언트 측에서 WebSocket 객체를 이용하여 서버에 연결하고, 서버도 해당 연결을 받아들이는 형태로 구현했다. 하지만, 이런 방식은 복잡하고 섬세한 설정이 필요하며, 비동기 이벤트 처리가 어렵다는 단점이 있다.

비동기 데이터 요청을 이용한 웹소켓 통신

하지만, 최근에는 비동기 데이터 요청을 이용하여 웹소켓 통신을 구현하는 방법이 널리 사용되고 있다. 일반적으로 fetch API나 axios 같은 라이브러리를 이용하여 서버에 HTTP 요청을 보내고, 서버에서는 해당 요청을 받아들일 때 웹소켓 연결을 맺는다. 이 방식을 이용하면 더욱 유연하고 쉽게 웹소켓 통신을 구현할 수 있다.

다음은 fetch API를 이용하여 웹소켓 통신을 구현하는 예제이다.

fetch('/connect-ws', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
})
.then(response => response.json())
.then(data => {
  const ws = new WebSocket(data.url);
  ws.onopen = function() {
    console.log('웹소켓 연결 완료');
  };
  ws.onmessage = function(event) {
    console.log('메시지 수신:', event.data);
  };
  ws.onclose = function() {
    console.log('웹소켓 연결 종료');
  };
})
.catch(error => {
  console.error('에러 발생:', error);
});

이렇게 하면 클라이언트에서 비동기 데이터 요청을 통해 서버와 웹소켓 통신을 쉽게 구현할 수 있다.

마치며

비동기 데이터 요청을 이용한 웹소켓 통신은 기존의 웹소켓 API를 이용한 방식보다 유연하고 간편하다. 이 방법을 이용하여 더욱 쉽게 실시간 웹 애플리케이션을 개발할 수 있다.

참고 자료