Bluetooth HID와 한글 입력

폰 키보드에 전송 상태 기계와 상대 기기 동작에 대한 명시적 모델이 모두 필요한 이유를 정리합니다.

소스 기준: 앱 1.0.0 (1) · 2026년 8월 14일

시스템 경계

폰은 Bluetooth HID 기기이고 PC·TV·태블릿은 호스트입니다. 앱은 키보드와 마우스 리포트를 보내지만 호스트에서 초점을 가진 입력 칸을 보거나 IME 모드를 항상 읽을 수는 없습니다. 그래서 보정과 호스트 프로필은 단순 설정값이 아니라 핵심 상태입니다.

UI와 수명 주기Kotlin, Jetpack Compose, Android 포그라운드 서비스
HID 자료키보드와 마우스 리포트 ID를 나눈 공용 디스크립터
영속 상태확인된 호스트, 선택 프로필, 보정과 앱 설정
네트워크 의존성HID 입력에는 없음; 광고 실행 경로는 별도

전송 방식 선택

공용 HID 계층은 먼저 Android의 Classic Bluetooth HID Device 프로필을 요청합니다. 제한된 유예 시간 안에 프로필을 얻지 못하면 BLE HOGP를 선택할 수 있습니다. 선택한 전송 방식을 상태로 공개하므로 페어링·재연결·검색 가능 정책이 활성 경로를 추측하지 않습니다.

글자 인코딩과 호스트 프로필

글자를 정규화하고 영문·한글 구간으로 나눈 뒤 전송 전에 인코딩 계획을 만듭니다. 현대 완성형 한글 음절은 두벌식 자모 키 입력으로 분해하고 영문 문자는 US 키 맵을 사용합니다. 계획에는 필요한 IME 전환과 최종 추정 IME 상태도 들어갑니다.

앱은 호스트 IME를 관찰하기보다 모델로 다룹니다. 일부 호스트의 키보드 LED 출력으로 추정을 보정할 수 있지만 플랫폼마다 언어 전환 키가 달라 보정 절차는 여전히 필요합니다. 화면 키보드의 키캡 각인도 같은 추정에서 그리므로 호스트와 어긋날 수 있습니다.

Windows 한글, Windows US, iOS US, Android TV US 프로필이 키 맵과 모드 전환 후보를 명시합니다. 지원하지 않는 코드 포인트가 있으면 일부 글자를 먼저 보내지 않고 전체 계획을 거절합니다.

세션 소유권과 안전한 해제

포그라운드 서비스가 등록·호스트 연결·리포트 전송을 소유합니다. Keyboard·PPT·Mouse는 별도 앱이지만 Android의 HID 역할은 제한돼 있으므로 같은 서명의 형제 앱끼리 소유권 넘김 규약을 사용합니다. 새 소유자가 해제를 요청하면 이전 소유자는 정상 종료 경로를 따릅니다.

검증과 확인된 제약

한글 분해, 키 맵, 인코딩 계획, 디스크립터 리포트, 대기열 순서, 재연결 정책, 형제 앱 소유권 넘김, 프로세스 재생성, 보정 결정을 단위·통합 시험으로 확인합니다. 실제 동작은 폰이 HID 전송 방식을 제공하고 호스트가 디스크립터를 수용해야 성립합니다.