1P by GN⁺ 3시간전 | ★ favorite | 댓글 1개
  • Firefox 151 데스크톱부터 Web Serial API를 지원해 웹 앱이 네이티브 소프트웨어 없이 호환 직렬 장치와 통신할 수 있음
  • Web Serial은 JavaScript로 직렬 장치를 읽고 쓰는 API로, 마이크로컨트롤러·3D 프린터·전력계 등에 직접 연결 가능함
  • Adafruit 워크플로에서는 Web Serial로 펌웨어를 전달해 CircuitPython을 설치하고, code.py 파일로 장치 코드를 쉽게 배포함
  • Firefox는 명시적 사용자 허용, 사이트별·포트별 권한, 애드온 게이팅으로 장치 접근의 보안·개인정보 보호 위험을 줄임
  • Mozilla는 WICG 단계의 Web Serial을 WHATWG 표준화로 추진하며, 실제 하드웨어 워크플로 테스트와 피드백을 요청함

Web Serial API와 지원 범위

  • Firefox 151 for Desktop부터 Web Serial API를 지원해 웹 애플리케이션이 네이티브 소프트웨어 없이 호환 장치와 통신할 수 있음
  • Web Serial API는 웹사이트가 JavaScript로 직렬 장치를 읽고 쓸 수 있게 하는 웹 API임
  • 대상 장치는 마이크로컨트롤러, 개발 보드, 3D 프린터, 전력계, 기타 직렬 연결 하드웨어를 포함함
  • 직렬 호환 장치에는 Espressif ESP 기반 보드, Raspberry Pi Picos, 3D 프린터, LEGO 장치 등이 들어감
  • 최신 컴퓨터에는 보통 직렬 포트가 없지만, USB 포트에 연결되거나 Bluetooth로 페어링된 장치는 운영체제에서 직렬 포트처럼 보이도록 자신을 직렬 가능 장치로 알릴 수 있음
  • Web Serial 호환 장치는 취미 개발자, 하드웨어 해커, 교육자, 메이커, 개발자가 홈 자동화, 하드웨어 프로토타이핑, 3D 프린팅 등에 활용함

Adafruit와 CircuitPython 워크플로

  • Adafruit는 오픈소스 하드웨어와 STEM 교육 분야에서 Web Serial 활용을 보여주는 대표 조직 중 하나임
  • Adafruit는 Web Serial로 펌웨어를 전달해 자사 장치에 CircuitPython을 빠르게 설치할 수 있게 함
  • 설치 후 파일 이름을 code.py로 지정하면 대부분의 장치에서 USB 장치로 파일을 끌어다 놓는 방식으로 코드를 배포할 수 있음
  • Python 프로그램은 단순한 텍스트 기반 입출력으로 Web Serial을 통해 웹 페이지와 상호운용 가능함
  • Adafruit Web Serial Tool을 사용할 수 있으며, CircuitPython 사이트의 OPEN INSTALLER 방식과는 구분됨
  • example CircuitPython Web Serial project는 로컬 web page에서 Web Serial을 사용해 CircuitPython file을 실행 중인 장치로 메시지를 보내는 구조임
  • Mozilla는 Adafruit와 협력해 Firefox 구현을 이 커뮤니티에서 흔히 쓰는 실제 하드웨어 워크플로에 맞춰 테스트함
  • Mozilla 엔지니어 Alex Franchuk은 Web Serial과 전자 장치를 결합한 Page Playground를 만들었음

전력 측정과 홈 자동화

  • Mozilla의 Florian Quèze는 전력 소비 측정을 위한 여러 프로젝트를 실험했고, Web Serial로 시판 USB 전력계의 전력 데이터를 읽어 Firefox에 표시하는 데모를 만들었음
  • 해당 코드는 데이터를 Firefox Profiler로 내보낼 수 있어 전력 데이터를 시각화하고 공유하기 쉬움
  • 관련 리소스는 page, GitHub repo, 세 밝기 모드가 있는 조명의 전력 사용량을 기록한 Firefox Profiler 데이터
  • 테스트된 USB 전력계에는 AVHzY C3 USB, Joy-IT TC66C, YZXStudio USB ZY1280이 포함됨
  • Home Assistant는 홈 자동화를 위한 인기 오픈소스 프로젝트이며, ESPHome은 저렴한 ESP32와 유사 장치에 Home Assistant 호환 펌웨어를 제공함
  • ESPHome 펌웨어는 Web Serial을 통해 몇 번의 클릭만으로 설치하고 설정 가능함

