Web Bluetooth API의 BLE GATT 접근과 브라우저 보안 경계
Web Bluetooth가 브라우저에서 BLE 주변기기의 GATT 서비스를 다루는 흐름과 사용자 선택, 권한 정책, 구현 한계를 설명합니다.
발행·오류 제보: infostoa · 편집 기준
이 글의 개별 작성자와 전문 검토자 정보는 제공되지 않습니다.
Web Bluetooth는 웹페이지가 주변의 모든 블루투스 기기를 자유롭게 검색하는 기능이 아닙니다. 보안 컨텍스트에서 사용자가 직접 요청을 시작하고, 브라우저가 제시한 장치를 사용자가 고른 뒤, 허용된 BLE GATT 데이터에 접근하는 제한된 흐름입니다. 이 경계를 이해하면 브라우저 API가 제공하는 편의와 하드웨어·브라우저별 제약을 함께 설계할 수 있습니다.
Web Bluetooth가 연결하는 범위
Web Bluetooth 초안은 웹페이지가 중앙 역할(central)에서 BLE 주변 장치의 GATT 서버에 연결하는 API를 정의합니다. 장치는 서비스를 제공하고, 서비스는 특성(characteristic)을 포함합니다. 특성은 읽기, 쓰기, 알림 구독처럼 장치가 노출한 데이터 동작의 단위입니다. 예를 들어 배터리 서비스의 배터리 잔량 특성을 읽거나, 심박수 측정 특성의 알림을 구독할 수 있습니다. 가능한 동작은 실제 장치의 GATT 구현과 해당 특성의 권한에 달려 있습니다.
브라우저 흐름은 requestDevice()로 장치 선택을 요청하고, 선택된 BluetoothDevice의 GATT 서버에 연결한 뒤 서비스와 특성을 찾는 순서입니다. 이름 또는 서비스 필터는 선택 창에 나타날 장치를 좁히는 조건이지, 장치 신원이나 데이터의 진위를 증명하지 않습니다. Bluetooth는 근거리 무선 링크이며, 이 API 자체가 인터넷 서버와의 통신이나 임의의 클래식 Bluetooth 프로파일을 제공하지도 않습니다.
선택 창과 권한은 사용자 동작에서 시작한다
2026년 6월 3일자 Web Bluetooth 문서는 W3C Bluetooth Community Group의 초안 보고서이며, W3C 표준이나 표준화 트랙 문서는 아닙니다. 초안은 requestDevice() 요청에 일시적 사용자 활성화가 있어야 한다고 규정합니다. Chrome 개발자 문서도 버튼 클릭 같은 사용자 동작에서 장치 검색을 시작하고, 브라우저 선택 창에서 사용자가 장치를 고르는 흐름을 안내합니다. 이 과정은 페이지가 뒤에서 조용히 주변 장치를 계속 검색하는 것을 제한합니다. 권한을 이미 부여받은 장치 조회 기능과 새 장치 선택 요청도 구분해야 합니다.
서비스 필터에 포함되지 않은 서비스를 나중에 사용하려면 요청에 optionalServices를 지정해야 할 수 있습니다. 장치 이름만 필터로 사용하면서 필요한 서비스를 선언하지 않으면 선택 후 서비스 접근이 실패할 수 있습니다. 따라서 필터는 사용자 경험과 필요한 데이터 범위를 함께 표현하도록 구성하고, 장치 연결이나 읽기·쓰기 실패를 정상적인 오류 경로로 처리해야 합니다.
보안 컨텍스트, Permissions Policy, GATT 차단 목록
Web Bluetooth는 보안 컨텍스트에서만 쓸 수 있으며, bluetooth Permissions Policy의 영향을 받습니다. 문서의 기본 허용 범위는 self이고, 교차 출처 iframe에서 접근을 허용하려면 응답 헤더와 iframe 정책 설정을 맞춰야 합니다. 정책에 의해 막힌 경우에는 사용자 권한 대화상자가 나타나지 않을 수도 있으므로, 클릭 동작만으로 권한 문제를 해결할 수 있다고 가정해서는 안 됩니다.
초안은 접근 가능한 GATT 속성과 제조사 데이터를 제한하기 위해 별도의 레지스트리 차단 목록을 참조합니다. 이는 규격 초안과 브라우저 구현의 보안 경계이지, 사이트가 선택된 장치를 신뢰해도 된다는 보증은 아닙니다. 사용자 선택만으로 장치 펌웨어의 안전성, 데이터 정확성, 암호학적 신원 확인이 성립하지 않습니다. 민감한 제어 동작은 장치 측 인증·프로토콜을 별도로 검토하고, 웹 앱은 입력값 검증과 최소 권한 요청을 적용해야 합니다.
실무자 관점: 구현 전 확인할 것과 남는 한계
Chrome 문서는 장치 선택, GATT 연결, 서비스·특성 조회, 알림 구독과 연결 해제 이벤트 처리를 예제로 설명합니다. 연결은 무선 환경이나 장치 상태에 따라 끊길 수 있으므로 gattserverdisconnected를 감지하고 사용자가 다시 연결할 수 있는 경로를 제공하는 편이 안전합니다. 자동 재연결이 항상 성공하거나 모든 장치에서 같은 순서로 동작한다고 약속해서는 안 됩니다.
실제 지원 여부는 브라우저와 운영체제, 장치의 BLE/GATT 구현, 보안 정책에 따라 달라집니다. W3C 자료는 Community Group 초안이며 최종 확정 규격과 모든 사용자 에이전트의 동작을 뜻하지 않습니다. 배포 대상에서 권한 흐름, 필요한 서비스 선언, 거부·취소·연결 끊김을 직접 시험하고, 선택 창이 장치의 신뢰성 인증을 대신하지 않는다는 점을 사용자에게 분명히 해야 합니다.