웹에서 하드웨어 기기에 액세스

원하는 하드웨어 기기와 통신할 적절한 API를 선택합니다.

François Beaufort
François Beaufort

이 가이드의 목표는 웹에서 하드웨어 기기 (예: 웹캠, 마이크 등)와 통신하는 데 가장 적합한 API를 선택하는 데 도움을 주는 것입니다. '최고'는 최소한의 작업으로 필요한 모든 것을 제공한다는 의미입니다. 즉, 해결하려는 일반적인 사용 사례 (예: 동영상 액세스)는 알고 있지만 어떤 API를 사용해야 할지 모르거나 이를 달성하는 다른 방법이 있는지 궁금합니다.

웹 개발자가 자주 범하는 실수는 구현하기 쉽고 더 나은 UX를 제공하는 상위 수준 API에 관해 배우지 않고 하위 수준 API로 바로 뛰어드는 것입니다. 따라서 이 가이드에서는 먼저 상위 수준 API를 추천하지만 상위 수준 API가 요구사항을 충족하지 않는다고 판단되는 경우 하위 수준 API도 언급합니다.

🕹 이 기기에서 입력 이벤트 수신

키보드포인터 이벤트를 수신 대기해 보세요. 이 기기가 게임 컨트롤러인 경우 Gamepad API를 사용하여 어떤 버튼이 눌려 있고 어떤 축이 움직였는지 확인합니다.

이러한 옵션이 모두 작동하지 않는 경우 하위 수준 API가 해결책일 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

📸 이 기기의 오디오 및 동영상에 액세스

MediaDevices.getUserMedia()를 사용하여 이 기기에서 실시간 오디오 및 동영상 스트림을 가져오고 오디오 및 동영상 캡처에 대해 알아봅니다. 카메라의 화면 이동, 기울기, 확대/축소를 제어하고 밝기 및 대비와 같은 기타 카메라 설정을 조정할 수 있으며 정지 이미지를 촬영할 수도 있습니다. Web Audio는 오디오에 효과를 추가하거나, 오디오 시각화를 만들거나, 공간 효과 (예: 팬)를 적용하는 데 사용할 수 있습니다. Chrome에서도 웹 오디오 앱의 성능을 프로파일링하는 방법을 확인하세요.

이러한 옵션이 모두 작동하지 않는 경우 하위 수준 API가 해결책일 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

🖨 이 기기에 인쇄

window.print()를 사용하여 사용자가 이 기기를 현재 문서를 인쇄할 대상으로 선택할 수 있는 브라우저 대화상자를 엽니다.

그래도 문제가 해결되지 않으면 하위 수준 API가 해결책일 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

🔐 이 기기로 인증

WebAuthn을 사용하여 이 하드웨어 보안 기기로 강력하고 증명된 출처 범위 공개 키 사용자 인증 정보를 만들어 사용자를 인증합니다. 블루투스, NFC, USB 로밍 U2F 또는 FIDO2 인증자(보안 키라고도 함)뿐 아니라 사용자가 지문 또는 화면 잠금을 사용하여 인증할 수 있는 플랫폼 인증자 사용을 지원합니다. 첫 번째 WebAuthn 앱 빌드하기를 확인하세요.

이 기기가 다른 유형의 하드웨어 보안 기기 (예: 암호화폐 지갑)인 경우 하위 수준 API가 해결책이 될 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

🗄 이 기기의 파일에 액세스

File System Access API를 사용하여 사용자 기기의 파일 및 폴더를 읽고 변경사항을 직접 저장합니다. 사용할 수 없는 경우 File API를 사용하여 사용자에게 브라우저 대화상자에서 로컬 파일을 선택하도록 요청한 다음 해당 파일의 콘텐츠를 읽습니다.

이러한 옵션이 모두 작동하지 않는 경우 하위 수준 API가 해결책일 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

🧲 이 기기의 센서에 액세스

Generic Sensor API를 사용하여 모션 센서 (예: 가속도계 또는 자이로스코프) 및 환경 센서 (예: 주변광, 자기계)에서 원시 센서 값을 읽습니다. 사용할 수 없는 경우 DeviceMotion 및 DeviceOrientation 이벤트를 사용하여 휴대기기의 내장 가속도계, 자이로스코프, 나침반에 액세스합니다.

그래도 문제가 해결되지 않으면 하위 수준 API가 해결책일 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

🛰 이 기기의 GPS 좌표에 액세스

Geolocation API를 사용하여 이 기기에서 사용자의 현재 위치의 위도와 경도를 가져옵니다.

그래도 문제가 해결되지 않으면 하위 수준 API가 해결책일 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

🔋 이 기기의 배터리 확인하기

Battery API를 사용하여 배터리 충전 수준에 관한 호스트 정보를 가져오고 배터리 수준 또는 충전 상태가 변경되면 알림을 받습니다.

그래도 문제가 해결되지 않으면 하위 수준 API가 해결책일 수 있습니다. 기기와 통신하는 방법 알아보기를 확인하여 여정을 시작하세요.