보안과 개인정보 보호

  • 웹 플랫폼이 하드웨어 장치를 읽고 쓸 수 있게 되면 보안과 개인정보 보호 우려가 커짐
  • Web Serial에서 웹사이트는 사용자가 명시적으로 허용하기 전까지 직렬 포트를 보거나 접근할 수 없음
  • 포트 허용은 사이트별·포트별로 이뤄짐
  • Web Serial API는 웹사이트가 navigator.serial.requestPort()를 호출하도록 요구하며, 사용자는 접근을 허용할 포트를 선택하거나 모든 접근을 거부할 수 있음
  • 웹사이트는 연결된 장치 목록을 받지 않으며, 사용자가 선택한 포트 외에는 유용한 지문추적 정보가 제공되지 않음
  • Firefox는 사이트가 직렬 포트 접근을 요청하는 시점과 이유를 사용자가 이해하도록 Web MIDI API 구현에서 도입한 애드온 게이팅(add-on gating) 을 사용함
  • 애드온 게이팅은 다른 웹 권한 프롬프트보다 사용자가 무엇을 허용하는지 더 자세히 알려줌
  • 애드온 게이팅 프롬프트는 사이트가 처음 포트 접근을 요청할 때 포트 선택 프롬프트보다 먼저 표시됨
  • Firefox Enterprise Policies를 사용하는 조직에서는 Web Serial이 기본적으로 비활성화됨
  • 관리자는 DefaultSerialGuardSetting 정책 설정으로 조직 전체의 Web Serial 기능을 명시적으로 허용하거나 차단할 수 있음

표준화와 피드백

  • Web Serial은 아직 Web Incubator Community Group(WICG) 단계에 있지만, Mozilla는 범위와 오랜 인큐베이션을 고려할 때 표준화 경로가 있다고 봄
  • Mozilla는 새 Workstream proposal을 통해 WHATWG에서 Web Serial API 표준화를 추진 중임
  • Mozilla는 주변장치에 대한 웹 접근 방식을 형성하기 위해 생태계 파트너와 표준화 기구와 협력할 계획임
  • 장치 기반 Web Serial 워크플로가 있다면 Firefox에서 테스트할 수 있음
  • Mozilla Connect에서 프로젝트를 공유하고 질문하거나 피드백을 남길 수 있음
  • 기술 문제는 support.mozilla.org를 확인하거나 Bugzilla에 버그를 제출하면 됨

댓글과 토론

Lobste.rs 의견들
  • WebUSB도 구현해 주면 좋겠음

    • 이게 ESP 같은 마이크로컨트롤러 플래싱을 가능하게 해준다면, 내 WebUSB 사용 사례의 95~100%는 해결됨
    • 누군가 Firefox 확장으로 구현해 둔 게 있음: https://github.com/ArcaneNibble/awawausb
  • 잘 속는 사람들, 특히 직렬 포트가 뭔지 모르는 사람들을 어떻게 보호할 생각인지 궁금함. Mozilla의 표준 입장에도 이런 내용이 있음

    직렬 인터페이스를 제공하는 장치는 인증이 거의 없거나 전혀 없는 상태로 강력한 저수준 기능을 노출하는 경우가 많다. 충분한 보호 장치 없이 그런 기능을 웹에 노출하면 해당 장치에 중대한 위협이 된다

    • 초보 사용자가 가질 만한 직렬 지원 장치는 마우스 정도밖에 떠오르지 않음. 펌웨어 업데이트가 서명되지 않은 경우 악성코드가 올라갈 수는 있겠지만, 공격자에게 유용한 표적으로는 잘 안 보임
      매크로 기능이 있는 키보드는 조금 더 걱정되긴 함. 그래도 Chrome에는 이 기능이 몇 년째 있었고 큰 문제가 없었으니, 심각한 우려는 아니라고 봄. 특히 주변기기들이 설정 용도로 점점 더 많이 쓰기 시작하는 지금은 유용성이 위험보다 훨씬 큼
  • 이건 말이 안 됨. 웹페이지 뷰어에 직렬 포트 접근을 추가하는 게 얼마나 정신 나간 일인지 표현하기 어렵다

    • 공감이 안 됨. 너무 유용한 기능이고, 이제 이걸 쓰려고 Chrome으로 바꾸지 않아도 돼서 반가움
    • 웹은 이미 약 20년 전에 애플리케이션 플랫폼으로 진화했음
  • 아, 맞다. 웹사이트에 딱 필요한 게 이거지. WebRawSockets를 기다리는 중임. 반쯤 농담이지만, 예전에 내가 참여했을 때 SVG 작업 그룹이 실제로 SVG에 원시 소켓을 추가하려고 했음

    • SVG 작업 그룹이 SVG에 원시 소켓을 넣으려 했다니, 대체 무슨 일이었나 싶음. 그 이유가 뭐였는지 기억남?