Web Serial API(웹 시리얼)는 브라우저에서 직접 시리얼 포트를 제어할 수 있게 해주지만, 보안·브라우저·플랫폼 측면에서 여러 제약 사항이 있습니다. 핵심만 구조적으로 정리합니다.


1) 브라우저 및 플랫폼 제약

✅ 지원 브라우저

  • Chrome / Edge / Opera (Chromium 기반) → 지원
  • Firefox → ❌ 미지원 (2026 기준)
  • Safari → ❌ 미지원 (macOS/iOS)
  • 모바일 브라우저 → 대부분 ❌ (Android 일부 실험적)

👉 사실상 Chromium 브라우저 전용 기술


✅ OS 제한

  • Windows / macOS / Linux → 지원
  • iOS → ❌ (Safari 미지원)
  • Android → 제한적 (Chrome 일부 버전)

2) 보안 정책 제약 (가장 중요)

✅ HTTPS 필수

  • localhost 제외하고는 반드시 HTTPS
  • HTTP 사이트 → Web Serial API 사용 불가

✅ 사용자 직접 선택 필수 (자동 연결 불가)

브라우저 보안 정책 때문에:

  • JS로 포트 목록 자동 접근 ❌
  • 사용자가 직접 포트 선택해야 함 ✅
const port = await navigator.serial.requestPort();

👉 자동 연결 프로그램 구현 불가능 (보안 설계상 의도)


✅ 사용자 제스처 필요

  • 버튼 클릭, 키 입력 등 사용자 액션이 있어야 포트 요청 가능
  • 페이지 로드 시 자동 실행 ❌

✅ 권한 지속성 제한

  • 브라우저 재시작 시 권한 사라질 수 있음
  • 일부 브라우저는 세션 단위 권한

3) 기능적 제약

✅ 시리얼 포트 접근 범위 제한

  • COM/TTY 포트만 접근 가능
  • HID, USB, Bluetooth 직접 제어 ❌
    (→ WebUSB, WebHID, WebBluetooth 별도)

✅ 포트 독점 문제

  • 다른 프로그램이 포트를 사용 중이면 접근 불가
  • 예: Arduino IDE, 시리얼 모니터

✅ 속도/성능 제한

  • Native 앱 대비 느림
  • 대용량 데이터 스트리밍 비효율적
  • 실시간 제어(산업용) 부적합

✅ 바이너리 처리 제한

  • 기본적으로 Stream API 기반
  • 대량 바이너리 처리 시 복잡

4) 배포/운영 제약

✅ 기업/보안 환경에서 차단 가능

  • 회사 보안 정책
  • 브라우저 정책
  • 그룹 정책(GPO)
  • 보안 솔루션

✅ 백그라운드 실행 불가

  • 탭 닫히면 연결 종료
  • 서비스/데몬 형태 ❌

✅ 서버에서 직접 시리얼 접근 불가

  • Web Serial은 클라이언트 브라우저 전용
  • 서버에서 COM 포트 제어하려면:
    • Node.js + serialport
    • .NET SerialPort
    • 별도 에이전트 프로그램 필요

5) 구조적 한계 (아키텍처 관점)

❌ 산업용/장비 제어에 부적합

  • 안정성 부족
  • 자동화 불가
  • 권한 문제
  • 브라우저 의존

✅ 적합한 용도

  • 테스트 도구
  • 설정 UI
  • IoT 디바이스 초기 설정
  • 교육용
  • 개발자용 툴

6) 실무에서 흔히 쓰는 우회 구조

✅ 추천 아키텍처 (현실적인 방식)

브라우저(Web UI)
   ↓ HTTP/WebSocket
로컬 에이전트(Node/.NET)
   ↓ SerialPort
하드웨어

👉 Web Serial 대신 로컬 프로그램 사용
(산업/업무 시스템에서 가장 많이 쓰는 방식)


7) 원하면 정리해줌

원하면:

  • ✅ Web Serial vs WebUSB vs WebHID 비교
  • ✅ 실무에서 쓰는 아키텍처 설계
  • ✅ ESP32 + Web Serial 예제
  • ✅ ASP.NET / Node.js 연동 구조
  • ✅ “자동 연결” 가능한 현실적인 방법

→ 개발자 관점으로 깊게 설명해 줄게.

728x90

+ Recent posts