Back to Blog

Astro를 사용하여 영상 통화 앱을 개발하세요.

Build a Video Call App with Astro

Astro는 JavaScript를 사용하지 않고도 웹사이트에 정적 HTML을 렌더링하는 프레임워크로, 사용자가 명시적으로 요청하지 않는 한 JavaScript를 사용하지 않습니다. 이 프레임워크는 빠르게 인기를 얻고 있습니다. 하지만 Astro 웹사이트에 비디오 통화를 추가할 수 있을까요?

네, 맞습니다! 이 글에서는 정확히 어떻게 하는지 알려드리겠습니다.

우리가 사용할 것

물론, 이 기사의 제목이 바로 Astro 프레임워크이기 때문에 이를 필요로 합니다.

우리는 앱의 영상 통화 기능에 아고라를 사용할 것입니다. 구체적으로, 우리는 agora-rtc-react 패키지를 사용할 것입니다. 이 패키지는 아고라와 인터페이스하기 위한 React SDK입니다.

현재 Astro용 네이티브 패키지는 없습니다. 하지만 Astro는 거의 모든 인기 있는 웹 프레임워크와 함께 사용되도록 설계되었습니다. 따라서 agora-rtc-react 패키지는 문제없이 작동할 것입니다.

우리는 애플리케이션의 작은 스타일링에 Tailwind CSS를 사용할 것입니다.

아고라 계정을 생성하세요.

아고라 계정을 생성하고 대시보드에 로그인하세요.

프로젝트 관리 탭 아래의 프로젝트 목록 탭으로 이동합니다. 파란색 생성 버튼을 클릭하여 프로젝트를 생성합니다.

애플리케이션 개발 과정에서 애플리케이션 요청을 인증하는 데 사용할 앱 ID를 가져옵니다.

Astro 프로젝트를 초기화합니다.

  1. npm create astro@latest 명령어를 사용하여 Astro 프로젝트를 생성하세요.
  2. npm을 사용하여 Tailwind CSS를 추가하려면 astro add tailwind를 실행하세요.
  3. npm을 사용하여 React를 추가하려면 astro add react를 실행하세요.
  4. npm install agora-rtc-react 명령어를 사용하여 Agora UI Kit을 추가합니다.
  5. .env 파일에 PUBLIC_AGORA_APP_ID = '<---Your App Id--->'를 추가하세요.

프로젝트의 구조

Astro를 사용하여 양식 만들기

Astro SSG vs SSR

기본적으로 Astro 프로젝트는 변경할 수 없는 정적 사이트를 생성하는 정적 사이트 생성기(SSG)를 사용합니다. Astro는 React, Svelte, Vue 등과 같은 다양한 프레임워크와 상호작용할 수 있는 'islands'라는 메커니즘을 제공합니다. 양식은 상호작용이 가능해야 하며, 이를 위해 islands를 사용할 수 있습니다. 그러나 Astro를 사용하면 JavaScript를 전혀 사용하지 않고도 양식을 만들 수 있습니다.

이를 위해 astro.config.mjs 파일에 output: 'server'를 추가하여 서버 측 렌더러(SSR)를 활성화해야 합니다. 이로써 페이지가 서버에서 렌더링되게 됩니다. 이 방법은 서버 측 데이터를 액세스할 수 있으며, 페이지가 로드되기 전에 일부 기능을 실행할 수 있는 장점을 제공합니다.

Form UI

폼을 생성하고 제출하는 경우, 처음에 페이지를 로드하여 폼을 표시합니다. 이후 폼을 제출할 때마다 API 엔드포인트와 유사하게 작동합니다.

일반적으로 양식을 제출할 때 데이터가 URL에 추가되며, 이를 파싱해야 합니다. 양식의 데이터 전송 방법을 POST로 변경하면 양식 데이터가 요청 본문의 일부로 전송됩니다. 이 애플리케이션에서는 사용자가 가입하려는 채널의 이름만 필요합니다:

우리의 양식은 다음과 같이 보일 것입니다:

Screenshot of Astro x Agora login

폼 데이터를 가져오고 콜 페이지로 리디렉션합니다.

요청에 포함된 데이터를 제출하면 페이지가 재로드되고 데이터가 서버로 전송됩니다. 이 데이터는 페이지가 표시되기 전에 서버 측에서 가져와 처리될 수 있습니다. 이 경우 오류 여부를 확인합니다. 오류가 발견되면 사용자에게 오류를 표시하기 위해 동일한 페이지를 다시 렌더링합니다. 오류가 없으면 사용자가 입력한 비디오 통화 채널과 연결된 페이지로 사용자를 리디렉션합니다:

전화 페이지

agora-rtc-react를 사용하여 구축할 Call 구성 요소에서, 우리가 참여한 채널의 이름을 표시하고 싶습니다.