📞 네트워크를 통해 이 기기와 통신

로컬 네트워크에서 Remote Playback API를 사용하여 원격 재생 기기 (예: 스마트 TV 또는 무선 스피커)에서 오디오 또는 동영상을 브로드캐스트하거나 Presentation API를 사용하여 보조 화면 (예: HDMI 케이블로 연결된 보조 디스플레이 또는 무선으로 연결된 스마트 TV)에서 웹페이지를 렌더링합니다.

이 기기가 웹 서버를 노출하는 경우 Fetch API 또는 WebSockets를 사용하여 적절한 엔드포인트를 호출하여 이 기기에서 일부 데이터를 가져옵니다. 웹에서는 TCP 및 UDP 소켓을 사용할 수 없지만 WebTransport를 확인하여 양방향, 다중화된 네트워크 연결을 처리하세요. WebRTC는 P2P 프로토콜을 사용하여 다른 브라우저와 실시간으로 데이터를 통신하는 데도 사용할 수 있습니다.

🧱 기기와 통신하는 방법 알아보기

어떤 하위 수준 API를 사용해야 하는지는 기기와의 물리적 연결의 특성에 따라 결정됩니다. 무선인 경우 매우 근거리 무선 연결을 위한 웹 NFC와 근처 무선 기기를 위한 웹 블루투스 또는 웹 직렬을 확인하세요.

  • 웹 NFC를 사용하면 이 기기가 사용자의 기기와 가까운 위치(일반적으로 5~10cm(2~4인치))에 있을 때 기기를 읽고 쓸 수 있습니다. NXP의 NFC TagInfo와 같은 도구를 사용하면 리버스 엔지니어링 목적으로 이 기기의 콘텐츠를 탐색할 수 있습니다.

  • 웹 블루투스를 사용하여 저전력 블루투스 연결을 통해 이 기기에 연결합니다. 표준화된 블루투스 GATT 서비스 (예: 배터리 서비스)를 사용하는 경우 동작이 잘 문서화되어 있으므로 통신하기가 매우 쉽습니다. 그렇지 않은 경우 이 시점에서 이 기기의 하드웨어 문서를 찾거나 역엔지니어링해야 합니다. 이를 위해 모바일용 nRF Connect와 같은 외부 도구와 Chromium 기반 브라우저의 내부 페이지 about://bluetooth-internals와 같은 내장 브라우저 도구를 사용할 수 있습니다. Uri Shaked의 블루투스 전구 역엔지니어링을 확인하세요. 블루투스 기기는 HID 또는 직렬 프로토콜을 지원할 수도 있습니다.

  • 블루투스를 통한 직렬을 사용하여 표준화된 직렬 포트 프로필 (SPP)과 같이 페어링된 블루투스 Classic 기기의 RFCOMM 서비스와 통신합니다. 맞춤 RFCOMM 기반 서비스의 경우 requestPort()에 전달할 서비스 UUID에 관한 기기의 공급업체 문서를 참고해야 합니다.

유선인 경우 다음 API를 다음 순서대로 확인하세요.

  1. WebHID를 사용하면 컬렉션을 통해 HID 보고서 및 보고서 설명자를 이해하는 것이 이 기기를 이해하는 데 중요합니다. 이 기기의 공급업체 문서가 없으면 쉽지 않을 수 있습니다. Wireshark와 같은 도구를 사용하면 리버스 엔지니어링할 수 있습니다. HID Explorer 웹 앱을 사용하여 HID 기기 정보를 사람이 읽을 수 있는 형식으로 덤프할 수도 있습니다.

  2. Web Serial을 사용하면 이 기기 및 이 기기에서 지원하는 명령어에 관한 공급업체 문서가 없더라도 운이 좋으면 추측으로 알아낼 수 있습니다. 이 기기를 역엔지니어링하려면 Wireshark와 같은 도구로 원시 USB 트래픽을 캡처하면 됩니다. 사람이 읽을 수 있는 프로토콜을 사용하는 경우 Serial Terminal 웹 앱을 사용하여 이 기기를 실험할 수도 있습니다.

  3. WebUSB를 사용하면 이 기기와 이 기기가 지원하는 USB 명령어에 관한 명확한 문서가 없으면 어렵지만 운이 좋으면 추측으로 가능합니다. Suz Hinton의 WebUSB 및 흥미로운 잠재력 살펴보기를 시청하세요. 원시 USB 트래픽을 캡처하고 Wireshark와 같은 외부 도구 및 Chromium 기반 브라우저의 내부 페이지 about://usb-internals와 같은 내장 브라우저 도구로 USB 설명자를 검사하여 이 기기를 역설계할 수도 있습니다.

감사의 말씀

이 도움말을 검토해 주신 레이리 그랜트, 토마스 슈타이너, 케이스 바스케스님께 감사드립니다.

사진: Unsplash다리아 트리파나바