NestJS로 warudo 연결하기

Warudo란 무엇인가?

Warudo는 3D VTuber 라이브 스트리밍을 위해 특별히 설계된 아바타 애니메이션 소프트웨어다. Warudo는 WebSocket을 통해 실시간으로 데이터를 주고받을 수 있는 시스템인데, 주로 실시간 통신이 필요한 애플리케이션에서 사용되며 빠르고 효율적인 데이터 전송을 지원한다. 특히 대화형 애플리케이션이나 실시간 업데이트가 필요한 시스템에서 유용하게 사용될 수 있다.

 

왜 Warudo여야 하는가?

Warudo는 캐주얼 사용자와 전문 사용자 모두를 위해 설계된 종합적이고 기능이 풍부한 3D VTubing 소프트웨어로써, 다양한 모션 캡쳐 시스템을 지원하므로 집에서 스트리밍하거나 전문 모션 캡처 스튜디오에서도 사용할 수 있다. 또한, 500개 이상의 기본 애니메이션으로 캐릭터를 포즈를 취할 수 있게 하거나, 라이브 스트리밍 플랫폼과 통합, 노드 기반의 시각적 스크립팅 시스템 등 다양한 기능을 제공하고 있다. 그 외에도, 커스터마이징이 가능하고 Unity와 호환되는 3D 에셋을 가져올 수 있는 Mod SDK와 맞춤 기능을 개발하고자 하는 사용자들을 위한 C# scripting SDK를 제공해서 사용자와 개발자 모두에게 매우 유용하다.

 

장점

  1. 실시간 통신: WebSocket을 사용하여 클라이언트와 서버 간의 실시간 양방향 통신을 지원.
  2. 효율성: HTTP와 달리 지속적인 연결을 유지하여 데이터 전송 시 오버헤드를 줄인다.
  3. 확장성: 다양한 애플리케이션에 쉽게 통합할 수 있으며, 실시간 데이터 전송이 필요한 다양한 시나리오에 적용 가능.

 

사용 방법

WebSocket 연결 설정

private connectWebSocket() {
  this.webSocket = new WebSocket('ws://127.0.0.1:19190');

  this.webSocket.on('open', () => {
    console.log('WebSocket connection opened.');
    this.isReconnecting = false;
  });
}

connectWebSocket 메서드를 사용하여 WebSocket 서버에 연결한다. warudo는 기본적으로 19190 포트를 사용하고, warudo에서 포트를 변경할 수 있다. 서버에 연결이 성공하면 "WebSocket connection opened."라는 로그가 출력되는데, 이는 연결이 성공적으로 이루어졌음을 나타낸다.

 

연결 상태 관리

this.webSocket.on('close', (code, reason) => {
  console.warn(`WebSocket closed: ${code} - ${reason}`);
  console.log('Attempting to reconnect...');
  this.attemptReconnect();
});

this.webSocket.on('error', (error) => {
  console.error('WebSocket error:', error);
  console.log('Attempting to reconnect due to error...');
  this.attemptReconnect();
});

연결이 끊어지면 "Attempting to reconnect..."라는 로그가 출력되며, attemptReconnect 메서드를 통해 일정 시간 후에 재연결을 시도한다.

 

메시지 전송

sendMessageToWarudo 메서드를 사용하여 Warudo로 메시지를 전송한다. WebSocket 연결이 열려 있는 경우에만 메시지를 전송할 수 있다.

sendMessageToWarudo(message: string) {
  if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
    console.log('WebSocket is open. Sending message:', message);
    this.webSocket.send(message, (err) => {
      if (err) {
        console.error('Error sending message to Warudo:', err);
      }
    });
  } else {
    console.error('WebSocket is not open. Cannot send message.');
  }
}

메시지를 전송할 때 "WebSocket is open. Sending message:"라는 로그가 출력된다. 만약 연결이 열려 있지 않다면 "WebSocket is not open. Cannot send message."라는 오류 로그가 출력된다.

 

디버깅 및 오류 처리

연결 상태와 메시지 전송 상태를 로그로 출력하여 디버깅을 용이하게 한다. 오류 발생 시 자동으로 재연결을 시도하여 안정성을 높인다. 만약 오류가 발생하면 "WebSocket error:"라는 로그가 출력되며, 자동으로 재연결을 시도하게 된다. 이러한 기능을 통해 Warudo는 실시간 통신이 필요한 다양한 애플리케이션에서 유용하게 사용될 수 있다.

 

 

 

이후 포스팅에서 챗봇과 연결하여 warudo가 어떻게 동작하는지 살펴보자!!!

 

참고)

https://docs.warudo.app/ko/docs

 

Warudo 소개 | Warudo Handbook

Warudo란 무엇인가요?

docs.warudo.app

 

 

 

 

etc-image-0