USB HID 구조 이해하기
키보드와 마우스는 어떤 과정을 거쳐 PC가 입력을 이해할까?
- USB HID(Human Interface Device)는 키보드·마우스 같은 입력장치를 위한 표준 규격입니다.
- 운영체제는 HID 규격만 이해하면 제조사가 달라도 기본 입력을 바로 사용할 수 있습니다.
- HID Report Descriptor는 장치가 어떤 데이터를 보내는지 설명하는 설계도 역할을 합니다.
- 키 입력은 Interrupt Transfer를 통해 매우 짧은 주기로 PC에 전달됩니다.
- 게임패드, 터치패드, 펜 태블릿도 대부분 HID 구조를 기반으로 동작합니다.
USB 키보드를 컴퓨터에 연결하면 별도의 드라이버를 설치하지 않아도 대부분 즉시 사용할 수 있습니다. 제조사가 다르고 내부 MCU가 달라도 기본적인 키 입력은 거의 동일하게 동작하는 이유는 USB HID(Human Interface Device)라는 국제 표준을 사용하기 때문입니다.
많은 사람들은 USB가 단순히 케이블 규격이라고 생각하지만, 실제 USB는 전송 방식과 장치 종류까지 정의하는 거대한 표준입니다. HID 역시 그 안에 포함된 장치 클래스(Class) 중 하나이며, 운영체제가 키보드와 마우스를 이해하는 공통 언어라고 볼 수 있습니다.
이번 글에서는 USB HID가 무엇인지부터 시작해 Enumeration 과정, HID Descriptor, Report Descriptor, 실제 키 입력 데이터 구조, 그리고 운영체제가 입력을 처리하는 과정까지 단계별로 살펴보겠습니다.
1. USB HID란 무엇일까?
HID는 Human Interface Device의 약자로, 사람이 컴퓨터와 상호작용하기 위해 사용하는 입력 장치를 의미합니다. 대표적으로 키보드, 마우스, 터치패드, 트랙볼, 게임패드, 디지털 펜 등이 HID 장치에 포함됩니다.
USB 표준에서는 이러한 장치들이 서로 다른 제조사에서 만들어졌더라도 동일한 방식으로 데이터를 전송하도록 규격을 정의합니다. 덕분에 운영체제는 장치 제조사를 미리 알지 못해도 기본 입력을 바로 사용할 수 있습니다.
예를 들어 Logitech 키보드와 Keychron 키보드는 내부 MCU도 다르고 펌웨어도 다르지만, 둘 다 HID Report 형식으로 데이터를 보내기 때문에 Windows나 macOS는 동일한 방식으로 입력을 처리합니다.
USB HID는 “키보드 제조사”를 구분해서 동작하는 것이 아니라 “HID 규격을 따르는 입력 장치”인지 먼저 확인한 뒤 데이터를 해석합니다.
2. 왜 별도 드라이버 없이 동작할까?
USB 장치를 연결하면 운영체제는 먼저 Enumeration이라는 과정을 수행합니다. 이 과정에서 장치의 종류와 지원 기능을 확인하고 적절한 드라이버를 연결합니다.
키보드처럼 HID 규격을 사용하는 장치는 이미 Windows, macOS, Linux에 HID 드라이버가 기본 포함되어 있기 때문에 제조사가 별도의 드라이버를 제공하지 않아도 즉시 사용할 수 있습니다.
Microsoft와 Linux Kernel은 HID를 운영체제 기본 기능으로 제공합니다. 제조사 프로그램은 RGB 제어나 매크로 설정 같은 추가 기능을 제공할 뿐, 기본 키 입력 자체는 HID 드라이버가 담당합니다.
3. HID Descriptor는 무엇일까?
USB 장치는 자신이 어떤 기능을 갖고 있는지를 Descriptor라는 데이터 구조로 설명합니다. HID 장치 역시 여러 종류의 Descriptor를 통해 운영체제에 자신의 정보를 전달합니다.
가장 중요한 것은 HID Descriptor와 Report Descriptor입니다. HID Descriptor는 장치가 HID임을 알려주고, Report Descriptor는 실제 데이터 구조를 정의합니다.
운영체제는 Report Descriptor를 읽은 뒤 “이 장치는 키 하나를 몇 비트로 표현하는지”, “Modifier 키는 어디에 있는지”, “LED 제어는 가능한지” 등을 모두 이해하게 됩니다.
- Device Descriptor
- Configuration Descriptor
- Interface Descriptor
- HID Descriptor
- Report Descriptor
4. Report Descriptor의 역할
Report Descriptor는 HID 장치에서 가장 중요한 정보입니다. 운영체제는 이 데이터를 읽어 실제 입력 데이터를 해석합니다.
예를 들어 키보드는 보통 다음과 같은 구조를 사용합니다.
- Modifier Key (Ctrl, Shift 등)
- Reserved Byte
- 동시에 누른 최대 6개의 키 코드
즉 운영체제는 키코드만 받는 것이 아니라 “이 데이터의 첫 번째 바이트는 Ctrl 정보이고 두 번째는 예약 영역이며 이후에는 키 코드가 들어온다.”라는 구조를 먼저 이해한 뒤 입력을 해석합니다.
Report Descriptor는 일종의 데이터 설계도입니다. 운영체제가 이 설계도를 먼저 읽기 때문에 제조사마다 내부 구현이 달라도 동일한 방식으로 입력을 처리할 수 있습니다.
USB HID는 운영체제가 입력 장치를 이해하기 위한 표준 규격입니다. HID Descriptor와 Report Descriptor를 통해 장치 구조를 먼저 파악한 뒤 키 입력 데이터를 해석합니다. 다음에서는 실제 키 입력 Report 구조, Interrupt Transfer 방식, Polling 과정, NKRO와 Boot Protocol의 차이, Bluetooth HID와의 관계까지 이어서 살펴보겠습니다.
5. 실제 키 입력 데이터는 어떻게 전달될까?
키보드에서 키를 누르면 MCU는 스위치 상태를 스캔한 뒤 어떤 키가 눌렸는지를 HID Report 형식으로 만듭니다. 이 Report는 USB를 통해 컴퓨터로 전달되며 운영체제는 앞에서 읽은 Report Descriptor를 기준으로 데이터를 해석합니다.
예를 들어 사용자가 A 키를 누르면 MCU는 해당 키의 HID Usage ID를 Report 안에 기록합니다. 만약 Shift를 함께 누르고 있다면 Modifier 비트도 함께 설정됩니다. 운영체제는 이 정보를 받아 최종적으로 대문자 A인지 소문자 a인지 판단하게 됩니다.
USB 키보드는 문자 자체를 보내는 것이 아니라 키 코드(Key Code)를 전송합니다. 실제 문자는 운영체제가 현재 키보드 레이아웃과 Shift 상태 등을 고려해 결정합니다.
6. Interrupt Transfer는 무엇일까?
이름만 보면 CPU 인터럽트처럼 장치가 컴퓨터를 강제로 깨우는 방식처럼 보일 수 있지만, USB의 Interrupt Transfer는 조금 다릅니다.
USB에서는 Host인 PC가 항상 통신을 시작합니다. 따라서 키보드는 마음대로 데이터를 보내지 못하며, 컴퓨터가 “입력이 있나요?”라고 매우 짧은 주기로 질문하면 그때 Report를 응답합니다.
키보드는 일반적으로 1ms에서 10ms 정도의 Polling Interval을 사용하며, 게임용 키보드는 1000Hz Polling을 지원하는 경우가 많습니다.
Interrupt Transfer는 이름과 달리 “장치가 먼저 보내는 방식”이 아닙니다. USB에서는 항상 Host가 Polling을 수행하며, HID는 입력 지연을 최소화하기 위해 Interrupt Endpoint를 사용하는 것입니다.
7. Polling Rate와 입력 지연의 관계
Polling Rate는 컴퓨터가 초당 몇 번 장치에 데이터를 요청하는지를 의미합니다. 흔히 125Hz, 250Hz, 500Hz, 1000Hz 같은 수치를 볼 수 있습니다.
Polling Rate가 높을수록 입력 지연은 줄어들지만 USB 트래픽과 MCU 처리량은 조금 증가합니다. 일반적인 사무용 환경에서는 큰 차이를 느끼기 어렵지만, FPS 게임에서는 1000Hz를 사용하는 경우가 많습니다.
8. Boot Protocol과 Report Protocol 차이
USB HID에는 Boot Protocol과 Report Protocol이라는 두 가지 동작 방식이 존재합니다.
Boot Protocol은 BIOS나 UEFI에서도 사용할 수 있도록 매우 단순한 구조를 사용합니다. 운영체제가 아직 로드되지 않은 상태에서도 키보드를 사용할 수 있는 이유가 바로 Boot Protocol 덕분입니다.
운영체제가 실행된 이후에는 대부분 Report Protocol로 전환됩니다. Report Protocol은 훨씬 복잡한 Report Descriptor를 사용할 수 있어 다양한 기능과 커스텀 키보드를 지원합니다.
9. NKRO도 HID와 관련이 있을까?
많은 사용자가 NKRO(N-Key Rollover)를 키보드 하드웨어 기술로만 생각하지만 실제로는 HID Report 구조와도 밀접한 관련이 있습니다.
기본 Boot Protocol에서는 동시에 최대 6개의 일반 키만 전송할 수 있는 6KRO 구조를 사용합니다. 반면 NKRO는 더 큰 Report 구조를 사용하거나 비트맵 형태로 키 상태를 표현해 훨씬 많은 키를 동시에 전달합니다.
그래서 게이밍 키보드나 커스텀 키보드는 대부분 Report Protocol을 활용해 NKRO를 구현합니다.
10. Bluetooth HID와 무엇이 다를까?
USB HID와 Bluetooth HID는 전송 매체만 다를 뿐 입력 데이터 구조 자체는 매우 비슷합니다.
Bluetooth 역시 HID Profile(HID over GATT 포함)을 사용해 운영체제에 키 입력을 전달합니다. 따라서 운영체제 입장에서는 USB 키보드와 블루투스 키보드 모두 거의 동일한 입력 이벤트를 생성합니다.
- 입력 구조는 매우 유사
- 전송 방식만 USB와 BLE로 다름
- 운영체제는 둘 다 HID 드라이버 계층에서 처리
- 응용프로그램은 동일한 키 이벤트를 받음
자주 묻는 질문(FAQ)
아닙니다. 마우스, 게임패드, 터치패드, 디지타이저, 펜 장치 등 다양한 입력 장치를 지원합니다.
일반적인 USB 키보드는 거의 모두 HID 규격을 사용합니다. 추가 기능은 별도의 Vendor 인터페이스를 함께 사용하는 경우도 있습니다.
기본 입력은 HID를 사용하지만 RGB 제어나 펌웨어 업데이트는 제조사 전용 프로토콜을 사용하는 경우가 많습니다.
📚 함께 보면 좋은 글
USB HID를 이해했다면 실제 키 입력이 PC까지 전달되는 전체 과정과 키보드 내부 구조까지 함께 살펴보면 입력 장치의 동작 원리를 훨씬 쉽게 이해할 수 있습니다.
🔗 공식 자료
📖 출처
- USB Implementers Forum – HID Device Class Definition
- USB Implementers Forum – USB 2.0 Specification
- Microsoft Learn HID Documentation
- Linux Kernel HID Documentation
- QMK 공식 문서
USB HID는 단순한 키 입력 규격이 아니라 운영체제가 모든 입력 장치를 공통된 방식으로 이해할 수 있도록 만든 국제 표준입니다. HID Descriptor와 Report Descriptor 덕분에 제조사가 달라도 동일한 방식으로 키 입력을 처리할 수 있으며, 이것이 USB 키보드가 별도 드라이버 없이 바로 동작하는 핵심 원리입니다.