이전 섹션에서 사용한 리디렉션은 동적이며, 입력한 channelName에 따라 달라집니다. Astro에서 이를 처리하려면 채널 폴더를 생성하고 해당 폴더 내에 [channelName].astro라는 이름의 파일을 정의해야 합니다. 괄호([])는 URL에 있는 동적 ${channelName}이 이 컴포넌트에 매개변수로 전달됨을 의미합니다. 우리는 단순히 채널 이름을 가져와 UI에 표시하면 됩니다.

client:only 지시문

Call 구성 요소에는 channelName과 appId를 전달합니다. 하지만 client:only=“react” 지시문을 추가해야 합니다. 이 지시문은 Astro 아일랜드를 생성하기 위해 필요합니다. 앞서 언급했듯이 Astro는 사이트를 위해 정적 HTML 코드를 생성하며, 우리가 생성하는 비디오 콜은 상호작용이 가능해야 합니다.

이 지시문이 없으면 Astro는 이 React 컴포넌트에서 정적 HTML을 렌더링하려고 시도합니다. 그러나 client:only를 사용하면 서버 측 렌더링을 건너뛰고 React가 원하는 대로 작동하도록 합니다: 클라이언트에서만 렌더링합니다.

Astro가 여러 프레임워크를 지원하기 때문에, 어떤 프레임워크를 사용해야 하는지 명시해야 합니다:

콜 컴포넌트를 추가합니다.

이 마지막 구성 요소는 순수한 React 구성 요소입니다. Call 구성 요소는 세 가지 주요 구성 요소를 포함합니다:

  • 든 참가자의 동영상
  • 채널 이름
  • 통화 종료 버튼

채널 이름은 화면 왼쪽 상단에 표시되는 단순한 텍스트입니다. 통화 버튼은 화면 하단 중앙에 위치해 있습니다. 이 버튼을 클릭하면 이전 화면으로 돌아가며, 다른 비디오 통화에 참여할 수 있습니다.

흥미로운 부분은 모든 참가자의 동영상을 표시하는 것입니다. 이를 위해 AgoraRTCProvider를 생성해야 하며, 이 클래스는 Agora RTC 서비스를 초기화하고 액세스 권한을 제공합니다. 이 클래스 내에서 이제 동영상을 표시할 수 있습니다:

비디오

비디오 구성 요소는 사이트에서 모든 참가자의 동영상을 표시하는 부분입니다. 호출을 설정하기 위해 많은 훅이 사용됩니다:

  • useLocalMicrophoneTrack()은 현재 사용자의 마이크를 가져옵니다.
  • useLocalCameraTrack()은 현재 사용자의 비디오 입력을 가져옵니다.
  • useRemoteUsers()는 원격 사용자의 모든 사용자 정보를 가져옵니다.
  • useRemoteAudioTracks()는 해당 사용자의 오디오를 가져옵니다.
  • usePublish()는 현재 사용자의 동영상과 오디오를 게시합니다.
  • useJoin()는 비디오 통화용 채널에 참여합니다.

그 다음 원격 사용자의 모든 오디오가 재생되도록 확인해야 합니다: audioTracks.map((track) => track.play());

마지막으로 UI를 정의해야 합니다: 먼저 로딩 상태를 설정하여 현지 사용자의 마이크와 비디오가 시작될 때까지 기다리고, 그 다음 통화 중인 모든 사용자의 그리드를 표시합니다:

우리의 최종 영상 통화는 다음과 같이 진행되어야 합니다:

Screenshot of successful video call app showing speaker giving thumbs up

요약

이로써 우리는 완벽한 영상 통화 경험을 완성했습니다. 다음은 이를 어떻게 구축했는지 설명합니다:

  1. 우리의 Astro 프로젝트를 생성합니다.
  2. Tailwind CSS, React 및 Agora SDK를 설치하세요.
  3. 채널 이름을 입력할 수 있는 양식을 생성합니다.
  4. 사이트를 채널 이름이 포함된 URL로 리디렉션합니다.
  5. 비디오 통화를 통해 채널 이름을 표시합니다.

이 프로젝트의 소스 코드는 여기에서 확인할 수 있습니다. 아고 비디오 통화 기능에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

읽어주셔서 감사합니다!

RTE Telehealth 2023
Join us for RTE Telehealth - a virtual webinar where we’ll explore how AI and AR/VR technologies are shaping the future of healthcare delivery.

Learn more about Agora's video and voice solutions

Ready to chat through your real-time video and voice needs? We're here to help! Current Twilio customers get up to 2 months FREE.

Complete the form, and one of our experts will be in touch.

Try Agora for Free

Sign up and start building! You don’t pay until you scale.
Try for Free