[카테고리:] 키보드

  • STM32와 RP2040 차이 완벽 정리: 키보드 MCU 구조와 성능 비교

    STM32와 RP2040 차이 완벽 정리: 키보드 MCU 구조와 성능 비교

    LINK&TEM GUIDE

    STM32와 RP2040 차이

    키보드 MCU의 성능·구조·펌웨어 환경은 무엇이 다를까?

    📌 핵심 요약
    • STM32는 하나의 칩이 아니라 성능과 기능이 다른 여러 MCU 제품군을 통칭하는 이름입니다.
    • RP2040은 Raspberry Pi가 설계한 듀얼 코어 Cortex-M0+ 기반의 단일 MCU 모델입니다.
    • STM32는 저전력·USB·무선·고성능 등 선택지가 넓고, RP2040은 단순한 제품 구성과 높은 접근성이 장점입니다.
    • RP2040은 프로그램을 외부 플래시 메모리에 저장하지만, 대부분의 STM32는 칩 내부 플래시를 사용합니다.
    • 키보드에서는 단순한 클럭 수보다 USB 지원, GPIO 수, 펌웨어 호환성, 소비전력과 회로 구성이 더 중요합니다.

    기계식 키보드의 기판이나 QMK 펌웨어 정보를 살펴보면 STM32RP2040이라는 이름을 자주 볼 수 있습니다. 두 칩 모두 키 입력을 읽고, 레이어와 매크로를 처리하며, USB를 통해 PC에 입력 정보를 전달하는 MCU로 사용할 수 있습니다.

    겉으로 보면 RP2040은 듀얼 코어와 높은 클럭을 갖추고 있어 무조건 더 좋은 칩처럼 보일 수 있습니다. 반대로 STM32는 오랫동안 다양한 키보드에 사용된 만큼 안정성과 호환성이 더 뛰어난 것처럼 느껴질 수 있습니다.

    하지만 두 이름을 숫자만으로 비교해서는 정확한 차이를 알기 어렵습니다. RP2040은 하나의 구체적인 MCU지만, STM32는 수많은 제품군을 포함하는 매우 넓은 플랫폼이기 때문입니다. 어떤 STM32를 비교 대상으로 선택하느냐에 따라 성능과 메모리, USB 기능, 소비전력이 크게 달라집니다.

    이번 글에서는 단순히 어느 쪽이 더 빠른지를 판단하는 것이 아니라, 두 MCU의 구조와 메모리 방식, 주변장치, 개발 환경 그리고 실제 키보드에서의 차이를 중심으로 살펴보겠습니다.


    1. STM32와 RP2040은 모두 MCU다

    STM32와 RP2040은 모두 MCU, 즉 Microcontroller Unit에 해당합니다. MCU는 CPU 코어뿐만 아니라 메모리, GPIO, 타이머, 통신 장치와 같은 주변 기능을 하나의 칩 안에 모아 놓은 소형 컴퓨터입니다.

    일반적인 PC의 CPU는 운영체제와 여러 프로그램을 동시에 실행하는 데 초점을 맞춥니다. 반면 MCU는 키 입력 감지, 센서 측정, 모터 제어처럼 정해진 작업을 빠르고 반복적으로 처리하는 데 적합합니다.

    키보드에서 MCU는 매트릭스의 행과 열을 계속 확인하고, 눌린 스위치를 찾아낸 뒤 디바운스 처리를 수행합니다. 이후 현재 레이어와 키맵을 확인하여 Keycode를 결정하고, 그 결과를 USB HID 리포트 형태로 PC에 전달합니다.

    키보드 MCU가 반복하는 주요 작업
    • 키보드 매트릭스의 행과 열 스캔
    • 스위치 접점의 디바운스 처리
    • 레이어와 Keycode 확인
    • 매크로와 조합키 처리
    • RGB LED 및 상태 표시등 제어
    • USB 또는 무선 연결을 통한 입력 전송

    따라서 STM32와 RP2040을 비교할 때는 단순히 CPU 속도만 보는 것보다, 키보드가 요구하는 기능을 얼마나 안정적으로 지원하는지를 함께 살펴봐야 합니다.

    2. STM32는 특정 칩이 아니라 제품군이다

    가장 먼저 알아야 할 점은 STM32가 하나의 MCU 모델명이 아니라는 것입니다. STM32는 STMicroelectronics가 제공하는 32비트 Arm Cortex-M 기반 MCU 제품군 전체를 가리킵니다.

    STM32 안에는 비교적 단순하고 저렴한 제품부터 높은 연산 성능과 대용량 메모리를 갖춘 제품까지 다양한 시리즈가 포함됩니다. Cortex-M0 또는 M0+ 기반의 보급형 제품도 있고, Cortex-M3·M4·M7·M33처럼 더 높은 성능과 추가 기능을 제공하는 제품도 있습니다.

    예를 들어 키보드에서 많이 볼 수 있는 STM32F103은 Cortex-M3 코어를 사용하는 MCU입니다. 반면 일부 저가형 기판에는 더 단순한 STM32F0 계열이 사용될 수 있고, 고성능 임베디드 장치에는 STM32F4나 STM32H7처럼 훨씬 강력한 제품이 사용됩니다.

    💡 중요한 비교 기준

    “STM32와 RP2040 중 무엇이 더 빠른가?”라는 질문만으로는 정확한 답을 내리기 어렵습니다. STM32F0, STM32F1, STM32F4처럼 비교 대상에 따라 CPU 코어와 클럭, 메모리 구성이 달라지기 때문입니다.

    즉 STM32의 가장 큰 특징은 선택지가 매우 넓다는 것입니다. 제조사는 필요한 GPIO 수, USB 기능, 소비전력, 메모리 용량과 가격에 맞춰 적절한 STM32 모델을 선택할 수 있습니다.

    구분 주요 특징
    STM32F0 비교적 단순한 Cortex-M0 기반 제품군으로 비용과 기본 기능의 균형을 중시
    STM32F1 Cortex-M3 기반의 대표적인 범용 제품군으로 다양한 임베디드 장치에서 사용
    STM32F4 Cortex-M4와 DSP·부동소수점 기능을 활용할 수 있는 고성능 제품군
    STM32L·U 배터리 기반 장치를 고려한 저전력 중심 제품군
    STM32H 복잡한 연산과 고속 주변장치를 위한 고성능 제품군

    물론 모든 STM32가 키보드에 적합한 것은 아닙니다. 필요한 핀 수가 부족할 수도 있고, USB 장치 기능을 지원하지 않을 수도 있으며, 성능에 비해 가격과 회로 복잡도가 지나치게 높을 수도 있습니다.

    그래서 실제 키보드 기판에서는 무조건 가장 강력한 STM32를 선택하지 않습니다. 매트릭스 크기, RGB LED 수, USB 연결 방식, 무선 기능과 펌웨어 용량을 고려해 필요한 수준의 MCU를 선택합니다.

    3. RP2040은 하나의 구체적인 MCU다

    RP2040은 Raspberry Pi가 직접 설계한 범용 MCU입니다. STM32처럼 수많은 세부 모델이 묶인 이름이 아니라, 비교적 명확한 하나의 칩 구성을 가리킵니다.

    RP2040에는 Arm Cortex-M0+ 코어가 두 개 들어 있으며, 최대 133MHz로 동작하도록 설계되었습니다. SRAM은 총 264KB이며, GPIO와 타이머, ADC, USB 장치 및 호스트 기능 등을 제공합니다.

    RP2040에서 특히 눈에 띄는 부분은 듀얼 코어PIO입니다. 듀얼 코어는 작업을 두 코어에 나눌 수 있게 해주며, PIO는 일반적인 주변장치만으로 처리하기 어려운 디지털 통신 동작을 직접 구성할 수 있게 해주는 기능입니다.

    RP2040의 대표적인 특징
    • 듀얼 코어 Arm Cortex-M0+ 구조
    • 최대 133MHz 동작 클럭
    • 264KB 온칩 SRAM
    • 외부 QSPI 플래시 메모리 사용
    • USB 1.1 장치 및 호스트 지원
    • 사용자가 동작을 구성할 수 있는 PIO 블록 제공

    RP2040은 Raspberry Pi Pico를 통해 널리 알려졌습니다. 비교적 저렴한 개발 보드와 잘 정리된 공식 문서, C/C++ SDK, MicroPython 환경 덕분에 입문자도 쉽게 접근할 수 있었습니다.

    이후 RP2040은 개발 보드뿐만 아니라 커스텀 키보드, 매크로 패드, 컨트롤러와 각종 소형 전자기기에 사용되기 시작했습니다. QMK와 KMK 같은 키보드 펌웨어에서도 활용할 수 있어 키보드 제작자에게도 익숙한 MCU가 되었습니다.

    주의할 점

    RP2040이 듀얼 코어라고 해서 키보드의 모든 동작이 자동으로 두 배 빨라지는 것은 아닙니다. 펌웨어가 두 번째 코어를 실제로 활용하도록 설계되어야 하며, 일반적인 키 매트릭스 스캔과 USB 입력 처리는 한 개의 코어만으로도 충분한 경우가 많습니다.

    4. CPU 코어와 클럭은 어떻게 다를까?

    RP2040은 Cortex-M0+ 코어 두 개를 최대 133MHz로 구동합니다. 반면 STM32는 선택한 모델에 따라 코어의 종류와 개수, 최대 클럭이 모두 달라집니다.

    보급형 STM32F0는 Cortex-M0 기반으로 RP2040보다 낮은 클럭을 사용하는 경우가 많습니다. STM32F103처럼 Cortex-M3를 사용하는 제품은 명령 처리 구조와 인터럽트 기능이 다르며, STM32F4 이상에서는 Cortex-M4나 더 강력한 코어를 사용할 수 있습니다.

    항목 STM32 RP2040
    제품 범위 다양한 MCU 제품군 하나의 구체적인 MCU
    CPU 코어 모델에 따라 Cortex-M0부터 M7·M33 등 다양 듀얼 Cortex-M0+
    동작 클럭 모델별로 크게 다름 최대 133MHz
    코어 수 대부분 싱글 코어, 일부 듀얼 코어 듀얼 코어
    선택 방식 용도에 맞는 모델을 선택 동일한 기본 사양을 기준으로 설계

    클럭 수치만 보면 RP2040이 일부 보급형 STM32보다 빠른 것은 사실입니다. 그러나 서로 다른 Cortex-M 코어는 같은 클럭에서도 명령 처리 능력과 지원 기능이 다를 수 있습니다.

    또한 키보드는 고성능 연산을 계속 수행하는 장치가 아닙니다. 대부분의 시간에는 매트릭스를 스캔하고, 짧은 입력 이벤트를 처리하며, USB 리포트를 일정한 주기로 전송합니다. 따라서 일반 키보드에서는 MCU 클럭이 높다고 해서 사용자가 체감하는 입력 지연이 같은 비율로 줄어들지는 않습니다.

    💡 키보드에서는 무엇이 더 중요할까?

    키보드의 실제 반응 속도는 MCU의 최대 클럭 하나로 결정되지 않습니다. 매트릭스 스캔 주기, 디바운스 알고리즘, USB Polling Rate, 펌웨어 구조와 무선 연결 지연이 함께 영향을 줍니다.

    5. 메모리 구조에서 큰 차이가 난다

    STM32와 RP2040의 차이를 이해할 때 중요한 부분이 프로그램 저장 방식입니다. 대부분의 STM32 MCU는 펌웨어를 저장할 수 있는 플래시 메모리를 칩 내부에 포함합니다.

    개발자가 QMK와 같은 펌웨어를 빌드하여 기록하면, 생성된 프로그램은 STM32 내부 플래시에 저장됩니다. 전원이 꺼졌다가 다시 켜져도 내부 플래시에 기록된 프로그램이 실행됩니다.

    반면 RP2040에는 일반적인 프로그램 저장용 플래시 메모리가 칩 내부에 포함되어 있지 않습니다. 대신 기판에 별도의 QSPI 플래시 메모리를 연결하고, 여기에 펌웨어를 저장합니다.

    프로그램 저장 방식 비교
    • STM32: 대부분의 모델이 내부 플래시에 펌웨어 저장
    • RP2040: 기판에 연결된 외부 QSPI 플래시에 펌웨어 저장
    • 공통점: 실행 중 필요한 데이터는 SRAM에 올려 처리
    • 실제 차이: 회로 구성과 펌웨어 기록 방식에서 차이가 발생

    RP2040의 외부 플래시 구조는 기판에 별도의 메모리 칩이 필요하다는 단점이 있지만, 설계자가 필요한 저장 용량을 비교적 유연하게 선택할 수 있다는 장점도 있습니다.

    예를 들어 복잡한 RGB 효과, 다양한 레이어, 대용량 기능을 넣어 펌웨어 크기가 커졌다면 더 큰 외부 플래시를 선택할 수 있습니다. 다만 펌웨어와 부트로더, 기판 설계가 해당 용량을 정상적으로 지원해야 합니다.

    STM32는 모델마다 내부 플래시와 SRAM 용량이 정해져 있습니다. 따라서 키보드 제조사는 펌웨어 크기와 필요한 기능을 예상하고 충분한 메모리를 가진 모델을 선택해야 합니다.

    Part 1 정리

    STM32는 성능과 기능이 다른 여러 MCU를 포함하는 넓은 제품군이고, RP2040은 듀얼 Cortex-M0+ 코어와 외부 플래시 구조를 사용하는 하나의 구체적인 MCU입니다. 따라서 두 이름을 단순한 클럭 수치만으로 비교해서는 안 됩니다. 다음에서는 GPIO와 PIO, USB 기능, QMK 펌웨어 환경, 소비전력과 실제 키보드에서의 체감 차이를 이어서 살펴보겠습니다.

    6. GPIO와 PIO는 무엇이 다를까?

    키보드 MCU에서 매우 중요한 기능 중 하나가 GPIO입니다. GPIO는 General Purpose Input/Output의 약자로, MCU가 외부 부품과 신호를 주고받을 때 사용하는 범용 입출력 핀입니다.

    키보드 매트릭스에서는 여러 GPIO 핀을 행과 열에 연결합니다. MCU는 한쪽 핀에 신호를 출력하고 다른 쪽 핀의 상태를 읽으면서 어떤 스위치가 눌렸는지 확인합니다. 상태 LED, 로터리 인코더, OLED 화면, RGB LED 제어에도 GPIO가 사용됩니다.

    STM32와 RP2040 모두 충분한 GPIO를 제공하지만, 실제 사용 가능한 핀 수는 칩 패키지와 기판 설계에 따라 달라집니다. 같은 STM32 시리즈라도 핀 수가 적은 패키지와 많은 패키지가 존재하며, 일부 핀은 USB·클럭·디버깅 기능과 함께 사용되기도 합니다.

    GPIO를 확인할 때 볼 항목
    • 기판에서 실제로 사용할 수 있는 핀의 개수
    • 핀마다 지원하는 입력·출력 및 대체 기능
    • ADC, PWM, UART, SPI, I²C와 공유되는지 여부
    • 부팅이나 디버깅에 예약된 핀이 있는지 여부
    • 핀의 허용 전압과 출력 전류 조건

    RP2040의 독특한 기능은 PIO, Programmable I/O입니다. PIO는 CPU가 모든 타이밍을 직접 계산하지 않아도, 작은 상태 머신이 정해진 입출력 동작을 반복하도록 구성할 수 있는 기능입니다.

    일반 MCU는 UART, SPI, I²C처럼 미리 설계된 주변장치를 사용합니다. 그러나 특별한 통신 규격이나 매우 정확한 신호 타이밍이 필요하다면 기본 주변장치만으로 구현하기 어려울 수 있습니다. RP2040의 PIO는 이런 상황에서 사용자가 직접 간단한 입출력 동작을 정의할 수 있게 합니다.

    키보드에서는 PIO를 반드시 사용해야 하는 것은 아닙니다. 일반적인 매트릭스 스캔과 USB HID 처리에는 기본 GPIO와 타이머만으로도 충분합니다. 다만 주소 지정형 LED, 특수 통신 장치, 독특한 입력 확장 회로를 제어할 때 PIO가 유용하게 활용될 수 있습니다.

    💡 PIO가 있다고 무조건 더 좋은 것은 아니다

    PIO는 일반적인 GPIO를 대체하는 기능이 아니라, 정밀한 신호 생성과 특수 통신을 보조하는 장치입니다. 평범한 키보드에서는 PIO보다 펌웨어 완성도와 핀 배치가 더 중요할 수 있습니다.

    7. USB 기능은 키보드에서 왜 중요할까?

    유선 키보드는 MCU가 USB 장치로 동작해야 합니다. 사용자가 케이블을 연결하면 MCU는 PC와 USB 통신을 시작하고, 자신이 어떤 장치인지 알리는 디스크립터를 전달합니다.

    PC는 이 정보를 바탕으로 해당 장치를 키보드, 마우스, 미디어 컨트롤러 등으로 인식합니다. 이후 MCU는 눌린 키 정보를 HID 리포트로 만들어 USB를 통해 전송합니다.

    RP2040은 USB 1.1 컨트롤러와 PHY를 포함하고 있어 별도의 USB 통신 칩 없이 장치 또는 호스트 기능을 구현할 수 있습니다. 키보드에서는 대부분 USB 장치 모드로 사용됩니다.

    STM32는 모델마다 USB 지원 범위가 다릅니다. 어떤 제품은 USB Full-Speed 장치 기능을 제공하지만, 일부 저가형 모델은 USB 주변장치가 없을 수 있습니다. 고급 제품군에서는 USB High-Speed 또는 추가적인 USB 기능을 지원하는 모델도 존재합니다.

    항목 STM32 RP2040
    USB 지원 모델마다 다르므로 데이터시트 확인 필요 USB 1.1 컨트롤러와 PHY 내장
    키보드 사용 USB 지원 모델이면 HID 장치 구현 가능 USB HID 키보드 구현 가능
    확인 요소 USB 장치 지원, 핀 배치, 클럭 구성 USB 데이터 핀 배치와 외부 회로

    키보드의 Polling Rate는 USB 컨트롤러의 최고 성능만으로 결정되지 않습니다. 펌웨어가 얼마나 자주 HID 리포트를 준비하는지, 엔드포인트 설정이 어떻게 되어 있는지, 매트릭스 스캔과 디바운스가 얼마나 빠르게 끝나는지가 함께 영향을 줍니다.

    따라서 1,000Hz Polling Rate를 지원한다고 해도 모든 키 입력이 정확히 1ms 안에 PC로 전달된다는 뜻은 아닙니다. 사용자가 키를 누른 순간과 다음 매트릭스 스캔 시점 사이의 대기, 디바운스 시간, USB 전송 대기가 더해질 수 있습니다.

    8. QMK 펌웨어에서는 어떤 차이가 있을까?

    QMK Firmware는 다양한 키보드 MCU와 기판을 지원합니다. STM32 기반 기판과 RP2040 기반 기판 모두 QMK를 사용할 수 있지만, 내부에서 사용되는 하드웨어 추상화 계층과 빌드 설정에는 차이가 있습니다.

    STM32 기반 QMK 키보드는 주로 ChibiOS 환경을 활용합니다. 기판 정의에는 사용 중인 STM32 모델, 클럭, USB 설정, GPIO 핀과 부트로더 방식 등이 포함됩니다.

    RP2040 기반 기판 역시 QMK에서 사용할 수 있으며, 해당 MCU에 맞는 드라이버와 설정이 필요합니다. 개발자는 단순히 MCU 이름만 변경하는 것이 아니라, 핀 번호와 플래시 구성, 부트로더, USB 설정까지 기판에 맞춰 지정해야 합니다.

    QMK 기판 설정에서 달라질 수 있는 부분
    • MCU와 보드 플랫폼 설정
    • 행·열 GPIO 핀 번호
    • 부트로더 종류와 진입 방식
    • 플래시 메모리와 EEPROM 에뮬레이션 방식
    • USB 드라이버와 클럭 설정
    • RGB, OLED, 인코더 등 주변장치 드라이버

    사용자 입장에서는 정상적으로 완성된 펌웨어가 들어간 키보드라면 MCU 차이를 크게 느끼지 못할 수 있습니다. 키맵 변경, 레이어 전환, 매크로, 미디어 키 같은 일반적인 QMK 기능은 두 플랫폼 모두에서 구현할 수 있기 때문입니다.

    차이는 주로 개발자와 기판 설계자에게 더 크게 나타납니다. 기존 오픈소스 기판을 참고하기 쉬운지, 필요한 드라이버가 이미 지원되는지, 디버깅 환경이 익숙한지에 따라 개발 난이도가 달라집니다.

    펌웨어 호환성을 먼저 확인해야 하는 이유

    MCU의 성능이 충분하더라도 사용하려는 LED 드라이버, 무선 모듈, 디스플레이 또는 부트로더가 펌웨어에서 제대로 지원되지 않으면 개발 시간이 크게 늘어날 수 있습니다.

    9. 부트로더와 펌웨어 기록 방식

    부트로더는 MCU가 시작될 때 펌웨어를 실행하거나 새로운 펌웨어를 기록할 수 있도록 도와주는 작은 프로그램입니다. 키보드 사용자는 부트로더 모드에 진입한 뒤 QMK Toolbox 같은 프로그램이나 명령어를 사용해 펌웨어를 업데이트할 수 있습니다.

    STM32는 모델과 기판 설계에 따라 DFU, STM32duino 계열 부트로더 또는 별도의 커스텀 부트로더를 사용할 수 있습니다. 일부 STM32에는 제조사가 제공하는 시스템 부트로더가 ROM에 포함되어 있어 특정 핀 상태나 명령을 통해 진입할 수 있습니다.

    RP2040은 BOOTSEL 방식을 통해 USB 대용량 저장장치처럼 표시되는 부트 모드를 사용할 수 있습니다. BOOTSEL 버튼을 누른 상태에서 연결하면 PC에 저장장치가 나타나고, UF2 형식의 펌웨어 파일을 복사해 기록할 수 있습니다.

    구분 STM32 RP2040
    대표 진입 방식 DFU, 시스템 부트로더, 커스텀 부트로더 BOOTSEL 기반 USB 부트
    파일 기록 DFU 도구 또는 전용 플래싱 프로그램 사용 UF2 파일을 저장장치에 복사하는 방식 사용 가능
    사용 편의성 기판과 부트로더에 따라 절차가 달라짐 일반 사용자도 비교적 이해하기 쉬움

    RP2040의 UF2 방식은 초보자에게 특히 편리합니다. 별도의 드라이버나 복잡한 프로그램 없이 파일 복사 방식으로 펌웨어를 기록할 수 있기 때문입니다.

    하지만 완제품 키보드에서는 제조사가 부트 버튼을 외부에 노출하지 않을 수도 있습니다. 이 경우 특정 키 조합, QMK의 Reset Keycode 또는 기판의 리셋 패드를 사용해 부트로더로 진입해야 합니다.

    10. EEPROM은 어떻게 처리할까?

    키보드에서 EEPROM은 사용자가 변경한 설정을 전원이 꺼진 뒤에도 유지하는 데 사용됩니다. VIA에서 변경한 키맵, 기본 레이어, RGB 밝기와 같은 설정이 대표적입니다.

    그러나 모든 MCU가 별도의 물리적 EEPROM을 내부에 포함하는 것은 아닙니다. 이 경우 펌웨어는 플래시 메모리의 일부를 EEPROM처럼 사용하는 에뮬레이션 방식을 사용할 수 있습니다.

    STM32 역시 모델에 따라 실제 EEPROM 제공 여부가 다르며, 많은 QMK 기판은 내부 플래시의 일부 또는 외부 EEPROM을 활용합니다. RP2040은 외부 QSPI 플래시의 일부 영역을 설정 저장 용도로 사용할 수 있습니다.

    💡 EEPROM이라는 이름에 주의

    QMK 설정에서 EEPROM이라고 표현하더라도 실제 하드웨어가 반드시 독립된 EEPROM 칩이라는 뜻은 아닙니다. 내부 플래시 또는 외부 플래시의 일부를 소프트웨어적으로 EEPROM처럼 사용할 수 있습니다.

    플래시는 데이터를 기록할 때 일정 크기의 영역을 지우고 다시 써야 하므로, 일반 RAM처럼 무제한으로 빠르게 변경하는 용도에는 적합하지 않습니다. 펌웨어는 불필요한 쓰기 횟수를 줄이고 저장 영역을 안정적으로 관리해야 합니다.

    사용자가 키맵을 한 번 변경하는 정도로 수명이 문제가 되는 경우는 드뭅니다. 다만 펌웨어 오류로 매 스캔마다 설정을 기록하도록 만들면 플래시 마모가 빨라질 수 있으므로 개발 단계에서 주의해야 합니다.

    11. 소비전력과 무선 키보드 적합성

    유선 키보드는 USB에서 지속적으로 전원을 공급받기 때문에 MCU 소비전력이 큰 문제가 되지 않는 경우가 많습니다. 하지만 배터리를 사용하는 무선 키보드에서는 소비전력이 사용 시간을 결정하는 핵심 요소가 됩니다.

    STM32 제품군에는 저전력 동작을 중심으로 설계된 시리즈가 존재합니다. 깊은 절전 모드, 빠른 복귀, 다양한 클럭 제어 기능을 활용하면 배터리 장치에 적합한 설계를 만들 수 있습니다.

    RP2040도 클럭을 조절하고 일부 기능을 정지해 소비전력을 줄일 수 있지만, 저전력 무선 장치를 목적으로 할 때는 전용 저전력 MCU와 비교해야 합니다. 특히 RP2040 자체에는 Bluetooth 또는 2.4GHz 무선 기능이 내장되어 있지 않습니다.

    STM32 역시 대부분의 일반 모델에는 무선 기능이 없지만, STM32WB처럼 Bluetooth와 무선 기능을 통합한 별도 제품군이 존재합니다. 반면 RP2040 기반 무선 키보드는 일반적으로 외부 무선 칩이나 모듈을 추가해야 합니다.

    항목 STM32 RP2040
    저전력 선택지 저전력 특화 제품군을 선택할 수 있음 클럭과 절전 모드 최적화 필요
    무선 내장 일부 무선 통합 제품군 존재 기본 RP2040에는 무선 기능 없음
    배터리 키보드 모델 선택과 설계에 따라 유리할 수 있음 외부 무선 모듈과 전력 최적화가 중요

    무선 키보드의 사용 시간은 MCU 하나만으로 결정되지 않습니다. 무선 칩, RGB LED, 배터리 용량, 스캔 주기, 절전 진입 시간, 대기 중 전류와 펌웨어 최적화가 모두 영향을 줍니다.

    12. 실제 키보드 성능은 어느 쪽이 더 좋을까?

    일반적인 유선 키보드라면 STM32와 RP2040 모두 충분한 성능을 제공합니다. 매트릭스 스캔, 디바운스, 레이어, 매크로, USB HID 전송은 비교적 가벼운 작업이기 때문입니다.

    RP2040은 높은 클럭, 넉넉한 SRAM, 듀얼 코어 덕분에 복잡한 기능을 추가할 여유가 큽니다. 많은 RGB LED, 디스플레이 애니메이션, 추가 입력 장치 또는 실험적인 기능을 넣을 때 장점이 될 수 있습니다.

    STM32는 필요한 성능과 기능에 맞춰 정확한 모델을 선택할 수 있다는 장점이 있습니다. 단순한 키보드에는 저렴한 제품을, 저전력 무선 기기에는 저전력 제품을, 복잡한 장치에는 고성능 제품을 선택할 수 있습니다.

    STM32가 잘 맞는 경우
    • 목적에 맞는 MCU를 세밀하게 선택할 때
    • 저전력 설계가 중요한 경우
    • 산업용 주변장치와 다양한 통신 기능이 필요할 때
    • 기존 STM32 개발 환경을 활용할 때
    RP2040이 잘 맞는 경우
    • 높은 접근성과 단순한 제품 구성을 원할 때
    • UF2 방식의 편리한 펌웨어 기록이 필요할 때
    • 넉넉한 SRAM과 높은 클럭이 필요할 때
    • PIO를 이용한 특수 입출력을 구현할 때

    사용자가 느끼는 키보드 품질은 MCU 이름보다 전체 설계에 더 큰 영향을 받습니다. 같은 RP2040을 사용해도 펌웨어가 비효율적이면 입력 지연이 늘어날 수 있고, 낮은 클럭의 STM32라도 최적화가 잘되어 있으면 안정적인 성능을 낼 수 있습니다.

    스위치 입력이 PC에 전달되기까지는 매트릭스 스캔, 디바운스, Keycode 처리, HID 리포트 생성, USB 전송 과정이 이어집니다. 이 중 어느 한 단계가 느리면 고성능 MCU의 장점이 제대로 나타나지 않을 수 있습니다.

    결론적으로 MCU만 보고 키보드를 평가하면 안 된다

    MCU는 중요한 부품이지만 스캔 주기, 펌웨어, USB 설정, 회로 품질과 무선 최적화가 함께 완성되어야 좋은 키보드가 됩니다.

    13. STM32와 RP2040 차이 한눈에 보기

    비교 항목 STM32 RP2040
    정체 수많은 MCU가 포함된 제품군 하나의 구체적인 MCU
    CPU 구조 제품에 따라 Cortex-M 계열이 다양 듀얼 Cortex-M0+
    최대 클럭 모델별로 다름 기본 사양 최대 133MHz
    프로그램 저장 대부분 내부 플래시 외부 QSPI 플래시
    특수 기능 제품별 다양한 주변장치와 저전력 기능 PIO와 듀얼 코어
    USB 모델별 지원 여부 확인 필요 USB 1.1 컨트롤러와 PHY 내장
    펌웨어 기록 DFU 등 기판별 방식 사용 BOOTSEL과 UF2 방식 사용 가능
    저전력 선택 저전력 특화 제품군 선택 가능 외부 회로와 펌웨어 최적화 중요
    키보드 활용 상용·커스텀 기판에서 폭넓게 사용 커스텀 키보드와 개발 보드에서 활용 증가

    14. 자주 묻는 질문

    Q. RP2040이 STM32보다 무조건 빠른가요?

    아닙니다. STM32는 매우 다양한 제품군이므로 어떤 모델과 비교하는지에 따라 결과가 달라집니다. 일부 보급형 STM32보다 RP2040의 클럭과 SRAM이 클 수 있지만, 고성능 STM32는 훨씬 강력한 CPU와 주변장치를 제공할 수 있습니다.

    Q. 듀얼 코어면 키보드 입력 속도가 두 배 빨라지나요?

    그렇지 않습니다. 펌웨어가 두 코어를 활용하도록 작성되어야 하며, 일반적인 매트릭스 스캔과 USB HID 처리에는 한 코어만으로도 충분합니다. 입력 속도는 디바운스와 스캔 주기, USB 설정에도 영향을 받습니다.

    Q. QMK 키보드에는 어느 MCU가 더 좋나요?

    두 플랫폼 모두 사용할 수 있습니다. 필요한 GPIO 수, USB 지원, 메모리 용량, QMK 드라이버 지원과 기판 설계 경험을 기준으로 선택하는 것이 좋습니다.

    Q. RP2040에는 EEPROM이 있나요?

    독립된 프로그램 저장용 내부 플래시나 일반적인 물리 EEPROM은 없습니다. 기판에 연결된 외부 QSPI 플래시의 일부를 설정 저장 영역으로 활용할 수 있습니다.

    Q. 무선 키보드에는 어느 쪽이 적합한가요?

    특정 이름만으로 판단하기 어렵습니다. 저전력 STM32 제품군은 배터리 장치에 유리할 수 있지만, 무선 통합 여부와 외부 무선 칩, 펌웨어 절전 최적화를 함께 확인해야 합니다.

    Q. 키보드 구매 시 MCU 이름을 꼭 확인해야 하나요?

    참고할 수는 있지만 MCU 이름만으로 품질을 판단하기는 어렵습니다. 실제 Polling Rate, 입력 안정성, 펌웨어 지원, VIA·VIAL 호환성과 제조사의 업데이트 정책을 함께 확인하는 것이 좋습니다.

    15. 함께 보면 좋은 글

    16. 공식 자료

    17. 결론

    STM32와 RP2040은 모두 키보드 MCU로 사용할 수 있지만 출발점이 다릅니다. STM32는 다양한 성능과 기능을 가진 거대한 MCU 제품군이며, RP2040은 듀얼 Cortex-M0+ 코어와 PIO, 외부 플래시 구조를 갖춘 하나의 구체적인 칩입니다.

    STM32의 장점은 선택의 폭입니다. 가격, 성능, 소비전력, USB와 무선 기능에 맞춰 적절한 모델을 선택할 수 있습니다. 반면 RP2040은 비교적 단순한 제품 구성, 넉넉한 SRAM, 편리한 UF2 부트 방식과 PIO 기능이 강점입니다.

    일반적인 키보드에서는 두 플랫폼 모두 충분한 성능을 낼 수 있습니다. 따라서 어느 MCU가 더 우수한지를 단정하기보다는 해당 기판의 펌웨어 지원, 매트릭스 스캔 구조, USB 설정, 메모리 용량과 전력 설계를 함께 확인하는 것이 정확합니다.

    결국 좋은 키보드를 만드는 핵심은 가장 높은 클럭의 MCU를 선택하는 것이 아닙니다. 필요한 기능에 맞는 MCU를 고르고, 회로와 펌웨어를 안정적으로 설계하는 것이 더 중요합니다.

    Link&Tem 한 줄 정리

    STM32는 목적에 맞춰 선택하는 MCU 제품군이고, RP2040은 듀얼 코어와 PIO, 편리한 부트 방식을 하나의 칩에 담은 범용 MCU입니다.

    Sources
    • STMicroelectronics, STM32 32-bit Arm Cortex MCU 공식 제품 정보
    • Raspberry Pi, RP2040 공식 제품 페이지 및 데이터시트
    • Raspberry Pi, RP2040 Hardware Design 및 Microcontroller Documentation
    • QMK Firmware 공식 문서
  • MCU는 어떤 일을 할까? 키보드 입력을 처리하는 핵심 칩의 역할

    MCU는 어떤 일을 할까? 키보드 입력을 처리하는 핵심 칩의 역할

    LINK&TEM GUIDE

    MCU는 어떤 일을 할까?

    키 입력 감지부터 Keycode 처리와 USB 전송까지 키보드 컨트롤러의 역할

    📌 핵심 요약
    • MCU는 키보드 내부에서 펌웨어를 실행하는 작은 컴퓨터 역할을 합니다.
    • 키보드 매트릭스를 반복해서 스캔하며 어떤 스위치가 눌렸는지 확인합니다.
    • 감지한 위치를 Keycode로 변환하고 레이어, 매크로, 조합키 규칙을 처리합니다.
    • 처리가 끝난 입력은 USB 또는 무선 통신 규격에 맞는 리포트로 PC에 전달됩니다.
    • MCU의 성능뿐 아니라 GPIO 수, 플래시·RAM 용량, USB 지원 방식도 키보드 설계에 중요합니다.

    키보드에서 키를 누르면 스위치가 전기적으로 연결되고, 그 신호가 곧바로 문자로 바뀌어 PC에 전달된다고 생각하기 쉽습니다. 하지만 스위치는 자신이 어떤 글자인지 알지 못합니다. 스위치가 만들어내는 것은 특정 회로가 연결되었다는 단순한 전기적 변화뿐입니다.

    이 변화를 읽고, 어느 위치의 키가 눌렸는지 판단하고, 현재 레이어에서 어떤 기능을 실행해야 하는지 결정한 뒤, 컴퓨터가 이해할 수 있는 입력 데이터로 만들어 보내는 부품이 바로 MCU입니다.

    MCU는 Microcontroller Unit의 약자로, 프로세서와 메모리, 입출력 장치가 하나의 칩 안에 통합된 소형 제어 장치입니다. 키보드에서는 QMK와 같은 펌웨어를 실행하면서 매트릭스 스캔, 디바운스, Keycode 해석, LED 제어, USB 통신 등을 반복적으로 처리합니다.

    따라서 MCU를 이해하면 키보드 입력이 왜 단순한 스위치 연결만으로 끝나지 않는지, QMK 펌웨어가 어디에서 실행되는지, EEPROM과 플래시 메모리는 각각 무엇을 저장하는지, STM32와 RP2040 같은 칩의 차이가 실제 키보드에 어떤 영향을 주는지까지 하나의 흐름으로 이해할 수 있습니다.


    1. MCU는 키보드 안의 작은 컴퓨터다

    MCU를 가장 쉽게 설명하면 키보드 안에 들어 있는 작은 컴퓨터입니다. 일반적인 PC의 CPU처럼 명령어를 실행하지만, 문서 작성이나 영상 편집처럼 범용 작업을 수행하는 것이 아니라 키보드 제어에 필요한 작업을 빠르고 반복적으로 처리하도록 사용됩니다.

    MCU 내부에는 명령을 실행하는 CPU 코어, 펌웨어를 저장하는 플래시 메모리, 실행 중인 데이터를 보관하는 RAM, 외부 회로와 신호를 주고받는 GPIO, 시간을 측정하는 타이머, USB와 같은 통신 장치가 통합되어 있습니다.

    키보드 MCU에 들어 있는 대표 구성
    • CPU 코어 : 펌웨어의 명령어를 순서대로 실행
    • 플래시 메모리 : QMK 펌웨어와 기본 키맵을 저장
    • RAM : 현재 키 상태와 실행 중인 임시 데이터를 보관
    • GPIO : 키보드의 행과 열, LED, 로터리 엔코더 등을 연결
    • 타이머 : 스캔 주기, 디바운스, 탭·홀드 시간을 측정
    • 통신 장치 : USB, UART, SPI, I²C 등의 데이터 전송을 담당

    이 구성 요소들은 각각 따로 움직이는 것이 아니라 펌웨어의 지시에 따라 연결됩니다. 예를 들어 CPU 코어가 GPIO의 상태를 읽고, RAM에 저장된 이전 키 상태와 비교한 뒤, 새로운 입력이 발견되면 플래시에 저장된 키맵을 참고하여 어떤 Keycode를 처리할지 결정하는 방식입니다.

    일반적인 데스크톱 프로세서와 비교하면 MCU의 동작 속도와 메모리 용량은 작습니다. 하지만 키보드는 대규모 프로그램을 실행할 필요가 없기 때문에 중요한 것은 절대적인 연산 성능보다 입력을 일정한 주기로 안정적으로 처리하는 능력입니다.

    🔍 Link&Tem Insight

    MCU는 CPU만을 의미하지 않습니다. CPU 코어를 포함해 플래시, RAM, GPIO, 타이머, USB 컨트롤러 같은 주변 장치를 하나의 칩에 통합한 부품입니다. 키보드 PCB에서 MCU 하나가 여러 기능을 처리할 수 있는 이유도 이러한 통합 구조에 있습니다.

    2. 키보드가 켜지면 MCU에서 일어나는 일

    키보드를 USB 포트에 연결하거나 무선 키보드의 전원을 켜면 MCU는 저장된 펌웨어를 읽어 실행하기 시작합니다. 이 과정을 부팅 또는 초기화라고 부릅니다.

    초기화 단계에서는 MCU의 동작 클록을 설정하고, 키보드의 행과 열에 연결된 GPIO 방향을 지정하며, USB 통신 장치와 타이머를 준비합니다. EEPROM이나 별도의 비휘발성 저장 영역에 사용자 설정이 있다면 이 값도 불러옵니다.

    전원을 넣은 뒤의 기본 흐름
    1. MCU가 리셋 상태에서 시작합니다.
    2. 플래시 메모리에 저장된 펌웨어를 실행합니다.
    3. 클록, GPIO, 타이머와 통신 장치를 초기화합니다.
    4. 저장된 키맵 및 사용자 설정을 불러옵니다.
    5. USB 장치 정보를 PC에 전달하여 키보드로 인식시킵니다.
    6. 키보드 매트릭스 스캔을 반복하기 시작합니다.

    유선 USB 키보드라면 MCU는 자신이 어떤 종류의 장치인지 PC에 알려야 합니다. 이때 키보드는 일반적으로 USB HID 장치로 동작합니다. 운영체제가 장치를 정상적으로 인식하면 별도의 전용 드라이버를 설치하지 않아도 기본 키 입력을 받을 수 있습니다.

    초기화가 끝난 뒤에는 프로그램이 종료되지 않습니다. MCU는 전원이 꺼질 때까지 매트릭스를 읽고, 입력 변화를 확인하고, 필요한 기능을 실행하는 루프를 계속 반복합니다.

    💡 TIP

    키보드의 LED는 켜지지만 PC에서 입력 장치로 인식되지 않는다면 전원 공급은 되고 있어도 MCU의 펌웨어 실행, USB 데이터 연결, 부트로더 또는 USB 초기화 과정에 문제가 있을 수 있습니다. 이때는 케이블과 포트를 먼저 확인한 뒤 펌웨어 상태를 점검하는 것이 좋습니다.

    3. MCU는 키가 눌렸는지 어떻게 찾을까?

    대부분의 키보드는 모든 스위치를 MCU 핀에 하나씩 직접 연결하지 않습니다. 키가 많아질수록 필요한 배선과 GPIO 수가 지나치게 증가하기 때문입니다. 대신 스위치를 행과 열로 묶은 키보드 매트릭스 구조를 사용합니다.

    예를 들어 5개의 행과 15개의 열로 구성된 매트릭스라면 최대 75개 위치를 20개의 신호선으로 확인할 수 있습니다. MCU는 특정 행이나 열에 신호를 보낸 다음 반대쪽 선의 상태를 읽으며 어느 교차점이 연결되었는지 조사합니다.

    단계 MCU가 수행하는 작업
    1 하나의 행 또는 열을 활성화
    2 반대 방향의 입력 핀 상태를 읽음
    3 다음 행 또는 열로 이동
    4 전체 매트릭스의 현재 상태를 완성
    5 이전 상태와 비교해 눌림과 해제를 판별

    QMK 공식 문서에서는 매트릭스 스캔을 키보드 펌웨어의 핵심 기능으로 설명합니다. 실제로 MCU는 이 과정을 매우 짧은 간격으로 반복하면서 사용자가 키를 누르거나 떼는 순간을 찾아냅니다. :contentReference[oaicite:0]{index=0}

    매트릭스 스캔은 한 번만 실행되는 작업이 아닙니다. MCU는 전체 행과 열을 읽은 직후 다시 처음부터 스캔합니다. 이 반복 속도를 스캔 레이트라고 하며, 실제 입력 지연에는 스캔 주기뿐 아니라 디바운스 시간, 펌웨어 처리, USB 리포트 전송 주기도 함께 영향을 줍니다.

    🔍 Link&Tem Insight

    높은 클록 속도의 MCU를 사용한다고 키보드 지연 시간이 자동으로 크게 줄어드는 것은 아닙니다. 매트릭스 구조, 스캔 코드, 디바운스 알고리즘, USB 폴링 간격과 펌웨어 기능의 처리 방식이 함께 맞아야 안정적인 입력 성능을 얻을 수 있습니다.

    4. 스위치 신호가 바로 입력되지 않는 이유

    기계식 스위치의 금속 접점은 눌리는 순간 한 번만 깔끔하게 붙지 않을 수 있습니다. 접점이 매우 짧은 시간 동안 여러 번 붙었다 떨어지는 현상이 발생할 수 있으며, 이를 바운스라고 합니다.

    MCU가 모든 전기적 변화를 그대로 입력으로 처리하면 사용자는 키를 한 번 눌렀는데 같은 문자가 두 번 이상 입력될 수 있습니다. 이를 방지하기 위해 펌웨어는 일정한 기준에 따라 신호를 안정화하는 디바운스 처리를 수행합니다.

    디바운스는 단순히 일정 시간 동안 입력을 무시하는 방식으로만 동작하지 않습니다. 펌웨어에 따라 전체 매트릭스의 변화를 기준으로 판단하거나, 각 키의 상태를 개별적으로 추적하거나, 연속해서 동일한 상태가 확인되었을 때만 입력을 확정할 수 있습니다.

    MCU가 구분해야 하는 키 상태
    • 이전에도 눌려 있었고 지금도 눌려 있는 상태
    • 이전에는 없었지만 새롭게 눌린 상태
    • 이전에는 눌려 있었지만 지금은 해제된 상태
    • 접점 바운스로 인해 짧게 반복되는 불안정한 상태

    디바운스 시간을 지나치게 길게 설정하면 채터링은 줄어들 수 있지만 빠르게 같은 키를 연타할 때 반응이 둔해질 수 있습니다. 반대로 너무 짧게 설정하면 오래되었거나 접점 상태가 좋지 않은 스위치에서 중복 입력이 나타날 수 있습니다.

    💡 TIP

    특정 키에서만 중복 입력이 발생한다면 MCU 성능보다 해당 스위치의 접점 상태나 소켓 접촉 문제를 먼저 확인하는 것이 좋습니다. 여러 키에서 동시에 문제가 나타난다면 펌웨어의 디바운스 설정과 매트릭스 회로도 함께 점검해야 합니다.

    5. 위치 정보는 어떻게 Keycode로 바뀔까?

    MCU가 매트릭스에서 확인하는 것은 문자가 아니라 행과 열의 위치입니다. 예를 들어 특정 키를 눌렀을 때 MCU가 처음 얻는 정보는 “2번 행과 4번 열이 연결되었다”와 같은 좌표입니다.

    이 좌표를 실제 기능으로 바꾸는 기준이 키맵입니다. 펌웨어는 현재 활성화된 레이어의 키맵을 확인해 해당 위치에 지정된 Keycode를 찾습니다.

    같은 물리적 스위치라도 기본 레이어에서는 숫자 키로 작동하고, Fn 레이어에서는 기능키나 미디어 제어 키로 작동할 수 있습니다. MCU는 현재 레이어 상태, 눌린 수정키, 탭·홀드 조건 등을 함께 확인한 뒤 최종 동작을 결정합니다.

    처리 정보 의미
    행·열 좌표 실제로 눌린 스위치의 물리적 위치
    레이어 상태 현재 적용해야 할 키맵 선택
    Keycode 해당 위치에서 실행할 기능을 나타내는 내부 값
    키 이벤트 새로 눌렸는지 또는 해제되었는지 나타내는 변화

    QMK에서는 기본 키보드 입력뿐 아니라 레이어 전환, 매크로, 탭 댄스, 원샷 모디파이어와 같은 기능도 Keycode와 이벤트 처리 구조 안에서 실행됩니다. 사용자 정의 Keycode 역시 펌웨어가 정해진 범위의 값으로 구분하여 처리할 수 있습니다. :contentReference[oaicite:1]{index=1}

    🔍 Link&Tem Insight

    Keycode는 PC에 그대로 전송되는 문자 자체와 같지 않습니다. MCU 내부에서 기능을 구분하기 위한 값이며, 일부 Keycode는 키보드 안에서만 처리됩니다. 예를 들어 레이어 전환 Keycode는 PC로 전송되지 않고 MCU가 활성 레이어를 바꾸는 데 사용됩니다.

    6. MCU와 QMK Firmware는 어떤 관계일까?

    MCU가 키보드의 하드웨어라면 QMK Firmware는 그 하드웨어에서 실행되는 소프트웨어입니다. MCU만 PCB에 장착되어 있다고 해서 자동으로 키 입력을 처리하는 것은 아닙니다. 어떤 GPIO를 행과 열로 사용할지, 키맵을 어떻게 읽을지, USB 데이터를 어떤 형식으로 보낼지를 정의한 펌웨어가 필요합니다.

    QMK 공식 설명처럼 키보드 안의 프로세서는 버튼 입력을 감지하고 그 정보를 호스트 컴퓨터에 전달하는 소프트웨어를 실행합니다. 사용자가 QMK 키맵을 빌드한다는 것은 결국 특정 MCU가 실행할 프로그램을 만드는 과정입니다. :contentReference[oaicite:2]{index=2}

    하드웨어와 펌웨어의 역할 구분
    • MCU : 명령어를 실행하고 실제 전기 신호를 읽는 장치
    • QMK Firmware : 키 입력을 어떻게 처리할지 정의한 프로그램
    • 키맵 : 각 물리적 위치에 어떤 기능을 넣을지 정한 데이터
    • 부트로더 : 새로운 펌웨어를 MCU에 기록할 수 있게 해주는 프로그램

    QMK를 빌드하면 선택한 키보드와 MCU에 맞는 실행 파일이 만들어집니다. AVR 계열에서는 HEX 파일이 사용되는 경우가 많고, ARM 기반 MCU에서는 BIN이나 UF2 같은 형식이 사용될 수 있습니다. 생성된 파일을 부트로더를 통해 플래시에 기록하면 MCU가 다음 부팅부터 새로운 펌웨어를 실행합니다.

    잘못된 키맵을 작성하면 특정 키가 다른 기능으로 작동할 수 있고, 보드 설정이나 핀 정의가 잘못되면 매트릭스 자체를 읽지 못할 수도 있습니다. 따라서 펌웨어는 단순한 키 배치표가 아니라 MCU의 주변 장치와 키보드 회로를 제어하는 전체 프로그램에 가깝습니다.

    💡 TIP

    펌웨어를 직접 플래싱하기 전에는 키보드 모델과 리비전, MCU 종류, 부트로더 방식을 반드시 확인해야 합니다. 이름이 비슷한 다른 PCB용 파일을 기록하면 키 배열이나 USB 연결이 정상적으로 작동하지 않을 수 있습니다.
    Part 1 정리

    MCU는 키보드 매트릭스를 반복해서 스캔하고, 불안정한 스위치 신호를 정리한 뒤, 눌린 위치를 현재 레이어의 Keycode로 변환하는 핵심 제어 장치입니다. 이 모든 과정은 MCU에 저장된 QMK와 같은 펌웨어가 지시합니다. 다음 내용에서는 MCU가 처리한 Keycode를 USB 리포트로 전송하는 과정과 플래시·RAM·EEPROM의 차이, RGB와 무선 기능이 MCU 자원을 사용하는 방식, STM32와 RP2040을 선택할 때 확인해야 할 기준을 이어서 살펴봅니다.

    7. MCU가 USB HID Report를 만드는 과정

    키보드 매트릭스에서 눌린 스위치를 확인하고 해당 위치를 Keycode로 변환했다고 해서 입력 처리가 끝나는 것은 아닙니다. MCU는 이 정보를 컴퓨터가 이해할 수 있는 형식으로 다시 정리해야 합니다. USB 키보드에서는 일반적으로 이 데이터가 HID Report 형태로 전달됩니다.

    키 입력이 USB 데이터가 되는 흐름
    스위치 상태 확인 → 행과 열 좌표 판별 → Keycode 조회 → Modifier와 일반 키 구분 → HID Report 생성 → USB 엔드포인트를 통해 PC로 전송

    예를 들어 사용자가 Ctrl+C를 누르면 MCU는 Ctrl 키를 일반 문자 키와 똑같이 처리하지 않습니다. Ctrl, Shift, Alt, GUI와 같은 키는 Modifier 영역에 기록하고, C 키는 별도의 Keycode 영역에 기록합니다. 이렇게 만들어진 Report를 컴퓨터가 읽으면 운영체제는 두 키가 동시에 눌렸다고 해석합니다.

    Report 요소 담기는 정보 예시
    Modifier Ctrl, Shift, Alt, GUI 상태 왼쪽 Ctrl이 눌렸는지 표시
    일반 Keycode 문자, 숫자, 기능키 입력 A, Enter, F1 등
    상태 변화 키가 눌렸는지 해제됐는지 C 입력 후 빈 Report 전송

    키를 떼는 동작도 중요합니다. MCU가 키가 눌렸다는 Report만 보내고 해제됐다는 상태를 보내지 않으면 컴퓨터는 해당 키가 계속 눌린 것으로 판단할 수 있습니다. 따라서 MCU는 매 스캔 주기마다 현재 상태를 비교하고, 필요한 경우 새로운 Report를 만들어 전송합니다.

    핵심 포인트 Polling Rate는 컴퓨터가 키보드의 USB 데이터를 확인하는 빈도와 관련되고, Scan Rate는 MCU가 키 매트릭스를 검사하는 빈도와 관련됩니다. 두 값은 서로 연결되어 있지만 같은 개념은 아닙니다.

    8. Flash, RAM, EEPROM은 각각 무엇을 저장할까?

    MCU 내부에는 모든 데이터를 같은 방식으로 저장하는 하나의 공간만 있는 것이 아닙니다. 펌웨어 코드, 실행 중에 바뀌는 값, 전원이 꺼진 뒤에도 유지해야 하는 설정은 서로 다른 성격을 가지므로 각각 적합한 메모리 영역이 사용됩니다.

    메모리 주요 역할 전원 차단 후 유지 키보드에서의 예시
    Flash 펌웨어 프로그램과 고정 데이터 저장 유지됨 QMK 코드, 키맵, 기능 모듈
    RAM 실행 중 필요한 임시 상태 저장 유지되지 않음 현재 눌린 키, 매트릭스 상태, 타이머 값
    EEPROM 사용자가 변경한 설정 저장 유지됨 기본 레이어, RGB 설정, 일부 사용자 옵션

    Flash에는 MCU가 실행할 펌웨어가 기록됩니다. 키보드에 새로운 펌웨어를 플래싱한다는 것은 일반적으로 이 Flash 영역의 프로그램을 교체하는 작업입니다. 펌웨어 용량이 MCU의 Flash 크기를 넘으면 빌드가 실패하거나 일부 기능을 제외해야 합니다.

    RAM은 키보드가 작동하는 동안 계속 바뀌는 데이터를 처리합니다. 현재 활성화된 레이어, 눌린 키 목록, 디바운스 상태, RGB 애니메이션 계산값, USB 전송 버퍼 등이 RAM을 사용할 수 있습니다. 전원이 꺼지면 이 내용은 사라지며, 다음 부팅 때 다시 초기화됩니다.

    EEPROM은 사용자가 변경한 설정을 전원 차단 후에도 유지할 때 사용됩니다. 다만 모든 MCU가 별도의 물리 EEPROM을 내장하는 것은 아닙니다. 일부 MCU나 펌웨어 환경에서는 Flash의 일부 영역을 EEPROM처럼 사용하는 에뮬레이션 방식이 사용될 수 있습니다.

    TIP. 펌웨어 용량이 부족할 때 사용하지 않는 RGB 효과, 오디오 기능, 콘솔 출력, 마우스 키, OLED 기능 등을 비활성화하면 Flash와 RAM 사용량을 줄일 수 있습니다. MCU 성능이 충분해도 저장 공간이 작으면 원하는 기능을 모두 넣기 어려울 수 있습니다.

    9. RGB, OLED, Encoder도 MCU가 처리한다

    MCU의 역할은 키 입력 처리에만 한정되지 않습니다. 최근 커스텀 키보드에는 RGB LED, OLED 화면, 로터리 Encoder, 터치 센서, 무선 통신 모듈처럼 다양한 부품이 추가됩니다. 이 장치들은 대부분 MCU와 직접 또는 간접적으로 통신하며, 펌웨어는 정해진 주기마다 각 장치의 상태를 읽거나 데이터를 출력합니다.

    RGB LED
    색상과 밝기를 계산하고 LED 배열에 데이터를 전송합니다. 복잡한 애니메이션은 연산량과 메모리 사용량을 늘릴 수 있습니다.
    “`
    OLED
    레이어, Caps Lock, 로고, 애니메이션 등을 화면 버퍼에 구성한 뒤 I²C 또는 SPI 방식으로 디스플레이에 전달합니다.
    Rotary Encoder
    두 신호의 변화 순서를 읽어 회전 방향을 판별합니다. 이후 볼륨 조절이나 스크롤 같은 Keycode를 실행합니다.
    무선 통신
    Bluetooth 또는 2.4GHz 모듈과 통신하고 연결 상태, 절전, 배터리 관리, 입력 전송을 처리합니다.
    “`

    기능이 많아질수록 MCU가 해야 할 일도 증가합니다. 그러나 단순히 클럭 속도가 높은 MCU를 사용한다고 모든 문제가 해결되는 것은 아닙니다. 펌웨어의 작업 순서, 인터럽트 처리, 통신 방식, 메모리 관리가 비효율적이면 키 스캔이 지연되거나 RGB 애니메이션이 끊길 수 있습니다.

    성능보다 중요한 것은 작업 배분이다
    키 입력 스캔은 짧고 일정한 주기로 반복되어야 합니다. OLED 화면을 한 번 갱신하는 데 너무 긴 시간이 걸리거나, RGB 효과 계산이 메인 루프를 오래 점유하면 입력 응답에 영향을 줄 수 있습니다. 좋은 펌웨어는 부가 기능이 핵심 입력 처리를 방해하지 않도록 구성됩니다.

    10. STM32와 RP2040이 키보드에 많이 사용되는 이유

    커스텀 키보드에서 자주 볼 수 있는 MCU 계열로는 STM32와 RP2040이 있습니다. 두 계열 모두 다양한 기능을 구현할 수 있지만, 내부 구조와 개발 환경, USB 구성, 메모리 용량, 보드 설계 방식에는 차이가 있습니다.

    비교 항목 STM32 RP2040
    제품 구성 성능과 주변장치가 다른 다양한 모델 존재 대표 칩 중심으로 비교적 통일된 구성
    CPU 구조 모델에 따라 Cortex-M0, M3, M4 등 다양 듀얼 코어 Cortex-M0+
    프로그램 저장 대체로 내부 Flash 사용 외부 QSPI Flash 사용
    키보드 장점 선택지가 많고 제품별 최적화 가능 넉넉한 자원과 편리한 부트로더 환경
    주의점 정확한 모델에 따라 사양 차이가 큼 외부 Flash와 전원 회로를 함께 설계해야 함

    STM32는 하나의 MCU가 아니라 매우 넓은 제품군입니다. 따라서 STM32라는 이름만 보고 성능을 단정하기 어렵습니다. 정확한 모델명과 Flash, RAM, GPIO 수, USB 지원 여부를 함께 확인해야 합니다.

    RP2040은 비교적 넉넉한 SRAM과 듀얼 코어, 유연한 PIO 기능을 갖추고 있으며, 부트셀 버튼을 활용한 파일 복사 방식의 펌웨어 기록이 편리한 편입니다. QMK 기반 키보드에서도 RP2040을 사용하는 컨트롤러와 PCB가 점차 보편적으로 활용되고 있습니다.

    어느 쪽이 무조건 더 좋을까? MCU 이름만으로 키보드의 입력 지연이나 완성도를 판단하기는 어렵습니다. PCB 회로, USB 설정, 스캔 방식, 디바운스 알고리즘, 펌웨어 최적화가 함께 작동하기 때문입니다. 필요한 기능을 안정적으로 처리할 수 있는지가 더 중요합니다.

    11. 좋은 키보드 MCU를 판단하는 기준

    키보드에 적합한 MCU는 단순히 클럭 속도가 가장 높은 제품이 아닙니다. 키 매트릭스 크기와 필요한 부가 기능을 충분히 지원하면서도 펌웨어 생태계와 부품 수급, 전력 소비, PCB 설계 난이도가 균형을 이루어야 합니다.

    확인해야 할 항목
    “`
    ① GPIO 수 키 매트릭스의 행과 열, RGB, Encoder, OLED, 상태 LED 등을 연결할 핀이 충분해야 합니다.
    ② Flash와 RAM 용량 VIA, VIAL, RGB Matrix, OLED, 매크로처럼 기능이 많아질수록 더 많은 저장 공간과 실행 메모리가 필요합니다.
    ③ USB 지원 하드웨어 USB 기능과 펌웨어 지원이 안정적이어야 HID 장치로 원활하게 동작할 수 있습니다.
    ④ 펌웨어 호환성 QMK에서 해당 MCU와 보드를 얼마나 안정적으로 지원하는지, 참고할 수 있는 기존 설계가 충분한지도 중요합니다.
    ⑤ 전력 소비 유선 키보드보다 배터리를 사용하는 무선 키보드에서 특히 중요합니다. 절전 모드와 웨이크업 기능도 확인해야 합니다.
    “`
    결국 MCU는 키보드 전체의 조정자다
    MCU는 스위치 신호를 읽고, 디바운스를 적용하고, 레이어와 Keycode를 해석하고, USB Report를 만든 뒤 컴퓨터로 전달합니다. 동시에 RGB, OLED, Encoder, 저장 설정까지 관리합니다. 우리가 키 하나를 누르는 짧은 순간에도 MCU 내부에서는 여러 단계가 빠르게 반복됩니다.

    자주 묻는 질문

    MCU가 빠르면 키보드 입력도 무조건 빨라질까?
    그렇지는 않습니다. MCU 성능은 중요한 요소지만 매트릭스 스캔 주기, 디바운스 방식, USB Polling 설정, 펌웨어 구조도 함께 영향을 줍니다. 충분한 성능의 MCU에서는 펌웨어 최적화 차이가 더 크게 나타날 수 있습니다.
    “`
    MCU가 고장 나면 스위치만 교체해도 해결될까?
    MCU 자체나 주변 전원·USB 회로가 손상됐다면 스위치 교체만으로 해결되지 않습니다. 전체 키가 작동하지 않거나 USB 인식이 되지 않는다면 MCU, USB 커넥터, 전원 회로, 펌웨어 상태를 함께 확인해야 합니다.
    VIA에서 바꾼 키맵도 MCU에 저장될까?
    VIA를 지원하는 펌웨어에서는 변경된 키맵이나 설정이 MCU의 비휘발성 저장 영역에 기록될 수 있습니다. 구체적인 저장 방식과 범위는 보드의 MCU, QMK 설정, EEPROM 구현에 따라 달라질 수 있습니다.
    무선 키보드에도 MCU가 들어갈까?
    들어갑니다. 무선 키보드의 MCU 또는 무선 SoC는 키 스캔뿐 아니라 Bluetooth 연결, 배터리 상태, 절전 모드, 무선 패킷 전송까지 처리합니다. 제품에 따라 키보드 제어용 MCU와 무선 통신 칩이 분리되기도 합니다.
    키보드마다 펌웨어 파일이 다른 이유는 무엇일까?
    MCU 종류, 핀 연결, 매트릭스 배열, LED 구성, 부트로더, USB 설정이 보드마다 다르기 때문입니다. 외형이 비슷한 키보드라도 다른 보드용 펌웨어를 기록하면 정상 작동하지 않을 수 있습니다.
    “`

    함께 보면 좋은 글

    공식 자료

    Sources

    • QMK Firmware Documentation, Understanding QMK
    • QMK Firmware Documentation, How a Keyboard Matrix Works
    • QMK Firmware Documentation, Quantum Keycodes
    • Raspberry Pi Documentation, RP2040 Microcontroller
    • STMicroelectronics, STM32 32-bit Arm Cortex MCU Documentation
    • USB Implementers Forum, Human Interface Device Class Specifications
    LINK&TEM SUMMARY
    MCU는 키보드의 스위치 신호를 읽고 Keycode와 USB 데이터로 변환하며, 메모리와 RGB·OLED·Encoder 같은 부가 기능까지 통합 관리하는 핵심 제어 장치입니다.
  • EEPROM 역할 완벽 이해: 키보드는 설정을 어떻게 기억할까?

    EEPROM 역할 완벽 이해: 키보드는 설정을 어떻게 기억할까?

    LINK&TEM GUIDE

    EEPROM 역할

    키보드 설정이 전원을 꺼도 유지되는 원리와 QMK 저장 구조

    📌 핵심 요약
    • EEPROM은 전원이 꺼져도 저장된 데이터가 사라지지 않는 비휘발성 메모리입니다.
    • QMK 키보드에서는 기본 레이어, RGB 설정, 오디오 설정, VIA 키맵과 같은 값을 보존하는 데 사용됩니다.
    • 펌웨어가 저장되는 Flash와 사용 중 설정이 저장되는 EEPROM은 목적이 다릅니다.
    • STM32와 RP2040처럼 내부 EEPROM이 없는 MCU에서는 Flash 일부를 EEPROM처럼 사용할 수 있습니다.
    • EEPROM 초기화는 저장 설정을 기본값으로 되돌리는 작업이며 펌웨어 전체를 삭제하는 것과는 다릅니다.

    키보드의 USB 케이블을 뽑았다가 다시 연결해도 RGB 밝기와 기본 레이어, VIA에서 바꾼 키 배열이 그대로 남아 있는 경우가 많습니다. 컴퓨터를 바꾸어 연결해도 같은 설정이 유지되기도 합니다. 이런 동작을 가능하게 만드는 핵심 요소가 바로 EEPROM입니다.

    EEPROM은 키 입력을 직접 감지하거나 USB 신호를 전송하는 부품이 아닙니다. 키보드가 사용 중에 변경한 설정을 기억해 두었다가 다음 부팅에서 다시 불러올 수 있도록 돕는 저장 공간입니다. 쉽게 말하면 MCU가 키보드의 두뇌라면 EEPROM은 사용자가 바꾼 설정을 기록해 두는 작은 메모장에 가깝습니다.

    다만 모든 키보드에 별도의 EEPROM 칩이 달려 있는 것은 아닙니다. AVR 계열 MCU처럼 칩 내부에 전용 EEPROM을 포함한 경우도 있고, STM32나 RP2040처럼 내부 Flash의 일부를 EEPROM처럼 사용하는 경우도 있습니다. 따라서 키보드 설명에서 말하는 EEPROM은 반드시 하나의 물리적인 부품만을 의미하지 않으며, QMK가 영구 설정을 저장하는 비휘발성 저장 영역 전체를 가리키는 표현으로 사용되기도 합니다.


    1. EEPROM은 무엇을 하는 메모리일까?

    EEPROM은 Electrically Erasable Programmable Read-Only Memory의 약자입니다. 이름 그대로 전기적인 방식으로 데이터를 지우고 다시 기록할 수 있으며, 전원 공급이 중단되어도 저장된 값이 유지되는 비휘발성 메모리입니다.

    RAM도 데이터를 저장하지만 전원이 끊기면 내용이 사라집니다. 반면 EEPROM에 기록된 값은 키보드의 전원을 끄거나 USB 케이블을 분리해도 남아 있습니다. 그래서 부팅할 때마다 다시 계산하거나 사용자가 매번 설정하기 어려운 값을 보관하는 데 적합합니다.

    키보드가 켜지면 MCU는 먼저 펌웨어를 실행하고, 초기화 과정에서 EEPROM에 저장된 설정을 읽습니다. 저장된 기본 레이어가 있다면 그 레이어를 활성화하고, RGB 밝기와 효과가 기록되어 있다면 해당 값을 LED 기능에 전달합니다. VIA를 지원하는 키보드라면 EEPROM에 저장된 동적 키맵을 읽어 실제 키 배열로 사용하기도 합니다.

    💡 쉽게 말하면

    펌웨어는 키보드가 어떻게 작동해야 하는지를 담은 프로그램이고, EEPROM은 사용자가 마지막으로 선택한 설정을 기록하는 공간입니다. 펌웨어가 같은 키보드라도 EEPROM 값에 따라 기본 레이어와 조명 상태가 달라질 수 있습니다.

    EEPROM의 저장 용량은 일반적인 저장장치에 비하면 매우 작습니다. 하지만 키보드 설정은 대부분 몇 바이트에서 수백 바이트 정도의 작은 데이터로 표현할 수 있으므로 대용량 공간이 필요하지 않습니다. 레이어 번호, 밝기 단계, 색상 값, 기능 활성화 여부처럼 숫자로 표현되는 정보는 작은 공간에도 충분히 저장할 수 있습니다.

    2. 키보드에서 EEPROM이 필요한 이유

    키보드가 모든 설정을 펌웨어에만 저장한다면 값을 바꿀 때마다 새로운 펌웨어를 컴파일하고 MCU에 다시 플래시해야 합니다. 기본 키 하나를 변경하거나 RGB 밝기를 조정하는 단순한 작업에도 펌웨어 전체를 다시 기록해야 하므로 사용성이 크게 떨어집니다.

    EEPROM을 사용하면 실행 중인 펌웨어가 작은 설정 값만 별도로 수정할 수 있습니다. 예를 들어 VIA에서 Caps Lock을 Ctrl로 바꾸면 펌웨어 프로그램 전체를 교체하지 않고 해당 키 위치의 Keycode 값만 저장 영역에 기록할 수 있습니다. 이후 키보드를 다시 연결하면 펌웨어가 이 값을 읽어 변경된 키맵을 그대로 적용합니다.

    EEPROM에 저장될 수 있는 대표 설정
    • 부팅 직후 사용할 기본 레이어
    • VIA 또는 동적 키맵 기능으로 수정한 Keycode
    • RGB 조명 모드, 색상, 밝기와 속도
    • 백라이트 밝기와 활성화 상태
    • 오디오 기능의 활성화 여부와 일부 음향 설정
    • 디버그 기능이나 키보드별 사용자 설정
    • 분할 키보드의 좌우 판별 정보처럼 지속적으로 유지해야 하는 값

    정확히 어떤 항목이 저장되는지는 키보드 펌웨어 구성에 따라 달라집니다. 모든 QMK 키보드가 위 설정을 전부 사용하는 것은 아니며, 기능이 비활성화되어 있으면 해당 데이터 영역도 사용되지 않을 수 있습니다. 제조사가 자체 펌웨어를 추가한 제품이라면 배터리 표시 방식이나 무선 모드와 관련된 설정이 별도로 저장되기도 합니다.

    Link&Tem Insight

    EEPROM은 키 입력 자체를 저장하는 공간이 아닙니다. 일반적인 키 입력은 매트릭스 스캔 결과에 따라 실시간으로 처리되고 USB 또는 Bluetooth HID 보고서로 전달됩니다. EEPROM에는 이 과정에서 참조할 설정값이 저장됩니다. 따라서 EEPROM 속도가 키보드의 Polling Rate나 Scan Rate를 직접 결정하는 것은 아닙니다.

    3. Flash·RAM·EEPROM은 무엇이 다를까?

    키보드 MCU 내부에는 역할이 다른 여러 메모리 영역이 존재합니다. 이 가운데 Flash, RAM, EEPROM은 자주 함께 언급되지만 저장 목적과 데이터 유지 방식이 서로 다릅니다.

    Flash에는 일반적으로 QMK 펌웨어의 실행 코드와 컴파일된 기본 키맵이 들어갑니다. RAM은 펌웨어가 실행되는 동안 레이어 상태, 현재 눌린 키, 타이머와 버퍼 같은 임시 데이터를 보관합니다. EEPROM은 전원이 꺼져도 유지해야 하는 소규모 설정을 저장합니다.

    구분 주요 역할 전원 차단 후
    Flash 펌웨어 코드와 기본 키맵 저장 유지
    RAM 실행 중 상태와 임시 데이터 저장 소멸
    EEPROM 변경된 설정과 영구 상태 저장 유지

    세 메모리의 차이를 이해하면 펌웨어를 다시 올렸는데도 설정이 바뀌지 않는 현상을 설명할 수 있습니다. 새로운 펌웨어는 Flash에 기록되지만 기존 EEPROM 데이터가 그대로 남아 있으면 펌웨어가 부팅하면서 이전 설정을 다시 불러올 수 있기 때문입니다.

    반대로 EEPROM만 초기화하면 저장 설정은 기본값으로 돌아가지만 Flash의 펌웨어 프로그램은 그대로 남습니다. 키보드가 지원하는 기능과 코드가 삭제되는 것이 아니라, 펌웨어가 참조하던 사용자 설정 데이터가 다시 초기 상태로 만들어지는 것입니다.

    ⚠ 자주 혼동하는 부분

    펌웨어 플래시와 EEPROM 초기화는 같은 작업이 아닙니다. 펌웨어 플래시는 실행 프로그램을 교체하는 과정이고, EEPROM 초기화는 저장된 설정을 기본값으로 되돌리는 과정입니다. 일부 도구에서는 두 작업을 함께 수행할 수 있어 동일한 기능처럼 보일 수 있습니다.

    4. QMK는 EEPROM을 어떻게 사용할까?

    QMK는 부팅 과정에서 EEPROM 설정이 정상적으로 초기화되어 있는지 확인합니다. 유효한 데이터가 없거나 초기화 표시가 올바르지 않다면 기본 설정을 기록하고, 이미 정상적인 데이터가 존재하면 그 값을 읽어 기능별 상태를 복원합니다.

    QMK의 지속 설정 구조에서는 기본 레이어, 키보드 설정, 사용자 설정, RGB와 백라이트 같은 기능이 각자 필요한 데이터를 저장할 수 있습니다. 개발자는 QMK가 제공하는 함수를 이용해 설정값을 읽고 기록할 수 있으며, 키보드별 사용자 데이터 영역을 별도로 구성하는 것도 가능합니다.

    여기서 중요한 점은 현재 활성화된 레이어와 기본 레이어가 다르다는 것입니다. Fn 키를 누르는 동안 잠시 활성화되는 레이어는 일반적으로 RAM의 실시간 상태로 관리됩니다. Fn 키를 놓거나 키보드를 재부팅하면 해제됩니다. 반면 기본 레이어를 영구적으로 변경하는 기능은 선택한 값을 EEPROM에 기록할 수 있어 재부팅 후에도 유지됩니다.

    Link&Tem Insight

    QMK의 레이어 배열 전체가 항상 EEPROM에 저장되는 것은 아닙니다. 일반적인 정적 키맵은 컴파일되어 Flash에 들어갑니다. EEPROM에는 영구 기본 레이어 번호처럼 작은 상태값이 저장될 수 있으며, VIA 또는 Dynamic Keymap이 활성화된 키보드에서는 수정 가능한 키맵 데이터가 EEPROM이나 이에 대응하는 비휘발성 저장 영역에 별도로 기록됩니다.

    이 차이 때문에 일반 QMK 키맵과 VIA 키맵의 변경 방식도 달라집니다. 일반 키맵은 소스 코드의 keymap.c를 수정한 뒤 새 펌웨어를 빌드하고 Flash에 기록합니다. VIA는 실행 중 키맵 데이터를 수정하고 이를 비휘발성 저장 영역에 기록하므로 다시 컴파일하지 않아도 배열을 바꿀 수 있습니다.

    5. VIA 설정이 펌웨어를 다시 올려도 남는 이유

    VIA를 지원하는 QMK 키보드에서는 처음 실행될 때 Flash에 포함된 기본 키맵이 동적 키맵 저장 영역으로 복사될 수 있습니다. 이후 VIA에서 키를 변경하면 수정된 Keycode가 해당 저장 영역에 기록되고, QMK는 부팅할 때 Flash의 기본 키맵보다 저장된 동적 키맵을 우선 사용합니다.

    따라서 소스 코드에서 키맵을 바꾸고 펌웨어를 새로 플래시했는데도 실제 배열이 이전 VIA 설정으로 작동하는 현상이 생길 수 있습니다. Flash에는 새 키맵이 들어갔지만 EEPROM에 남은 동적 키맵이 계속 우선 적용되기 때문입니다.

    새 펌웨어의 키맵이 반영되지 않을 때
    1. 키보드가 VIA 또는 Dynamic Keymap을 사용하는지 확인합니다.
    2. 기존 VIA 키맵이 비휘발성 저장 영역에 남아 있는지 확인합니다.
    3. 필요한 설정을 백업하거나 기존 배열을 기록해 둡니다.
    4. QMK가 제공하는 EEPROM 초기화 기능을 실행합니다.
    5. 재부팅 후 펌웨어의 기본 키맵이 다시 적용되는지 확인합니다.

    이 현상은 펌웨어 플래시 실패나 MCU 고장으로 오해하기 쉽습니다. 그러나 키보드가 정상적으로 연결되고 일부 기능도 제대로 작동한다면 기존 EEPROM 설정이 새 기본값을 덮어쓰는 상황인지 먼저 살펴보는 것이 좋습니다.

    💡 TIP

    EEPROM을 초기화하면 VIA 키맵, 기본 레이어, RGB 설정 등 여러 사용자 설정이 함께 초기화될 수 있습니다. 문제 해결을 위해 초기화하기 전에는 현재 키 배열과 조명 값을 화면 캡처나 메모로 남겨 두는 것이 안전합니다.

    6. EEPROM 초기화가 필요한 상황

    EEPROM 초기화는 키보드를 사용할 때마다 해야 하는 정기 관리 작업이 아닙니다. 저장된 값이 현재 펌웨어와 충돌하거나 잘못된 설정 때문에 정상 동작이 어려울 때 선택적으로 사용합니다.

    대표적인 사례는 펌웨어 업데이트 후 키 배열이 예상과 다르게 작동하는 경우입니다. 이전 버전에서 사용하던 설정 구조와 새 펌웨어의 기본값이 달라졌는데 기존 데이터가 남아 있다면 일부 기능이 비정상적으로 보일 수 있습니다. RGB 모드가 바뀌지 않거나 기본 레이어가 계속 이전 배열로 시작하는 상황에서도 EEPROM 값을 확인할 필요가 있습니다.

    초기화를 고려할 수 있는 상황
    • 새 펌웨어를 올렸는데 이전 VIA 키맵이 계속 적용될 때
    • 기본 레이어를 변경한 뒤 원래 배열로 돌아오지 않을 때
    • RGB 또는 백라이트 설정이 비정상적으로 저장될 때
    • 펌웨어 기능을 변경한 뒤 이전 설정과 충돌하는 것으로 보일 때
    • 중고 키보드에 이전 사용자의 설정이 남아 있을 때
    • 공식 문제 해결 문서에서 EEPROM 초기화를 안내할 때

    QMK에서는 키맵에 배치할 수 있는 EEPROM 초기화용 Keycode와 Bootmagic 기능, 펌웨어 내부 함수 등을 통해 저장 설정을 재초기화할 수 있습니다. 구체적인 방법은 키보드 제조사가 제공한 펌웨어와 부트로더 구성에 따라 달라질 수 있으므로 무작정 특정 키 조합을 따라 하기보다는 해당 키보드의 공식 설명서를 먼저 확인하는 것이 좋습니다.

    Part 1 정리

    EEPROM은 키보드 펌웨어 자체를 실행하는 공간이 아니라 전원이 꺼져도 유지해야 하는 설정을 저장하는 비휘발성 영역입니다. QMK에서는 기본 레이어, 조명 상태, VIA 동적 키맵과 사용자 설정을 보존하는 데 활용됩니다. 다음 내용에서는 EEPROM의 쓰기 수명, Wear Leveling 구조, AVR·STM32·RP2040의 저장 방식 차이와 초기화 시 주의사항을 이어서 살펴보겠습니다.

    7. EEPROM에는 왜 계속 기록하면 안 될까?

    EEPROM은 전원이 꺼져도 데이터를 유지할 수 있지만, 무제한으로 기록할 수 있는 저장공간은 아닙니다. 메모리 셀에 전기적인 방식으로 값을 쓰고 지우는 구조이기 때문에, 같은 위치에 반복적으로 기록하면 셀이 조금씩 마모될 수 있습니다.

    이 때문에 키보드 펌웨어는 키를 누를 때마다 EEPROM에 데이터를 저장하지 않습니다. 일반적인 키 입력은 RAM에서 처리되고, 키맵이나 RGB 설정처럼 전원을 껐다 켠 뒤에도 남아야 하는 값이 변경되었을 때만 EEPROM 기록이 발생합니다.

    💡 핵심 포인트

    키보드를 사용할 때 발생하는 수많은 키 입력이 모두 EEPROM에 기록되는 것은 아닙니다. EEPROM에는 주로 사용자가 변경한 설정값과 장기적으로 유지해야 하는 상태만 저장됩니다.

    예를 들어 VIA에서 하나의 키 기능을 변경하면 변경된 키맵 데이터가 영구 저장공간에 반영될 수 있습니다. 반면 문서를 작성하면서 수천 번 키를 입력하더라도, 그 입력 기록 자체는 EEPROM에 저장되지 않습니다.

    동작 일반적인 처리 위치 EEPROM 기록 가능성
    일반 키 입력 RAM과 MCU 내부 처리 거의 없음
    VIA 키맵 변경 RAM 반영 후 영구 저장 발생 가능
    RGB 모드 변경 설정 방식에 따라 다름 저장 기능 사용 시 발생
    레이어를 누르고 있는 상태 RAM의 현재 상태 일반적으로 없음

    8. Write Endurance와 수명은 무엇을 의미할까?

    EEPROM 사양에서 자주 등장하는 용어가 Write Endurance입니다. 이는 특정 메모리 위치에 데이터를 안정적으로 다시 기록할 수 있도록 설계된 반복 횟수를 의미합니다.

    중요한 점은 EEPROM 전체가 한 번 기록될 때마다 수명이 하나씩 줄어드는 방식은 아니라는 것입니다. 일반적으로는 실제로 기록이 일어난 메모리 셀과 주소 영역의 반복 횟수가 중요합니다. 따라서 같은 주소에 매우 짧은 간격으로 계속 값을 덮어쓰는 구조가 가장 부담을 줄 수 있습니다.

    ⚠️ 숫자만 보고 걱정할 필요는 없습니다

    정상적인 키보드 사용에서는 설정값을 매초 반복 저장하지 않습니다. VIA 키맵을 가끔 수정하거나 RGB 설정을 변경하는 정도로 EEPROM 수명이 빠르게 끝날 가능성은 매우 낮습니다.

    문제가 될 수 있는 것은 사용자가 직접 펌웨어 코드를 작성하면서 메인 반복문이나 키 스캔 루프 안에 EEPROM 쓰기 함수를 넣는 경우입니다. 키보드의 스캔 루프는 매우 빠르게 반복되므로, 조건 없이 기록 함수가 실행되면 짧은 시간에 같은 영역을 과도하게 덮어쓸 수 있습니다.

    EEPROM 기록 코드에서 확인할 점
    • 값이 실제로 변경되었을 때만 기록하는가?
    • 키 스캔 루프마다 쓰기 함수가 실행되지는 않는가?
    • 짧은 시간에 같은 주소를 반복해서 덮어쓰지는 않는가?
    • 펌웨어가 제공하는 저장 API와 드라이버를 사용하고 있는가?

    9. Wear Leveling은 왜 필요할까?

    Wear Leveling은 특정 메모리 위치에 기록이 집중되지 않도록 저장 위치를 분산하는 방식입니다. 같은 주소만 계속 덮어쓰는 대신 여러 영역을 순차적으로 활용해 플래시 메모리의 마모를 분산합니다.

    특히 물리적인 EEPROM이 없는 MCU에서는 내부 플래시 메모리 일부를 EEPROM처럼 사용하는 경우가 있습니다. 하지만 플래시 메모리는 일반 EEPROM과 지우기 단위나 기록 방식이 다르기 때문에, 단순히 특정 주소 하나를 계속 덮어쓰는 방식은 효율적이지 않을 수 있습니다.

    이때 펌웨어의 EEPROM 드라이버가 데이터를 여러 위치에 분산하거나, 유효한 최신 데이터를 구분하는 관리 구조를 사용할 수 있습니다. 사용자는 동일하게 EEPROM API를 호출하지만, 실제 하드웨어에서는 MCU와 드라이버에 따라 서로 다른 저장 방식이 작동하는 것입니다.

    🔍 Link&Tem Insight

    QMK에서 말하는 EEPROM은 항상 독립된 물리 EEPROM 칩만을 의미하지 않습니다. 개발자가 사용하는 공통 저장 인터페이스에 가까우며, 실제 저장 장치는 MCU 내부 EEPROM, 외부 EEPROM, 플래시 기반 에뮬레이션 등으로 달라질 수 있습니다.

    10. AVR, STM32, RP2040의 저장 방식 차이

    키보드에 사용되는 MCU가 달라지면 EEPROM을 구현하는 방식도 달라질 수 있습니다. 대표적으로 일부 AVR MCU는 칩 내부에 실제 EEPROM 영역을 포함하지만, STM32나 RP2040 기반 키보드는 선택한 MCU와 보드 구성에 따라 플래시 또는 외부 저장장치를 이용할 수 있습니다.

    구분 일반적인 저장 형태 특징
    AVR MCU 내부 EEPROM 프로그램 플래시와 분리된 EEPROM 영역을 가진 MCU가 많이 사용됩니다.
    STM32 플래시 에뮬레이션 또는 외부 EEPROM 정확한 방식은 MCU 모델과 키보드 설계, QMK 드라이버 설정에 따라 달라집니다.
    RP2040 외부 플래시 일부 또는 별도 저장장치 보드의 플래시 구성과 펌웨어 드라이버를 통해 영구 저장공간을 구현합니다.

    따라서 “이 키보드에는 EEPROM이 있다”라는 표현은 두 가지 의미로 사용될 수 있습니다. 실제 EEPROM 하드웨어가 탑재되어 있다는 의미일 수도 있고, 펌웨어에서 EEPROM처럼 사용할 수 있는 영구 저장공간이 제공된다는 의미일 수도 있습니다.

    일반 사용자는 두 구현 방식을 구분하지 않아도 키맵 저장과 설정 유지 기능을 사용할 수 있습니다. 하지만 직접 PCB를 설계하거나 QMK를 포팅하는 개발자라면 MCU가 지원하는 저장 방식과 적절한 EEPROM 드라이버를 확인해야 합니다.

    11. EEPROM 초기화 후에는 무슨 일이 일어날까?

    EEPROM을 초기화하면 키보드의 펌웨어 자체가 삭제되는 것이 아니라, 영구 저장공간에 기록되어 있던 사용자 설정이 기본값으로 돌아갑니다.

    VIA를 지원하는 QMK 키보드는 처음 실행될 때 펌웨어 플래시에 포함된 기본 키맵을 영구 저장공간으로 복사한 뒤, 이후에는 VIA에서 변경된 키맵을 사용할 수 있습니다. 이 상태에서 새 펌웨어를 올려도 EEPROM에 기존 VIA 키맵이 남아 있다면, 새로 작성한 기본 키맵이 바로 적용되지 않는 것처럼 보일 수 있습니다.

    이때 EEPROM을 초기화하면 기존에 저장된 VIA 키맵과 설정값이 지워지고, 펌웨어가 가진 기본 설정을 다시 사용할 수 있습니다.

    초기화 전 확인하세요

    EEPROM 초기화는 저장된 키맵, RGB 설정, 기본 레이어 상태 등 일부 사용자 설정을 함께 지울 수 있습니다. 현재 키맵을 다시 구성하기 어렵다면 VIA 설정을 미리 기록해두는 것이 좋습니다.

    QMK에서는 키보드에 설정된 초기화 키 조합, Bootmagic 기능, EE_CLR 키코드 또는 펌웨어의 초기화 함수 등을 이용해 영구 저장공간을 재설정할 수 있습니다. 정확한 방법은 키보드 제조사와 펌웨어 구성에 따라 다를 수 있습니다.

    12. EEPROM에 대한 흔한 오해

    오해 1. 모든 키 입력이 EEPROM에 저장된다
    일반 키 입력은 MCU와 RAM에서 실시간으로 처리됩니다. EEPROM에는 장기간 유지해야 하는 설정값이 주로 저장됩니다.
    오해 2. 펌웨어를 업데이트하면 EEPROM도 항상 지워진다
    일반적인 펌웨어 기록 과정에서는 영구 설정이 그대로 남을 수 있습니다. 이 때문에 새 키맵이 적용되지 않는 것처럼 보이기도 합니다.
    오해 3. EEPROM을 초기화하면 키보드가 고장 난다
    EEPROM 초기화는 저장된 설정을 기본값으로 되돌리는 작업입니다. 정상적인 초기화 방법을 사용하면 펌웨어 자체가 삭제되는 것은 아닙니다.
    오해 4. 모든 MCU에는 물리 EEPROM이 있다
    MCU에 따라 실제 EEPROM이 없을 수 있습니다. 이 경우 플래시 에뮬레이션이나 외부 EEPROM을 이용해 영구 저장 기능을 구현합니다.

    13. 자주 묻는 질문

    Q. VIA에서 변경한 키맵은 어디에 저장되나요?
    VIA 호환 QMK 키보드에서는 변경된 키맵이 키보드의 영구 저장공간에 기록될 수 있습니다. 따라서 PC를 바꾸거나 키보드 전원을 껐다 켜도 설정이 유지됩니다.
    Q. 키맵을 자주 바꾸면 EEPROM이 금방 고장 나나요?
    일반적인 사용 빈도로 키맵을 변경하는 것은 크게 걱정하지 않아도 됩니다. 문제가 되는 상황은 펌웨어 코드가 같은 영역에 매우 짧은 간격으로 반복 기록하도록 만들어졌을 때입니다.
    Q. 펌웨어를 새로 올렸는데 예전 키맵이 남아 있는 이유는 무엇인가요?
    VIA가 저장한 키맵이 EEPROM에 남아 있기 때문일 수 있습니다. 펌웨어의 기본 키맵으로 돌아가려면 키보드에 맞는 방법으로 EEPROM 초기화를 진행해야 할 수 있습니다.
    Q. EEPROM을 초기화하면 VIA를 다시 설치해야 하나요?
    VIA 프로그램이나 웹사이트를 다시 설치할 필요는 없습니다. 다만 키보드에 저장되어 있던 사용자 키맵과 설정을 다시 구성해야 할 수 있습니다.
    Q. RP2040 키보드에도 EEPROM이 있나요?
    RP2040 자체의 저장 구조는 AVR의 내장 EEPROM과 다릅니다. 키보드 설계와 QMK 드라이버에 따라 외부 플래시 일부나 별도의 저장장치를 EEPROM처럼 사용할 수 있습니다.

    📚 함께 보면 좋은 글

    EEPROM의 역할을 이해했다면 펌웨어, Keycode, MCU가 서로 어떻게 연결되는지도 함께 살펴보는 것이 좋습니다. 아래 글을 이어서 읽으면 키보드가 입력과 설정을 처리하는 전체 구조를 더 쉽게 이해할 수 있습니다.

    🔗 공식 자료

    Sources

    • QMK Firmware, Persistent Configuration (EEPROM) 문서.
    • QMK Firmware, EEPROM Driver Configuration 문서.
    • QMK Firmware, Keymap FAQ의 VIA 키맵과 EEPROM 초기화 안내.
    • QMK Firmware, Persistent Storage 초기화 관련 Core Functions 문서.
    • QMK Firmware, RP2040 플랫폼 개발 문서.
    Link&Tem 한 줄 정리

    EEPROM은 키보드가 전원을 잃어도 키맵과 설정을 기억하게 해주는 영구 저장공간이며, 실제 구현 방식은 MCU와 펌웨어 드라이버에 따라 달라집니다.

  • Keycode는 어떻게 인식될까? QMK 키 입력 처리 구조 완벽 이해

    Keycode는 어떻게 인식될까? QMK 키 입력 처리 구조 완벽 이해

    LINK&TEM GUIDE

    Keycode는 어떻게 인식될까?

    물리 키 위치가 QMK 키코드와 USB HID 입력으로 바뀌는 과정

    📌 핵심 요약
    • 키보드는 키캡에 적힌 문자보다 먼저 스위치가 연결된 행과 열 위치를 감지합니다.
    • QMK는 감지된 매트릭스 좌표를 현재 활성화된 레이어의 Keycode로 변환합니다.
    • KC_A 같은 기본 Keycode는 일반적으로 USB HID Usage ID와 연결됩니다.
    • 레이어 전환, Mod-Tap, 매크로처럼 복합 기능을 가진 Keycode는 QMK 내부에서 추가 처리를 거칩니다.
    • 최종적으로 만들어진 HID 리포트를 운영체제가 해석해 문자 입력이나 단축키 동작을 실행합니다.

    키보드에서 A 키를 누르면 컴퓨터 화면에 곧바로 알파벳 A가 나타나는 것처럼 보입니다. 하지만 키보드 내부에서는 스위치가 눌린 순간부터 운영체제가 문자를 표시하기까지 여러 단계의 변환이 일어납니다. 그 중심에 있는 값이 바로 Keycode입니다.

    Keycode는 단순히 특정 문자를 의미하는 이름이 아닙니다. 펌웨어가 감지한 물리적인 키 위치에 어떤 기능을 부여할지 결정하는 숫자 값에 가깝습니다. 같은 스위치라도 기본 레이어에서는 A가 될 수 있고, Fn 레이어에서는 볼륨 조절이나 방향키가 될 수 있습니다. 따라서 키보드가 인식하는 것은 처음부터 문자가 아니라 매트릭스 좌표와 그 좌표에 배정된 기능 값입니다.

    특히 QMK Firmware에서는 기본 문자 키뿐 아니라 레이어 전환, Ctrl 조합, Tap-Hold, 매크로, 마우스 이동, 미디어 제어까지 다양한 동작을 Keycode 형태로 관리합니다. 이번 글에서는 스위치가 눌린 뒤 Keycode가 선택되고, QMK 내부 처리 과정을 거쳐 USB HID 리포트로 전달되는 흐름을 순서대로 살펴보겠습니다.


    1. Keycode는 키캡에 적힌 문자가 아니다

    Keycode를 이해할 때 가장 먼저 구분해야 하는 것은 물리 키, Keycode, 실제 입력 문자가 서로 다른 개념이라는 점입니다. 키캡에 A가 인쇄되어 있어도 키보드 회로와 펌웨어가 그 글자를 직접 읽는 것은 아닙니다.

    스위치를 누르면 전기적으로 특정 행과 열이 연결됩니다. MCU는 키보드 매트릭스를 반복해서 스캔하면서 이전 상태와 현재 상태가 달라진 지점을 찾습니다. 예를 들어 2번 행과 4번 열의 스위치가 새롭게 연결되었다면 펌웨어는 먼저 “2행 4열 키가 눌렸다”라는 사실을 알아냅니다.

    그다음 QMK는 현재 활성화된 레이어의 키맵에서 해당 좌표를 조회합니다. 2행 4열에 KC_A가 저장되어 있다면 그제야 이 물리 입력은 KC_A라는 Keycode로 변환됩니다. 같은 좌표에 KC_LEFT가 배치되어 있다면 방향키 왼쪽으로 처리되고, MO(1)가 배치되어 있다면 레이어를 일시적으로 활성화하는 키가 됩니다.

    구분 의미 예시
    물리 키 PCB에서 스위치가 연결된 실제 위치 2행 4열
    Keycode 펌웨어가 해당 위치에 배정한 기능 값 KC_A
    HID Usage 호스트로 전달되는 표준 입력 식별 값 Keyboard a and A
    출력 문자 운영체제의 언어 배열이 최종적으로 만든 결과 a, A 또는 다른 문자
    💡 TIP

    특정 키가 예상과 다른 문자를 입력한다고 해서 항상 스위치나 PCB 문제인 것은 아닙니다. 키맵의 Keycode 배정과 운영체제의 키보드 언어 배열을 먼저 확인하는 것이 좋습니다.
    Link&Tem Insight

    QMK의 언어별 Keycode 별칭은 운영체제의 언어 설정을 직접 변경하지 않습니다. 예를 들어 특정 국가 배열을 위한 별칭을 사용해도 실제 출력 문자는 호스트 운영체제에 선택된 키보드 레이아웃에 따라 결정됩니다. Keycode는 문자 자체보다 키보드 위치와 기능을 전달하는 식별자에 가깝습니다.

    2. 키를 누르면 먼저 매트릭스 좌표가 발견된다

    대부분의 기계식 키보드는 각 스위치를 MCU 핀에 하나씩 직접 연결하지 않고 행과 열로 구성된 매트릭스를 사용합니다. 예를 들어 5개의 행과 15개의 열을 조합하면 비교적 적은 수의 MCU 핀으로 많은 스위치를 검사할 수 있습니다.

    MCU는 한쪽 라인을 순서대로 활성화하고 반대쪽 라인의 전기 상태를 읽는 방식으로 전체 키를 스캔합니다. 특정 행을 활성화했을 때 특정 열에서 신호 변화가 감지되면 그 교차점에 있는 스위치가 눌린 것으로 판단합니다. 이때 얻는 정보는 아직 KC_A나 KC_ENTER가 아니라 행 번호와 열 번호입니다.

    스위치는 접점이 맞닿는 순간 짧은 시간 동안 신호가 여러 번 흔들릴 수 있습니다. 펌웨어는 디바운스 처리를 통해 이 흔들림을 하나의 정상적인 입력으로 정리합니다. 안정된 상태 변화가 확인되면 QMK는 해당 좌표의 키 이벤트를 생성하며, 눌림과 떼어짐을 각각 구분합니다.

    스위치 입력이 Keycode로 바뀌기 전 단계
    1. MCU가 매트릭스의 행과 열을 반복해서 스캔합니다.
    2. 이전 스캔과 현재 스캔의 상태를 비교합니다.
    3. 디바운스 처리를 거쳐 실제 눌림인지 판단합니다.
    4. 변화가 발생한 행과 열 좌표를 확인합니다.
    5. 눌림 또는 떼어짐 상태가 포함된 키 이벤트를 생성합니다.
    6. 활성 레이어의 키맵에서 해당 좌표의 Keycode를 조회합니다.

    이 구조 덕분에 물리 키의 위치와 기능을 분리할 수 있습니다. PCB의 스위치 위치는 그대로 두고 펌웨어의 키맵만 변경해도 완전히 다른 배열을 만들 수 있는 이유입니다. QWERTY 배열을 Colemak이나 Dvorak으로 바꾸거나, Caps Lock 위치에 Ctrl을 배치하는 것도 같은 원리입니다.

    3. QMK는 활성 레이어에서 Keycode를 찾는다

    매트릭스 좌표가 확인되면 QMK는 keymaps 배열에서 해당 위치의 값을 조회합니다. QMK 키맵은 일반적으로 레이어, 행, 열로 구성된 다차원 구조를 사용하며 각 위치에는 16비트 형태의 액션 코드가 저장됩니다.

    기본 레이어가 활성화된 상태에서 A 위치를 누르면 Layer 0의 해당 좌표를 확인합니다. 그러나 Fn 키로 Layer 1이 활성화되어 있다면 같은 물리 위치에서도 Layer 1의 값을 먼저 확인합니다. Layer 1에 KC_F1이 배치되어 있다면 A가 아니라 F1 기능으로 처리됩니다.

    상위 레이어의 해당 위치가 KC_TRNS로 설정되어 있으면 QMK는 그 키를 투명한 위치로 판단합니다. 즉 현재 레이어에서 기능을 확정하지 않고 아래쪽 레이어로 내려가 실제 Keycode를 찾습니다. 반대로 KC_NO가 배치되어 있으면 해당 위치는 아무 동작도 하지 않습니다.

    키맵 값 처리 방식 결과
    KC_A 기본 키 입력으로 처리 A 위치의 HID 입력 전송
    KC_TRNS 아래 레이어의 같은 좌표 조회 하위 레이어 기능 사용
    KC_NO 입력을 실행하지 않음 아무 동작 없음
    MO(1) 누르는 동안 지정 레이어 활성화 Layer 1 사용
    LT(1, KC_SPC) 탭과 홀드 시간을 구분 Space 또는 Layer 1
    Link&Tem Insight

    레이어는 각각 독립된 키보드가 겹쳐 있는 구조에 가깝습니다. QMK는 활성화된 레이어 가운데 우선순위가 높은 레이어부터 좌표를 확인하고, 투명 키를 만나면 아래 레이어로 내려갑니다. 따라서 레이어가 활성화되었다고 해서 모든 키가 반드시 바뀌는 것은 아닙니다.

    4. KC_A는 내부적으로 숫자 값으로 처리된다

    QMK의 키맵 파일을 보면 KC_A, KC_ENTER, KC_LCTRL 같은 이름이 사용됩니다. 사람이 보기에는 문자와 기능 이름이지만 컴파일 과정이 끝난 펌웨어에서는 숫자 값으로 처리됩니다. 이 이름들은 개발자가 키맵을 읽고 수정하기 쉽게 만든 기호입니다.

    QMK 공식 문서에 따르면 Quantum Keycode는 일정한 숫자 범위 안에서 관리됩니다. 기본 키에 해당하는 표준 Keycode는 낮은 범위를 사용하고, 레이어 전환이나 Mod-Tap처럼 추가 정보가 필요한 기능은 다른 비트 영역을 활용합니다. 겉으로는 함수처럼 보이는 Keycode도 전처리와 컴파일 과정을 거치면 펌웨어가 해석할 수 있는 값으로 변환됩니다.

    예를 들어 KC_A는 일반적인 키보드 입력을 나타내는 기본 Keycode입니다. 반면 LCTL(KC_C)는 Ctrl과 C를 함께 보내는 조합을 표현하며, LT(1, KC_SPC)는 짧게 누르면 Space를 보내고 길게 누르면 Layer 1을 활성화하도록 구성됩니다. 이 값들은 모두 같은 방식으로 처리되지 않고 Keycode의 종류에 따라 서로 다른 QMK 처리 루틴으로 전달됩니다.

    ⚠ 주의할 점

    QMK Keycode 이름과 USB HID Usage ID를 완전히 같은 개념으로 보면 안 됩니다. 기본 Keycode는 HID 값과 직접 연결되는 경우가 많지만, 레이어 전환이나 매크로 같은 QMK 전용 Keycode는 호스트로 그대로 전송되지 않고 펌웨어 내부 동작으로 먼저 해석됩니다.

    5. 기본 Keycode와 QMK 전용 Keycode의 차이

    모든 Keycode가 컴퓨터로 곧바로 전송되는 것은 아닙니다. KC_A나 KC_ENTER 같은 기본 Keycode는 최종적으로 USB HID 키보드 리포트에 반영될 수 있지만, MO(1), TG(2), QK_BOOT 같은 QMK 전용 Keycode는 키보드 내부 상태를 변경하기 위해 사용됩니다.

    MO(1)을 누르면 운영체제에 “MO(1) 키가 눌렸다”라는 값이 전달되는 것이 아닙니다. QMK가 해당 Keycode를 먼저 가로채 Layer 1을 활성화하고, 이후 다른 키가 눌렸을 때 Layer 1의 키맵을 조회하도록 내부 상태를 변경합니다. 키를 떼면 해당 레이어를 다시 비활성화합니다.

    Mod-Tap과 Layer-Tap처럼 하나의 키에 두 가지 기능이 들어 있는 Keycode는 눌린 시간, 다른 키의 입력 여부, 탭 횟수 같은 추가 조건도 확인합니다. 따라서 같은 키를 눌러도 짧게 누른 경우와 길게 누른 경우의 결과가 달라질 수 있습니다.

    종류 대표 예시 주요 처리 위치
    기본 키 KC_A, KC_1, KC_ENTER HID 키보드 리포트에 반영
    수정 키 KC_LCTL, KC_LSFT HID Modifier 비트에 반영
    레이어 키 MO(1), TG(1), TO(2) QMK 내부 레이어 상태 변경
    탭·홀드 키 MT(), LT() 입력 시간과 조건 판정 후 기능 결정
    사용자 정의 키 SAFE_RANGE 이후 값 사용자 코드에서 직접 동작 정의
    Keycode 인식 흐름 한눈에 보기
    1. 스위치가 눌리면서 매트릭스의 전기 상태가 변합니다.
    2. MCU가 행과 열 좌표의 변화를 발견합니다.
    3. 디바운스 후 눌림 또는 떼어짐 이벤트가 확정됩니다.
    4. 활성 레이어의 키맵에서 16비트 Keycode를 찾습니다.
    5. QMK가 Keycode 종류와 추가 조건을 분석합니다.
    6. 내부 기능이면 레이어나 펌웨어 상태를 변경합니다.
    7. 일반 입력이면 HID 리포트에 키 상태를 반영합니다.
    8. 운영체제가 HID 입력을 현재 언어 배열에 맞게 해석합니다.
    Part 1 정리

    Keycode 인식은 키캡의 문자를 읽는 과정이 아니라 매트릭스 좌표를 찾고, 활성 레이어의 키맵에서 기능 값을 조회하는 과정입니다. 기본 Keycode는 HID 입력으로 이어질 수 있지만 레이어, Tap-Hold, 매크로 같은 QMK 전용 Keycode는 펌웨어 내부에서 먼저 해석됩니다. 다음 내용에서는 process_record 처리 과정, HID 리포트 생성, 운영체제가 최종 문자를 결정하는 원리와 Keycode 오류를 확인하는 방법을 이어서 살펴보겠습니다.

    6. QMK는 Keycode를 어떤 순서로 처리할까?

    활성 레이어에서 Keycode를 찾았다고 해서 곧바로 PC에 전송되는 것은 아닙니다. QMK는 조회된 Keycode를 여러 처리 단계에 통과시킨 뒤, 최종적으로 어떤 입력을 전송할지 결정합니다.

    이 과정이 필요한 이유는 QMK의 Keycode가 단순한 문자 입력만 표현하지 않기 때문입니다. 일반 키보드의 A 키처럼 바로 전송할 수 있는 입력도 있지만, 레이어 전환, 탭과 홀드 구분, 매크로, 모드 전환처럼 펌웨어 내부에서 먼저 해석해야 하는 기능도 있습니다.

    Keycode 처리 흐름
    1. 키보드 매트릭스에서 눌린 위치를 확인합니다.
    2. 현재 활성화된 레이어를 확인합니다.
    3. 키맵에서 해당 위치의 Keycode를 조회합니다.
    4. QMK 내부 기능이 먼저 Keycode를 검사합니다.
    5. 사용자 정의 처리 함수가 입력을 확인합니다.
    6. 전송 가능한 HID 입력으로 변환합니다.
    7. USB 또는 무선 연결을 통해 PC로 전달합니다.

    예를 들어 키맵에서 조회된 값이 KC_A라면 비교적 단순합니다. QMK는 A 키가 눌렸다는 정보를 HID 리포트에 추가할 수 있습니다. 하지만 조회된 값이 MO(1)이라면 PC에 MO(1)이라는 키를 보내는 것이 아닙니다.

    MO(1)은 QMK 내부에서만 의미가 있는 레이어 기능입니다. 이 Keycode가 눌리는 동안 QMK는 1번 레이어를 활성화하고, 키를 놓으면 다시 비활성화합니다. 즉 일부 Keycode는 운영체제로 전송되는 입력이고, 일부는 펌웨어의 상태를 바꾸는 명령입니다.

    💡 핵심 구분

    모든 Keycode가 PC로 그대로 전송되는 것은 아닙니다. 기본 키는 HID 입력으로 변환되지만, 레이어·매크로·탭홀드 같은 기능 키는 QMK 내부에서 먼저 처리됩니다.

    7. process_record_user는 어떤 역할을 할까?

    QMK에서 사용자 정의 Keycode를 만들거나 특정 키의 동작을 변경할 때 자주 사용하는 함수가 process_record_user입니다. 이 함수는 Keycode가 최종 처리되기 전에 사용자가 입력을 직접 확인하고 필요한 동작을 추가할 수 있게 해줍니다.

    함수에는 현재 인식된 Keycode와 키가 눌렸는지 또는 놓였는지를 나타내는 기록이 전달됩니다. 사용자는 이 값을 기준으로 특정 Keycode가 눌렸을 때 문자열을 입력하거나, 다른 키 조합을 실행하거나, 펌웨어 상태를 변경할 수 있습니다.

    process_record_user에서 할 수 있는 일
    • 사용자 정의 Keycode 동작 실행
    • 특정 키를 다른 키 조합으로 변환
    • 문자열이나 단축키 전송
    • 키가 눌릴 때와 놓일 때의 동작 분리
    • 조건에 따라 기본 Keycode 처리 차단

    이 함수의 반환값도 중요합니다. 일반적으로 true를 반환하면 QMK가 해당 Keycode의 기본 처리를 계속 진행합니다. 반대로 false를 반환하면 이후 기본 처리를 중단할 수 있습니다.

    예를 들어 사용자 정의 Keycode가 눌렸을 때 이미 원하는 매크로를 실행했다면 false를 반환해 동일한 입력이 추가로 처리되지 않도록 만들 수 있습니다. 반면 단순히 입력 상태만 확인하고 원래 Keycode도 정상적으로 동작하게 하려면 true를 반환합니다.

    process_record_user는 Keycode를 새로 만드는 기능이라기보다, 이미 인식된 Keycode가 어떤 동작을 해야 하는지 사용자가 개입할 수 있는 지점이라고 이해하면 쉽습니다.

    8. Keycode는 HID 리포트로 어떻게 변환될까?

    QMK 내부 처리가 끝난 기본 Keycode는 USB HID 규격에 맞는 입력 정보로 변환됩니다. 이때 키보드는 문자 자체를 보내는 것이 아니라, 현재 어떤 키들이 눌려 있는지를 담은 HID 리포트를 전송합니다.

    예를 들어 사용자가 A 키를 누르면 키보드는 PC에 영문 소문자 a라는 글자를 직접 전송하지 않습니다. 대신 키보드 사용 페이지에서 A 위치에 해당하는 HID Usage 정보를 리포트에 기록합니다.

    이후 운영체제가 현재 키보드 배열, Shift 키 상태, Caps Lock 상태, 입력 언어를 확인해 실제 화면에 어떤 문자를 표시할지 결정합니다.

    단계 처리 주체 주요 역할
    물리 키 감지 키보드 MCU 행과 열 좌표 확인
    Keycode 조회 QMK Firmware 레이어와 키맵 해석
    HID 리포트 생성 QMK Firmware 눌린 키 상태를 규격에 맞게 구성
    문자 해석 운영체제 언어와 배열에 맞는 문자 출력
    중요한 점

    Keycode와 화면에 표시되는 문자는 같은 개념이 아닙니다. 같은 KC_A 입력이라도 키보드 배열과 입력 언어에 따라 운영체제가 다르게 해석할 수 있습니다.

    9. Shift·Ctrl·Alt는 일반 키와 무엇이 다를까?

    Shift, Ctrl, Alt, GUI 키는 일반 문자 키와 함께 조합되는 수식 키입니다. HID 키보드 리포트에서는 이러한 키의 상태가 일반 키와 구분되어 관리되는 경우가 많습니다.

    예를 들어 Ctrl+C를 입력하면 QMK는 Ctrl이 눌린 상태와 C가 눌린 상태를 함께 리포트에 반영합니다. 운영체제는 이 조합을 문자 입력이 아니라 복사 명령으로 해석합니다.

    QMK에서는 LCTL(KC_C)처럼 하나의 표현 안에 수식 키와 기본 Keycode를 조합할 수도 있습니다. 이렇게 작성된 Keycode는 눌리는 순간 Ctrl과 C가 함께 활성화되고, 키를 놓으면 함께 해제되는 방식으로 처리됩니다.

    대표적인 수식 키 표현
    • KC_LSFT — 왼쪽 Shift
    • KC_LCTL — 왼쪽 Ctrl
    • KC_LALT — 왼쪽 Alt
    • KC_LGUI — Windows 키 또는 Command 키
    • LCTL(KC_C) — Ctrl+C 조합

    이 구조 덕분에 키 하나로 여러 키의 조합을 실행할 수 있습니다. 다만 운영체제마다 단축키 체계가 다르므로, Windows와 macOS에서 같은 Keycode 조합이 서로 다른 기능으로 동작할 수 있습니다.

    10. 탭홀드 Keycode는 어떻게 구분할까?

    QMK의 강력한 기능 중 하나는 키를 짧게 눌렀을 때와 길게 누르고 있을 때 서로 다른 동작을 실행하는 탭홀드 기능입니다.

    예를 들어 LT(1, KC_SPC)는 짧게 누르면 Space로 동작하고, 누른 채 유지하면 1번 레이어를 활성화합니다. 하나의 물리 키가 두 가지 역할을 가지는 것입니다.

    이 경우 QMK는 키가 눌린 순간 바로 Space를 전송하기 어렵습니다. 사용자가 짧게 누를지, 계속 누르고 있을지 아직 알 수 없기 때문입니다. 따라서 설정된 탭 판정 시간과 이후 입력을 확인해 탭인지 홀드인지 결정합니다.

    💡 탭홀드 처리의 특징

    일반 Keycode는 눌린 즉시 처리할 수 있지만, 탭홀드 Keycode는 입력 시간과 다른 키의 입력 여부까지 확인해야 최종 동작을 결정할 수 있습니다.

    이 때문에 탭홀드 설정에서는 타이핑 습관이 중요합니다. 판정 시간이 너무 짧으면 의도하지 않은 홀드가 발생할 수 있고, 너무 길면 레이어 전환이나 수식 키 동작이 늦게 느껴질 수 있습니다.

    11. Keycode를 눌렀는데 다른 문자가 나오는 이유

    QMK 키맵에서 KC_A를 지정했는데 예상과 다른 문자가 입력된다면, 펌웨어가 Keycode를 잘못 인식했다고 단정하기는 어렵습니다. 키보드는 정상적인 HID 위치 정보를 보냈지만 운영체제의 키보드 배열이 다르게 설정되어 있을 수 있기 때문입니다.

    특히 ANSI와 ISO 배열, 영문과 한글 입력기, 미국식과 유럽식 키보드 레이아웃 사이에는 같은 물리 위치를 다르게 해석하는 경우가 있습니다.

    예상과 다른 입력이 나올 때 확인할 항목
    • 현재 활성화된 QMK 레이어가 맞는지 확인
    • VIA 또는 키맵에서 지정한 Keycode 확인
    • Windows 또는 macOS의 키보드 배열 확인
    • 입력 언어와 한영 전환 상태 확인
    • Shift, Ctrl, Alt 같은 수식 키가 남아 있지 않은지 확인
    • 탭홀드 판정이 의도대로 작동하는지 확인

    Keycode는 키보드 펌웨어와 운영체제 사이의 약속입니다. 따라서 문제를 확인할 때는 물리 스위치, QMK 키맵, HID 전송, 운영체제 배열을 각각 나누어 살펴보는 것이 좋습니다.

    12. Keycode 동작을 확인하는 방법

    사용자 정의 키맵을 수정한 뒤에는 실제로 어떤 Keycode가 인식되는지 확인하는 과정이 필요합니다. 화면에 입력되는 문자만 보면 펌웨어에서 어떤 단계가 잘못되었는지 구분하기 어렵기 때문입니다.

    기본적인 확인 방법은 키보드 테스트 도구를 사용해 눌린 키를 확인하는 것입니다. 더 깊게 확인하려면 QMK의 콘솔과 디버깅 기능을 이용해 매트릭스 좌표, Keycode, 키 이벤트가 어떻게 처리되는지 살펴볼 수 있습니다.

    문제 위치를 구분하는 기준
    • 키 입력 자체가 감지되지 않으면 매트릭스 또는 하드웨어 확인
    • 다른 Keycode가 조회되면 레이어와 키맵 확인
    • Keycode는 맞지만 기능이 다르면 사용자 정의 함수 확인
    • HID 입력은 맞지만 문자가 다르면 운영체제 배열 확인

    QMK 콘솔을 사용하려면 펌웨어에서 콘솔 기능을 활성화해야 하며, 키보드와 MCU에 따라 지원 방식이 다를 수 있습니다. 일반 사용자는 먼저 VIA 키 테스터와 운영체제의 키보드 뷰어를 확인하고, 펌웨어를 직접 개발할 때 콘솔 디버깅을 사용하는 것이 효율적입니다.

    13. Keycode를 이해할 때 자주 하는 실수

    Keycode는 이름만 보면 단순해 보이지만, 실제로는 펌웨어 기능과 HID 규격, 운영체제 해석이 연결된 개념입니다. 아래와 같은 부분에서 혼동이 자주 발생합니다.

    자주 하는 오해
    • Keycode를 화면에 표시되는 문자와 동일하게 생각하는 것
    • 모든 QMK Keycode가 PC로 직접 전송된다고 생각하는 것
    • 물리 키 위치와 Keycode가 항상 고정되어 있다고 생각하는 것
    • 레이어가 바뀌어도 같은 키가 같은 기능을 한다고 생각하는 것
    • 펌웨어 문제와 운영체제 키보드 배열 문제를 구분하지 않는 것

    가장 중요한 기준은 물리 위치 → 활성 레이어 → Keycode → QMK 내부 처리 → HID 리포트 → 운영체제 해석의 순서입니다. 입력 문제가 생겼을 때 이 순서를 따라가면 어느 단계에서 예상과 달라졌는지 찾기 쉬워집니다.

    🔍 Insight

    QMK의 Keycode는 단순한 키 이름이 아니라 펌웨어가 실행할 동작을 표현하는 명령 값입니다. 일부는 HID 입력이 되고, 일부는 레이어나 매크로처럼 키보드 내부 상태를 바꿉니다.

    14. 자주 묻는 질문

    Q. KC_A는 문자 a를 직접 전송하나요?

    아닙니다. 키보드는 A 키 위치에 해당하는 HID 입력 정보를 보내고, 운영체제가 현재 언어와 키보드 배열을 기준으로 최종 문자를 결정합니다.

    Q. 같은 물리 키에 여러 Keycode를 지정할 수 있나요?

    가능합니다. 레이어마다 서로 다른 Keycode를 배치할 수 있으며, 탭홀드 기능을 사용하면 짧게 누를 때와 길게 누를 때의 동작도 나눌 수 있습니다.

    Q. MO(1)도 PC로 전송되는 Keycode인가요?

    MO(1)은 QMK 내부에서 레이어를 활성화하는 기능입니다. 일반 문자 키처럼 운영체제로 그대로 전송되는 값은 아닙니다.

    Q. 사용자 정의 Keycode는 어떻게 만들 수 있나요?

    일반적으로 사용자 정의 Keycode 값을 선언한 뒤 process_record_user 함수에서 해당 값이 눌렸을 때 실행할 동작을 작성합니다.

    Q. Keycode 번호를 직접 외워야 하나요?

    대부분의 경우 숫자를 외울 필요는 없습니다. KC_A, KC_ENT, MO(1)처럼 QMK가 제공하는 이름을 사용하면 컴파일 과정에서 실제 값으로 변환됩니다.

    Q. Keycode가 정상인데 문자가 다르게 입력될 수 있나요?

    가능합니다. 운영체제에 설정된 키보드 언어와 배열이 다르면 동일한 HID 입력도 다른 문자로 해석될 수 있습니다.

    📚 함께 보면 좋은 글

    Keycode가 인식되는 전체 흐름을 이해했다면 펌웨어, 저장 공간, MCU 구조까지 함께 살펴보세요. 각각의 개념이 연결되면 키보드가 입력을 처리하는 과정이 더 명확해집니다.

    🔗 공식 자료

    📖 출처

    • QMK Firmware 공식 문서 — Keycodes
    • QMK Firmware 공식 문서 — Keymap Overview
    • QMK Firmware 공식 문서 — Quantum Keycodes
    • QMK Firmware 공식 문서 — Custom Quantum Functions
    • QMK Firmware 공식 문서 — Tap-Hold Configuration
    • USB Implementers Forum HID Usage Tables
    Link&Tem 한 줄 정리

    Keycode는 키캡에 적힌 문자가 아니라, 매트릭스 위치와 활성 레이어를 바탕으로 QMK가 찾아낸 동작 값입니다. 이 값은 펌웨어 내부 기능으로 처리되거나 HID 리포트로 변환된 뒤 운영체제에서 최종 입력으로 해석됩니다.

  • VIAL 구조 차이 완벽 정리|VIA와 프로토콜·JSON·펌웨어 비교

    VIAL 구조 차이 완벽 정리|VIA와 프로토콜·JSON·펌웨어 비교

    LINK&TEM GUIDE

    VIAL 구조 차이

    VIA와 무엇이 다르며 왜 고급 사용자들이 VIAL을 선택하는가

    📌 핵심 요약
    • VIAL은 VIA를 기반으로 만들어진 확장형 키보드 설정 시스템입니다.
    • 실시간 설정 방식은 비슷하지만 지원 기능은 VIAL이 훨씬 많습니다.
    • Tap Dance, Combo, Key Override 등 고급 기능을 GUI에서 설정할 수 있습니다.
    • 보안을 위해 Unlock 방식과 VIAL 전용 UID 구조를 사용합니다.
    • QMK 기반 커스텀 키보드 사용자라면 VIA보다 높은 자유도를 제공합니다.

    기계식 키보드를 커스텀하다 보면 가장 많이 접하는 프로그램이 VIA입니다. 하지만 조금 더 깊이 들어가면 VIAL이라는 이름도 자주 등장합니다.

    처음에는 이름만 비슷해 보여 “VIA의 새로운 버전인가?”라고 생각하기 쉽지만 실제로는 구조와 목적이 상당히 다릅니다.

    이번 글에서는 VIAL이 어떤 구조로 만들어졌는지, VIA와 어떤 차이가 있는지, 왜 일부 고급 사용자들이 VIAL을 선호하는지까지 내부 동작 중심으로 살펴보겠습니다.


    VIAL은 무엇일까?

    VIAL은 QMK Firmware 위에서 동작하는 실시간 키맵 설정 시스템입니다. 기본 개념은 VIA와 거의 동일합니다. 키보드 펌웨어 안에 설정 정보를 저장하고, 프로그램에서 실시간으로 읽고 수정하는 구조를 사용합니다.

    하지만 개발 목적은 조금 다릅니다.

    VIA는 가능한 많은 사용자들이 쉽고 빠르게 키를 변경하도록 설계되었습니다. 반면 VIAL은 커스텀 키보드 제작자와 고급 사용자를 위해 기능 제한을 크게 줄인 시스템입니다.

    즉,

    • 쉬운 사용성 → VIA
    • 높은 자유도 → VIAL

    라는 방향성 차이가 존재합니다.

    💡 Link&Tem Insight

    VIAL은 VIA를 완전히 대체하기 위해 만들어진 프로젝트가 아닙니다. VIA에서 구현하기 어려웠던 고급 기능을 GUI 환경에서도 사용할 수 있도록 확장한 프로젝트에 가깝습니다.

    왜 VIAL이 만들어졌을까?

    VIA는 매우 편리하지만 지원하는 기능이 제한적입니다.

    예를 들어 최신 QMK에서 지원하는 여러 기능은 VIA 화면에서는 설정할 수 없습니다.

    결국 사용자는 config.h와 keymap.c를 직접 수정하고 다시 컴파일해야 하는 경우가 많았습니다.

    이러한 불편함을 해결하기 위해 만들어진 것이 VIAL입니다.

    목적 VIA VIAL
    기본 키 변경 지원 지원
    매크로 지원 확장 지원
    Tap Dance 거의 불가 GUI 지원
    Combo 제한 지원
    Key Override 제한 지원
    TIP 처음 사용하는 사용자라면 VIA가 더 쉽습니다. 하지만 키 하나에 여러 동작을 넣거나 복잡한 레이어를 구성하려면 VIAL이 훨씬 강력합니다.

    VIAL 구조는 VIA와 무엇이 다를까?

    겉모습은 매우 비슷하지만 내부 구조는 차이가 있습니다.

    VIA는 JSON 기반 데이터베이스를 이용하여 키보드를 인식합니다.

    반면 VIAL은 펌웨어 안에 VIAL UID와 기능 정보를 함께 포함하여 프로그램이 장치를 식별합니다.

    즉, 단순히 JSON을 읽는 것이 아니라 펌웨어 자체가 VIAL 인터페이스를 지원하도록 제작됩니다.

    구조 흐름
    • PC가 HID 장치 연결
    • VIAL UID 확인
    • 지원 기능 확인
    • 동적 설정 가능 여부 확인
    • 실시간 EEPROM 수정
    💡 Link&Tem Insight

    VIAL은 단순히 “JSON이 더 많은 VIA”가 아닙니다. 펌웨어 내부에 별도의 식별 구조와 기능 플래그를 포함하기 때문에 프로그램이 훨씬 다양한 기능을 안전하게 노출할 수 있습니다.

    VIAL Unlock은 왜 존재할까?

    VIAL을 처음 실행하면 Unlock을 요구하는 키보드가 있습니다.

    이는 실수로 키맵을 변경하거나 악성 프로그램이 EEPROM을 수정하는 것을 방지하기 위한 보안 기능입니다.

    일반적으로 특정 키를 동시에 누르거나 정해진 조합을 입력해야 설정 화면이 활성화됩니다.

    VIA에는 기본적으로 이러한 보호 절차가 존재하지 않는 경우가 많습니다.

    따라서 VIAL은 커스텀 키보드 제작자 입장에서 조금 더 안전한 구조를 제공합니다.

    Part 1 정리

    VIAL은 VIA와 동일한 실시간 키맵 변경 철학을 유지하면서도 Tap Dance, Combo, Key Override 같은 고급 기능과 Unlock, UID 기반 구조를 추가한 확장형 시스템입니다. 다음 파트에서는 EEPROM 구조, 지원 기능, VIA와의 호환성, 어떤 사용자에게 적합한지까지 자세히 살펴보겠습니다.

    5. VIAL은 키보드 정보를 어디에 저장할까?

    VIA와 VIAL의 구조 차이를 이해하려면 키맵과 설정 정보가 어디에 저장되는지를 먼저 살펴봐야 합니다. 두 방식 모두 사용자가 변경한 키 배열을 키보드 내부의 비휘발성 저장공간에 기록할 수 있습니다. QMK 계열 펌웨어에서는 이러한 영구 설정 영역을 일반적으로 EEPROM이라고 표현합니다.

    EEPROM에 저장된 데이터는 키보드 전원을 분리해도 유지됩니다. 따라서 VIAL에서 특정 키를 다른 기능으로 변경한 뒤 USB 케이블을 뽑았다가 다시 연결해도 설정이 그대로 남아 있습니다. 키를 누를 때마다 PC의 VIAL 프로그램이 명령을 전달하는 것이 아니라, 키보드 펌웨어가 내부에 저장된 키맵을 읽어 직접 입력을 처리하는 구조입니다.

    💡 핵심 구조

    VIAL 프로그램은 설정값을 키보드에 전달하는 도구입니다. 실제 키 입력 판단과 USB HID 신호 전송은 키보드 내부의 펌웨어가 담당하므로 설정을 마친 뒤 VIAL을 종료해도 변경한 키맵을 계속 사용할 수 있습니다.

    다만 모든 설정이 동일한 방식으로 저장되는 것은 아닙니다. 키맵, 레이어, 매크로, 콤보, Tap Dance처럼 사용자가 실시간으로 변경할 수 있는 항목은 펌웨어가 마련한 동적 저장 영역을 사용합니다. 반면 매트릭스 핀 구성, 디바운스 알고리즘, USB 장치 정보, 스캔 방식처럼 키보드의 기본 동작을 결정하는 항목은 펌웨어 소스를 수정하고 다시 빌드해야 합니다.

    설정 종류 변경 위치 재플래시 필요 여부
    일반 키맵 VIAL GUI 대부분 불필요
    레이어 구성 VIAL GUI 대부분 불필요
    콤보·Tap Dance 지원 펌웨어의 VIAL GUI 대부분 불필요
    매트릭스 핀 구성 펌웨어 소스 필요
    스캔·디바운스 방식 펌웨어 소스 필요

    EEPROM은 무제한으로 쓸 수 있는 저장장치는 아닙니다. 다만 일반적인 키맵 변경 빈도만으로 수명을 걱정할 필요는 거의 없습니다. 문제가 되는 경우는 자동화 프로그램이나 오류가 있는 도구가 매우 짧은 간격으로 설정을 반복 기록할 때입니다. 설정값이 실제로 바뀔 때만 저장하는 정상적인 사용에서는 큰 부담이 되지 않습니다.

    6. VIAL이 VIA보다 더 많은 기능을 제공하는 이유

    VIAL이 VIA보다 기능이 많다고 설명되는 이유는 프로그램 화면에 메뉴를 더 많이 추가했기 때문만은 아닙니다. VIAL은 GUI와 키보드 펌웨어가 함께 확장된 구조입니다. 프로그램에서 만든 고급 설정을 펌웨어가 이해하고 실행할 수 있도록 통신 명령과 동적 저장 구조가 함께 구현되어 있습니다.

    VIA도 키맵 변경, 레이어 설정, 매크로, 조명 제어 같은 주요 기능을 제공합니다. 그러나 콤보나 Tap Dance처럼 동작 조건이 복잡한 기능은 일반 QMK 환경에서 소스 코드에 직접 정의해야 하는 경우가 많습니다. VIAL은 이러한 설정을 GUI에서 수정할 수 있도록 동적 기능으로 확장했습니다.

    VIAL에서 자주 사용하는 고급 기능
    • Combo: 여러 키를 동시에 눌렀을 때 하나의 다른 입력을 실행합니다.
    • Tap Dance: 같은 키를 한 번, 여러 번, 길게 눌렀을 때 서로 다른 동작을 실행합니다.
    • Key Override: 특정 키와 보조키 조합을 다른 키코드로 치환합니다.
    • Macro: 여러 키 입력을 정해진 순서로 실행합니다.
    • Encoder 설정: 로터리 인코더의 회전 방향과 클릭 기능을 변경합니다.

    예를 들어 두 개의 키를 동시에 누르면 괄호나 특수문자가 입력되도록 만들 수 있습니다. 같은 키를 한 번 눌렀을 때와 두 번 눌렀을 때 다른 기능을 실행하거나, 특정 키 조합을 다른 단축키로 치환하는 것도 가능합니다. 물리 키 수가 적은 60%, 65%, 75% 배열에서 특히 유용합니다.

    하지만 VIAL을 설치했다고 해서 모든 고급 기능이 자동으로 나타나는 것은 아닙니다. 해당 기능이 키보드 펌웨어를 빌드하는 단계에서 활성화되어 있어야 하며, 컨트롤러의 플래시 메모리와 EEPROM 용량도 충분해야 합니다. 제조사가 일부 기능을 제외한 펌웨어를 제공했다면 VIAL GUI에 관련 탭이 나타나지 않을 수 있습니다.

    기능이 보이지 않을 때

    VIAL 프로그램만 최신 버전으로 업데이트한다고 키보드 펌웨어에 없는 기능이 새로 생기지는 않습니다. GUI의 메뉴와 실제 사용 가능한 기능은 키보드에 설치된 VIAL 펌웨어 구성에 따라 달라집니다.

    7. VIAL 호환 키보드는 어떻게 구분할까?

    키보드가 QMK를 사용한다고 해서 반드시 VIAL과 호환되는 것은 아닙니다. QMK, VIA, VIAL은 서로 관련된 프로젝트이지만 같은 의미는 아닙니다. VIAL에서 키보드를 설정하려면 해당 키보드에 VIAL 통신 프로토콜과 장치 정의가 포함된 호환 펌웨어가 설치되어 있어야 합니다.

    제품 설명에 VIA 지원만 표기되어 있다면 VIAL에서도 바로 인식된다고 단정할 수 없습니다. 반대로 제조사가 VIAL 지원 펌웨어를 기본으로 탑재했거나 공식 다운로드 페이지에서 별도의 VIAL 펌웨어를 제공한다면 사용할 가능성이 높습니다.

    확인 항목 확인해야 하는 내용
    제품 페이지의 VIAL 표기 제조사가 공식적으로 VIAL 호환성을 안내하는지 확인합니다.
    공식 펌웨어 다운로드 키보드 모델과 PCB 버전에 맞는 VIAL 펌웨어가 있는지 확인합니다.
    VIAL 실행 후 자동 인식 키보드가 장치 정의와 VIAL 통신 정보를 정상적으로 제공하는 상태입니다.
    vial-qmk 소스 트리 해당 키보드용 VIAL 키맵이나 포트가 등록되어 있는지 확인합니다.

    직접 VIAL 펌웨어를 빌드할 수도 있지만, 이 과정에서는 키보드 모델뿐 아니라 PCB 리비전, MCU 종류, 부트로더, 매트릭스 구조까지 정확히 확인해야 합니다. 이름이 같은 키보드라도 생산 시기나 판매 지역에 따라 PCB가 달라질 수 있으므로 다른 리비전의 펌웨어를 임의로 설치하면 정상적으로 작동하지 않을 수 있습니다.

    ⚠️ 펌웨어 설치 전 주의

    VIA용 펌웨어와 VIAL용 펌웨어는 단순 설정 파일이 아닙니다. 반드시 제조사나 키보드 프로젝트가 제공하는 정확한 모델·PCB 리비전용 파일인지 확인해야 합니다. 잘못된 펌웨어를 설치하면 키 입력, 조명, 무선 기능 또는 부트로더 진입 방식이 정상적으로 작동하지 않을 수 있습니다.

    8. VIA JSON과 VIAL JSON의 역할 차이

    두 시스템 모두 JSON이라는 표현이 등장하기 때문에 같은 파일을 서로 사용할 수 있다고 생각하기 쉽습니다. 하지만 VIA의 정의 JSON과 VIAL 펌웨어에 사용되는 vial.json은 사용 위치와 목적이 다릅니다.

    VIA 정의 파일은 VIA 애플리케이션이 키보드 이름, USB 식별 정보, 물리 배열, 키 위치와 메뉴 구성을 이해하도록 돕습니다. 키보드 정의가 VIA 공식 저장소에 등록되지 않았거나 로컬 정의를 사용하는 제품에서는 사용자가 VIA의 Design 탭에서 JSON 파일을 직접 불러와야 할 수 있습니다.

    반면 VIAL의 vial.json은 VIAL 펌웨어를 구성하고 빌드하는 과정에서 키보드의 레이아웃과 장치 정보를 정의하는 데 사용됩니다. 완성된 VIAL 펌웨어는 필요한 정보를 키보드 자체에서 프로그램으로 전달할 수 있으므로, 일반 사용 단계에서는 별도의 JSON 파일을 매번 불러오지 않아도 배열이 자동으로 나타납니다.

    비교 항목 VIA 정의 JSON VIAL의 vial.json
    주요 사용 시점 VIA에서 장치 정의를 불러올 때 VIAL 펌웨어를 구성하고 빌드할 때
    주요 사용자 일반 사용자·제조사·개발자 펌웨어 개발자·키보드 제작자
    외부 파일 로드 등록 상태에 따라 필요할 수 있음 일반 사용 단계에서는 대체로 불필요
    서로 교환 가능 여부 파일 구조와 용도가 달라 그대로 교환할 수 없음
    Link&Tem Insight

    VIA는 애플리케이션이 키보드의 정의 파일을 확보한 뒤 화면을 구성하는 과정이 비교적 명확하게 드러납니다. VIAL은 장치 정의를 펌웨어와 함께 배포해 연결한 키보드가 자신의 구조를 프로그램에 직접 알려주는 방식에 가깝습니다.

    9. VIA와 VIAL 중 무엇을 선택해야 할까?

    일반적인 키 변경과 간단한 레이어 설정만 필요하다면 VIA만으로도 충분한 경우가 많습니다. 공식 지원 키보드가 많고 웹 브라우저에서도 실행할 수 있기 때문에 프로그램 설치를 최소화하고 싶은 사용자에게 편리합니다.

    반대로 Combo, Tap Dance, Key Override처럼 조건이 복잡한 기능을 GUI에서 자주 수정하고 싶다면 VIAL이 더 적합할 수 있습니다. 키보드 제작자 입장에서도 장치 정의를 펌웨어에 포함해 외부 JSON 파일을 별도로 배포하는 과정을 줄일 수 있다는 장점이 있습니다.

    사용 목적별 선택 기준
    • VIA 추천: 기본 키맵 변경, 간단한 레이어와 매크로, 웹 기반 설정을 원하는 경우
    • VIAL 추천: Combo, Tap Dance, Key Override 등 고급 기능을 GUI에서 수정하려는 경우
    • 기본 펌웨어 유지 추천: 현재 설정에 만족하고 펌웨어 변경 위험을 피하고 싶은 경우
    • 직접 빌드 추천: PCB와 QMK 구조를 이해하고 필요한 기능을 직접 구성할 수 있는 경우

    가장 중요한 선택 기준은 기능의 개수보다 공식 지원 여부입니다. 원하는 기능이 많더라도 자신의 키보드에 검증된 VIAL 펌웨어가 없다면 무리하게 변경하기보다 제조사가 제공하는 VIA 펌웨어나 전용 프로그램을 사용하는 편이 안전합니다.

    또한 VIA와 VIAL의 차이를 입력 지연 차이로 오해해서는 안 됩니다. 두 도구는 키맵과 기능을 설정하는 방법에 영향을 줍니다. 실제 입력 지연은 키보드 매트릭스의 Scan Rate, 디바운스 설정, USB Polling Rate, 무선 전송 구조와 펌웨어 처리 시간에 더 직접적인 영향을 받습니다.

    10. 자주 발생하는 오해와 문제

    VIAL을 실행했는데 키보드가 보이지 않는 경우

    키보드에 VIAL 호환 펌웨어가 설치되지 않았거나 USB 데이터 연결이 정상적으로 이루어지지 않았을 가능성이 큽니다. VIA 지원 제품이라는 이유만으로 VIAL에서도 자동으로 인식되는 것은 아닙니다. 먼저 제조사의 공식 안내에서 VIAL 지원 여부를 확인해야 합니다.

    Unlock 화면에서 아무 변화가 없는 경우

    Unlock 과정에서는 펌웨어가 지정한 물리 키를 실제 키보드에서 눌러야 합니다. 프로그램 화면에 표시되는 위치와 실제 PCB의 키 위치가 다르거나 펌웨어의 Unlock 조합이 잘못 정의되어 있다면 잠금 해제가 완료되지 않을 수 있습니다.

    펌웨어를 다시 설치했는데 키맵이 그대로인 경우

    기존 키맵이 EEPROM에 남아 있으면 새 펌웨어의 기본 키맵보다 저장된 동적 키맵이 우선 적용될 수 있습니다. 펌웨어 업데이트 후 배열이 예상과 다르다면 VIAL의 초기화 기능이나 해당 키보드의 EEPROM 초기화 절차를 확인해야 합니다.

    고급 기능 탭이 일부만 보이는 경우

    VIAL GUI의 오류라기보다 펌웨어에서 해당 기능이 활성화되지 않았을 가능성이 높습니다. 컨트롤러의 저장공간이 부족해 제조사가 일부 기능을 제외했을 수도 있습니다. 같은 키보드라도 설치된 펌웨어 버전에 따라 사용할 수 있는 메뉴가 달라질 수 있습니다.

    Link&Tem Insight

    VIAL 문제를 해결할 때는 프로그램, USB 연결, 키보드 펌웨어, EEPROM 저장값을 분리해서 확인해야 합니다. 화면에 나타난 문제라고 해서 항상 VIAL 프로그램 자체의 오류인 것은 아닙니다.

    11. VIAL 구조 차이 FAQ

    Q. VIA 키보드를 VIAL 프로그램에 연결하면 바로 사용할 수 있나요?

    반드시 그렇지는 않습니다. 키보드에 VIAL 호환 프로토콜과 장치 정의가 포함된 펌웨어가 설치되어 있어야 합니다. VIA 지원 여부와 VIAL 지원 여부는 별도로 확인해야 합니다.

    Q. VIAL에서 설정한 키맵은 프로그램을 종료하면 사라지나요?

    일반적으로 키맵은 키보드 내부의 비휘발성 저장 영역에 기록되므로 프로그램을 종료하거나 키보드를 다시 연결해도 유지됩니다. EEPROM을 초기화하거나 펌웨어의 저장 구조가 변경되면 설정이 초기화될 수 있습니다.

    Q. VIAL을 사용하면 입력 속도가 빨라지나요?

    VIAL 자체가 Scan Rate나 USB Polling Rate를 높여주는 것은 아닙니다. 입력 속도는 키보드 하드웨어와 펌웨어 설정에 의해 결정되며, VIAL은 주로 키맵과 기능을 편집하는 인터페이스입니다.

    Q. VIAL Unlock을 매번 해야 하나요?

    잠금 상태와 유지 방식은 펌웨어 구성에 따라 달라질 수 있습니다. 보호되는 설정을 변경할 때 Unlock이 요구될 수 있으며, 신뢰할 수 있는 PC에서만 잠금을 해제하는 것이 좋습니다.

    Q. VIA JSON을 VIAL에 그대로 불러올 수 있나요?

    일반적으로 그대로 사용할 수 없습니다. VIA 정의 JSON과 VIAL 펌웨어의 vial.json은 목적과 스키마가 다릅니다. 포팅 과정에서 일부 레이아웃 정보를 참고할 수는 있지만 서로 교환하는 파일은 아닙니다.

    📚 함께 보면 좋은 글

    VIAL의 차이를 더 정확히 이해하려면 키보드 입력 처리 속도와 VIA의 장치 정의 구조도 함께 살펴보는 것이 좋습니다. 아래 글을 순서대로 읽으면 펌웨어가 키 입력을 처리하고 설정 프로그램과 통신하는 전체 흐름을 연결할 수 있습니다.

    공식 자료

    VIAL과 VIA의 실제 지원 기능이나 펌웨어 구조는 버전에 따라 달라질 수 있습니다. 펌웨어를 설치하거나 직접 빌드하기 전에는 아래 공식 사이트와 저장소에서 최신 문서를 확인하는 것이 좋습니다.

    출처

    Link&Tem 한 줄 정리

    VIA가 외부 장치 정의와 간편한 키맵 변경에 초점을 둔 구조라면, VIAL은 키보드 정의를 펌웨어에 포함하고 Combo·Tap Dance·Key Override 같은 고급 기능까지 실시간으로 수정할 수 있도록 GUI와 펌웨어를 함께 확장한 구조입니다.

  • VIA가 JSON을 읽는 과정|키보드 인식부터 키맵 변경까지

    VIA가 JSON을 읽는 과정|키보드 인식부터 키맵 변경까지

    LINK&TEM GUIDE

    VIA가 JSON을 읽는 과정

    파일 불러오기부터 키보드 식별·레이아웃 생성·펌웨어 통신까지

    📌 핵심 요약
    • VIA의 JSON은 펌웨어 자체가 아니라 키보드의 구조와 화면 표시 방식을 설명하는 정의 파일입니다.
    • VIA는 JSON을 파싱한 뒤 Vendor ID와 Product ID를 이용해 연결된 USB 장치와 정의를 연결합니다.
    • 키 배열은 JSON의 행·열 좌표, 크기, 회전값, 레이아웃 옵션을 바탕으로 화면에 생성됩니다.
    • JSON을 불러왔다고 키보드 펌웨어가 바뀌는 것은 아니며 실제 키맵 변경은 VIA 프로토콜을 통해 펌웨어로 전달됩니다.
    • JSON이 잘못되면 배열이 어긋나거나 장치가 표시되지 않을 수 있지만, 올바른 파일을 다시 불러오면 대부분 해결할 수 있습니다.

    VIA에서 키보드용 JSON 파일을 불러오면 몇 초 뒤 화면에 실제 키보드와 비슷한 배열이 나타납니다. 겉으로 보면 VIA가 JSON 파일 안에 저장된 키맵을 그대로 꺼내 보여주는 것처럼 느껴질 수 있습니다. 하지만 실제 동작은 그보다 여러 단계로 나뉩니다.

    JSON 파일은 키보드 펌웨어를 담은 파일도 아니고, 현재 사용 중인 키맵 전체를 저장한 백업 파일도 아닙니다. VIA가 해당 키보드를 어떤 장치로 식별해야 하는지, 화면에 몇 개의 키를 어느 위치에 배치해야 하는지, 사용자가 선택할 수 있는 물리 배열은 무엇인지 설명하는 키보드 정의 파일에 가깝습니다.

    VIA는 먼저 JSON의 문법을 검사하고 필요한 속성을 읽습니다. 그다음 USB로 연결된 장치의 식별 정보와 JSON의 정보를 비교하고, 레이아웃 데이터를 이용해 키보드 모양을 구성합니다. 이후 사용자가 화면에서 키를 변경하면 JSON에 직접 저장하는 것이 아니라 VIA 프로토콜을 통해 키보드 펌웨어에 명령을 전송합니다.

    따라서 VIA의 동작을 제대로 이해하려면 JSON 파일, 웹 애플리케이션, 브라우저의 장치 접근 기능, USB HID 통신, 키보드 펌웨어를 서로 구분해서 볼 필요가 있습니다. 이번 글에서는 사용자가 JSON 파일을 불러온 순간부터 키보드 배열이 화면에 나타나고 실제 키맵 변경 명령이 전달되기 전까지의 과정을 순서대로 살펴보겠습니다.


    1. JSON을 불러오면 가장 먼저 무엇이 일어날까?

    사용자가 VIA의 Design 탭에서 JSON 파일을 선택하면 가장 먼저 실행되는 작업은 파일 읽기와 JSON 파싱입니다. 파싱은 문자열로 저장된 JSON 내용을 프로그램이 사용할 수 있는 데이터 구조로 변환하는 과정입니다.

    JSON 파일은 사람이 읽을 수 있는 텍스트 형태이지만, VIA는 파일 내용을 단순한 문장으로 취급하지 않습니다. 중괄호 안의 객체, 대괄호 안의 배열, 속성 이름과 값의 관계를 분석해 각각을 프로그램 내부의 데이터로 바꿉니다.

    예를 들어 JSON 안에 키보드 이름, Vendor ID, Product ID, 키 배열 정보가 들어 있다면 VIA는 이를 각각 별도의 속성으로 분리합니다. 이후 화면 제목에는 키보드 이름을 사용하고, 장치 식별 과정에는 Vendor ID와 Product ID를 사용하며, 키보드 그림을 만들 때는 레이아웃 데이터를 사용합니다.

    JSON을 불러온 직후의 처리 순서
    1. 사용자가 로컬 저장장치에서 JSON 파일을 선택합니다.
    2. 브라우저가 파일의 텍스트 내용을 읽습니다.
    3. VIA가 JSON 문법에 맞게 작성되었는지 파싱합니다.
    4. 필수 속성과 지원되는 정의 버전을 확인합니다.
    5. 키보드 식별 정보와 레이아웃 정보를 내부 데이터로 저장합니다.
    6. 연결된 장치와 정의를 연결할 준비를 합니다.

    이 단계에서 쉼표가 빠졌거나 따옴표가 닫히지 않은 경우처럼 JSON 문법 자체가 잘못되어 있으면 VIA는 내용을 정상적으로 해석할 수 없습니다. 파일은 선택되었지만 아무 변화가 없거나 정의를 불러올 수 없다는 오류가 표시될 수 있습니다.

    반대로 문법은 올바르지만 VIA가 요구하는 필수 속성이 빠진 경우도 있습니다. 이때는 일반 JSON 파서에서는 정상 파일로 판정될 수 있지만, VIA 키보드 정의로서는 불완전합니다. 즉 JSON 문법이 맞는 것VIA 규격에 맞는 것은 서로 다른 조건입니다.

    💡 Link&Tem Insight

    VIA는 JSON을 읽을 때 모든 내용을 한 번에 같은 용도로 처리하지 않습니다. 장치 식별에 쓰이는 정보, 화면 구성에 쓰이는 정보, 레이아웃 옵션에 쓰이는 정보를 분리해 사용합니다. 따라서 한 부분이 잘못되면 전체가 완전히 멈추기도 하지만, 경우에 따라서는 장치는 잡히고 배열만 어긋나는 부분 오류가 나타날 수도 있습니다.

    2. VIA JSON은 펌웨어 파일이 아니다

    VIA JSON을 이해할 때 가장 먼저 구분해야 하는 것은 정의 파일과 펌웨어 파일의 차이입니다. JSON을 불러오면 키보드 화면이 바뀌기 때문에 JSON이 키보드 내부 프로그램을 수정한다고 생각하기 쉽지만, 일반적인 VIA 키보드 정의 JSON은 펌웨어를 플래시하지 않습니다.

    펌웨어는 키보드 마이크로컨트롤러에서 직접 실행되는 프로그램입니다. 키 매트릭스를 스캔하고, 디바운스를 처리하며, 눌린 키를 키코드로 변환하고, USB HID 보고서를 PC에 전송하는 역할을 담당합니다. VIA 기능을 사용하려면 이러한 펌웨어 안에 VIA 통신 기능이 미리 포함되어 있어야 합니다.

    반면 키보드 정의 JSON은 VIA 애플리케이션이 해당 펌웨어와 어떻게 대응해야 하는지 알려줍니다. 화면에 표시할 키보드 이름, USB 장치 식별값, 키의 위치와 크기, 선택 가능한 레이아웃 구성을 설명합니다.

    구분 키보드 정의 JSON 펌웨어
    실행 위치 VIA 애플리케이션 키보드 MCU
    주요 역할 장치와 화면 구조 설명 스캔·키 처리·USB 통신
    파일 적용 결과 VIA 화면에 정의 등록 키보드 동작 코드 변경
    잘못 적용했을 때 배열 오류·인식 불일치 부팅 또는 기능 문제 가능

    이 차이를 알면 JSON을 잘못 불러왔을 때 왜 키보드가 바로 고장 나지 않는지도 이해할 수 있습니다. VIA가 잘못된 화면 정의를 사용한 것이지, 키보드의 실행 코드를 다시 기록한 것은 아니기 때문입니다.

    다만 화면에 표시된 키 위치와 펌웨어의 키 인덱스가 맞지 않는 상태에서 키맵을 변경하면 의도하지 않은 위치의 키가 바뀔 수 있습니다. 따라서 배열이 어긋나 있거나 키 수가 맞지 않을 때는 설정을 계속 저장하기보다 올바른 JSON을 다시 확인하는 것이 안전합니다.

    실행 TIP

    JSON을 불러온 뒤에는 곧바로 키를 변경하지 말고 화면의 키 개수, Enter 키 모양, 스페이스바 길이, 노브 위치가 실제 키보드와 일치하는지 먼저 확인하는 것이 좋습니다. 물리 배열이 맞아야 화면에서 선택한 키와 펌웨어에 전달되는 키 위치도 정확하게 대응합니다.

    3. VIA는 Vendor ID와 Product ID로 장치를 찾는다

    JSON 파싱이 끝나면 VIA는 이 정의가 어떤 키보드에 해당하는지 확인해야 합니다. 여기서 핵심이 되는 값이 Vendor IDProduct ID입니다. 보통 VID와 PID라고 줄여 부릅니다.

    USB 장치는 컴퓨터에 연결될 때 자신이 어떤 제조사와 제품에 해당하는지 식별 정보를 제공합니다. VIA 키보드 정의 JSON에도 이와 대응하는 Vendor ID와 Product ID가 들어 있습니다. VIA는 JSON 속의 값과 브라우저가 감지한 USB HID 장치의 값을 비교해 서로 맞는 정의를 연결합니다.

    예를 들어 JSON의 Vendor ID는 같지만 Product ID가 다른 경우, 같은 제조사에서 만든 다른 모델이거나 동일 제품의 다른 버전일 수 있습니다. VIA는 이름이 비슷하다는 이유만으로 장치를 연결하지 않고, 실제 식별값을 중심으로 정의를 선택합니다.

    장치 식별 과정
    • JSON에서 Vendor ID와 Product ID를 읽습니다.
    • 브라우저가 접근 가능한 HID 장치 목록을 확인합니다.
    • 사용자가 장치 연결 권한을 승인합니다.
    • 장치가 보고한 VID·PID와 JSON 값을 비교합니다.
    • 값이 일치하면 해당 키보드 정의를 장치에 연결합니다.
    • 일치하지 않으면 정의는 읽혔어도 Configure 화면에 장치가 나타나지 않을 수 있습니다.

    여기서 중요한 것은 JSON을 Design 탭에 불러오는 것과 장치 접근을 승인하는 것이 별개의 과정이라는 점입니다. JSON 파일은 키보드 정의를 VIA에 등록하지만, 브라우저가 자동으로 모든 USB 장치에 접근할 수 있게 하지는 않습니다.

    웹 기반 VIA는 브라우저의 장치 접근 기능을 이용하기 때문에 사용자가 직접 연결할 장치를 선택하고 권한을 허용해야 합니다. JSON이 정상인데도 키보드가 나타나지 않는다면 정의 파일뿐 아니라 브라우저 권한과 실제 연결 모드도 함께 확인해야 합니다.

    또한 일부 키보드는 유선, 2.4GHz, 부트로더 모드에서 서로 다른 Product ID를 사용할 수 있습니다. 제조사가 연결 방식이나 펌웨어 버전에 따라 별도의 JSON을 제공하는 이유도 이러한 장치 식별값이나 통신 구현이 다를 수 있기 때문입니다.

    💡 Link&Tem Insight

    VIA가 키보드의 제품명만 보고 장치를 찾는다고 생각하기 쉽지만, 제품명은 사용자에게 보여주는 표시 정보에 가깝습니다. 실제 연결에서는 VID와 PID 같은 USB 식별값이 더 중요합니다. 따라서 다른 모델의 이름을 JSON에서 수정한다고 해서 그 JSON이 내 키보드와 호환되는 것은 아닙니다.

    4. 키보드 이름과 식별값을 읽은 뒤 레이아웃을 해석한다

    장치 식별에 필요한 정보가 확인되면 VIA는 키보드를 화면에 그리기 위한 레이아웃 데이터를 해석합니다. 키보드 정의 JSON에는 각 키의 위치, 너비, 높이, 간격, 회전 같은 시각적 정보가 포함될 수 있습니다.

    일반적인 키 하나는 1유닛 크기를 기준으로 배치됩니다. 스페이스바처럼 긴 키는 여러 유닛의 너비를 가지며, ISO Enter처럼 특수한 모양은 너비와 높이 정보가 함께 사용됩니다. 인체공학 배열이나 분리형 키보드는 키 그룹에 회전값을 적용해 실제 배치와 비슷하게 표현할 수도 있습니다.

    VIA는 이러한 값을 순서대로 읽어 화면 좌표로 변환합니다. 배열 안에서 앞에 있는 항목부터 키 요소를 만들고, 현재 좌표와 크기를 계산한 뒤 다음 키를 배치합니다. 행이 바뀌면 세로 좌표를 이동하고, 별도의 위치값이 있으면 기본 간격에 그 값을 더해 키를 떨어뜨려 놓습니다.

    레이아웃 정보 VIA에서의 역할
    X·Y 위치 키가 표시될 가로·세로 위치 결정
    너비·높이 스페이스바, Enter, Shift 등 키 크기 표현
    회전값 분리형·인체공학 배열의 기울기 표현
    키 라벨 키 위치와 옵션·매트릭스 정보 연결
    레이아웃 옵션 ANSI·ISO, 분할 스페이스바 등 선택 구성 표시

    이 과정에서 VIA가 만드는 것은 단순한 키보드 그림이 아닙니다. 화면에 표시된 각 키에는 펌웨어의 특정 키 위치와 연결되는 정보가 함께 붙습니다. 사용자가 키 하나를 클릭했을 때 어느 레이어의 몇 번째 위치를 읽거나 변경해야 하는지 알 수 있어야 하기 때문입니다.

    따라서 시각적 위치만 비슷하게 만든 JSON은 충분하지 않습니다. 화면에서 첫 번째 줄 세 번째 키로 보이는 요소가 실제 펌웨어의 어느 매트릭스 위치 또는 키 인덱스에 해당하는지 정확히 연결되어야 합니다.

    5. 화면의 키와 펌웨어의 키 위치는 어떻게 연결될까?

    VIA 화면에서 키를 선택하면 해당 키의 색상이 바뀌고 아래쪽에 지정 가능한 키코드 목록이 나타납니다. 이때 VIA는 화면의 픽셀 좌표를 그대로 펌웨어에 보내지 않습니다. JSON을 해석하며 만들어 둔 논리적 키 위치를 기준으로 명령을 구성합니다.

    키보드 펌웨어는 보통 키를 행과 열로 구성된 매트릭스로 관리합니다. 하지만 사용자가 보는 물리 배열의 순서와 전기적 매트릭스 배선 순서는 같지 않을 수 있습니다. 화면에서는 왼쪽 위부터 오른쪽으로 키가 배열되어 있어도 PCB에서는 배선 효율 때문에 서로 다른 행과 열에 연결될 수 있습니다.

    이 차이를 연결하는 것이 레이아웃 정의입니다. JSON은 사용자에게 보여줄 물리적 배치를 구성하면서 각 키를 펌웨어가 이해하는 위치와 연결합니다. VIA는 이 연결 관계를 사용해 사용자가 선택한 화면상의 키가 펌웨어의 어느 위치에 해당하는지 판단합니다.

    화면의 키를 선택했을 때
    1. 사용자가 VIA 화면에서 특정 키를 클릭합니다.
    2. VIA가 해당 화면 요소에 연결된 키 위치를 확인합니다.
    3. 현재 선택된 레이어 번호를 확인합니다.
    4. 펌웨어에 해당 위치의 현재 키코드를 요청하거나 변경 명령을 준비합니다.
    5. 펌웨어가 응답한 키코드를 VIA 화면의 이름과 아이콘으로 변환합니다.

    JSON의 키 순서와 펌웨어가 기대하는 키 순서가 다르면 화면에서 A 위치를 바꿨는데 실제로는 다른 키가 변경되는 현상이 발생할 수 있습니다. 배열은 비슷하게 보이지만 특정 키만 엉뚱하게 바뀌는 오류라면 단순한 시각적 크기보다 키 위치 매핑이 잘못되었을 가능성을 확인해야 합니다.

    특히 노브, 분할 스페이스바, 추가 매크로 키, 특수 배열을 지원하는 제품은 일반적인 ANSI 배열보다 정의가 복잡합니다. 같은 PCB가 여러 물리 배열을 지원하는 경우에는 현재 선택된 레이아웃 옵션에 따라 표시할 키와 숨길 키도 달라져야 합니다.

    실행 TIP

    새 JSON을 적용한 뒤에는 자주 쓰는 키 하나만 바꾸기보다 VIA의 키 테스트 기능으로 전체 배열을 먼저 확인하는 것이 좋습니다. 화면에서 눌린 위치와 실제 키 위치가 일치하는지 확인하면 잘못된 매핑 상태에서 여러 키를 수정하는 실수를 줄일 수 있습니다.

    6. 레이아웃 옵션은 어떻게 선택적으로 표시될까?

    하나의 키보드 PCB가 항상 하나의 물리 배열만 지원하는 것은 아닙니다. 같은 PCB에서 ANSI Enter와 ISO Enter를 선택할 수 있거나, 일반 스페이스바와 분할 스페이스바 중 하나를 조립할 수 있습니다. 왼쪽 Shift의 길이, Backspace 분할 여부, 하단 열 배열이 달라지는 제품도 있습니다.

    이런 키보드의 모든 가능한 키를 화면에 동시에 표시하면 실제 조립 상태와 맞지 않는 키가 겹쳐 보이게 됩니다. VIA는 JSON에 정의된 레이아웃 옵션을 읽어 사용자가 선택한 구성에 해당하는 키만 표시합니다.

    레이아웃 옵션은 특정 영역이 몇 가지 구성 중 하나로 바뀔 수 있다는 뜻입니다. 예를 들어 옵션 0의 선택값 0은 ANSI Enter, 선택값 1은 ISO Enter를 나타낼 수 있습니다. JSON의 각 키에는 자신이 어떤 옵션과 선택값에서 표시되어야 하는지 구분하는 정보가 포함될 수 있습니다.

    사용자가 VIA에서 레이아웃 옵션을 바꾸면 전체 JSON을 다시 읽는 것이 아니라 이미 파싱된 정의를 기준으로 표시 조건을 다시 계산합니다. 선택한 조건에 맞지 않는 키 요소는 숨기고, 맞는 키 요소를 활성화해 화면 배열을 다시 구성합니다.

    옵션 예시 선택에 따라 달라지는 부분
    ANSI / ISO Enter 키 모양과 주변 키 배치
    일반 / 분할 Backspace 상단 오른쪽 키 개수와 크기
    일반 / 분할 Space 하단 중앙 키 개수와 너비
    노브 / 일반 키 회전 입력 장치 또는 스위치 표시

    레이아웃 옵션은 단순히 보기 좋은 화면을 만들기 위한 기능이 아닙니다. 실제로 존재하지 않는 키 위치를 사용자가 수정하지 않도록 제한하고, 펌웨어가 지원하는 물리 구성과 VIA 화면을 일치시키는 역할을 합니다.

    다만 JSON에서 지원한다고 표시된 물리 배열이 펌웨어에서도 반드시 올바르게 구현되어 있다는 의미는 아닙니다. 정의 파일은 화면 구성을 설명하고, 실제 키 위치와 기능 지원은 펌웨어 구현에 달려 있습니다. 두 부분이 같은 기준으로 만들어져야 정상적으로 작동합니다.

    💡 Link&Tem Insight

    VIA JSON은 화면 디자인 파일처럼 보이지만 실제로는 사용자 인터페이스와 펌웨어 사이의 번역표 역할까지 담당합니다. 키의 크기와 위치만 정확해서는 부족하며, 레이아웃 옵션과 펌웨어의 키 인덱스가 같은 구조를 가리켜야 합니다.

    7. JSON을 읽었다고 키맵까지 읽은 것은 아니다

    VIA가 JSON을 성공적으로 읽고 키보드 그림을 표시했다고 해서 현재 키맵 정보까지 JSON에서 가져온 것은 아닙니다. JSON은 어떤 키가 어디에 존재하는지 알려주지만, 각 위치에 현재 어떤 키코드가 저장되어 있는지는 키보드 펌웨어에 요청해 확인합니다.

    즉 화면 구조를 만드는 데이터와 실제 설정값을 가져오는 경로가 다릅니다. VIA는 JSON을 이용해 클릭할 수 있는 키 요소를 만든 뒤, 연결된 키보드에 VIA 프로토콜 명령을 보내 각 레이어의 키코드를 읽습니다.

    펌웨어가 반환한 값은 숫자 형태의 키코드일 수 있습니다. VIA는 이 값을 내부 키코드 목록과 비교해 화면에 A, Enter, Left Ctrl, MO(1) 같은 사용자가 이해할 수 있는 이름으로 표시합니다.

    JSON과 펌웨어가 담당하는 정보
    • JSON: 키보드 이름, 장치 식별값, 키 위치, 키 크기, 레이아웃 옵션
    • VIA 애플리케이션: JSON 해석, 화면 생성, 키코드 이름 변환, 사용자 입력 처리
    • 키보드 펌웨어: 현재 레이어별 키코드, 매크로, 조명 설정, 저장 데이터
    • USB 통신: VIA의 읽기·쓰기 명령과 펌웨어 응답 전달

    이 구조 때문에 같은 JSON을 다른 PC에서 불러와도 키보드 내부에 저장된 키맵이 그대로 나타날 수 있습니다. 설정값이 JSON 파일이나 특정 컴퓨터에만 저장된 것이 아니라, VIA 기능을 지원하는 펌웨어의 비휘발성 저장 영역에 기록되는 구성이 일반적이기 때문입니다.

    반대로 JSON만 따로 보관했다고 해서 현재 키맵 설정까지 완전히 백업한 것은 아닐 수 있습니다. 키보드 정의 JSON과 사용자가 저장한 키맵 백업 JSON은 목적과 내부 구성이 다르므로 파일 이름이 같아 보여도 구분해야 합니다.

    Part 1 정리

    VIA는 JSON 파일을 파싱한 뒤 장치 식별값과 레이아웃 정보를 분리해 사용합니다. VID·PID로 연결된 키보드와 정의를 대응시키고, 키의 위치·크기·옵션을 해석해 화면 배열을 생성합니다. 하지만 현재 키맵은 JSON에서 직접 읽는 것이 아니라 VIA 프로토콜을 통해 키보드 펌웨어에 요청합니다. 다음 Part에서는 VIA가 실제 키코드를 읽고 쓰는 과정, Raw HID 통신, 정의 버전 차이, JSON 오류 유형과 해결 방법을 이어서 살펴봅니다.

    8. VIA는 키코드를 어떤 순서로 읽을까?

    키보드 정의 JSON으로 화면 구성이 완료되면 VIA는 연결된 키보드 펌웨어에 현재 설정값을 요청합니다. 이 과정은 일반적인 키보드 입력 보고서와 별도로 동작하는 VIA 명령 통신을 통해 이루어집니다.

    사용자가 아무 키도 누르지 않아도 VIA 화면에 각 키의 현재 기능이 나타나는 이유는 VIA가 펌웨어에 레이어별 키코드를 요청하고, 펌웨어가 저장된 값을 응답하기 때문입니다. VIA는 반환된 숫자 값을 다시 사람이 이해할 수 있는 키 이름으로 변환합니다.

    예를 들어 펌웨어가 특정 위치의 키코드로 기본 문자 A에 해당하는 값을 반환하면 VIA는 화면에 A를 표시합니다. 레이어 이동 키나 매크로 키처럼 추가 인수가 필요한 키코드는 내부 규칙에 따라 MO(1), LT(1, KC_ESC) 같은 형태로 해석될 수 있습니다.

    현재 키맵을 표시하는 흐름
    1. VIA가 키보드 정의 JSON으로 화면의 키 위치를 생성합니다.
    2. 펌웨어가 지원하는 레이어 수와 키맵 구조를 확인합니다.
    3. VIA가 특정 레이어와 키 위치의 키코드를 요청합니다.
    4. 키보드 펌웨어가 저장된 키코드 값을 응답합니다.
    5. VIA가 숫자 값을 키 이름과 기능 이름으로 변환합니다.
    6. 변환된 결과를 화면의 해당 키 위에 표시합니다.

    이 과정은 키 개수와 레이어 수가 많을수록 여러 번 반복될 수 있습니다. VIA가 연결 직후 잠시 로딩하는 것처럼 보이는 이유도 키보드 정의를 읽는 작업뿐 아니라 펌웨어에서 여러 설정값을 가져오는 과정이 함께 진행되기 때문입니다.

    VIA 기능을 활성화한 QMK 펌웨어는 VIA Configurator와 통신할 수 있으며, 키맵과 기타 설정을 장치 쪽에 저장하는 기능을 제공합니다. :contentReference[oaicite:0]{index=0}

    💡 Link&Tem Insight

    VIA 화면에 키보드 배열이 나타났다고 해서 통신이 완전히 정상이라는 뜻은 아닙니다. 배열은 JSON만으로도 만들 수 있지만 현재 키코드를 표시하려면 펌웨어의 응답이 필요합니다. 키보드 그림은 보이지만 키맵이 로딩되지 않는다면 JSON보다 펌웨어 통신 단계에서 문제가 발생했을 가능성이 있습니다.

    9. Raw HID는 VIA 통신에서 어떤 역할을 할까?

    일반적인 키보드는 운영체제에 어떤 키가 눌렸는지를 HID 키보드 보고서로 전달합니다. 하지만 VIA가 키맵을 읽고 수정하려면 단순한 키 입력보다 더 다양한 명령과 데이터가 필요합니다.

    QMK의 Raw HID 기능은 키보드와 호스트 프로그램 사이에서 양방향 데이터를 주고받을 수 있도록 만든 통신 방식입니다. 키보드 입력 자체와는 별도의 데이터 채널을 이용해 명령과 응답을 교환할 수 있습니다. :contentReference[oaicite:1]{index=1}

    VIA는 이와 같은 HID 기반 통신을 이용해 키보드에 현재 키코드를 요청하거나 새로운 키코드를 기록하도록 명령합니다. 펌웨어는 받은 데이터에서 명령 종류와 대상 위치를 분석한 뒤 해당 값을 읽거나 변경하고 결과를 VIA에 돌려줍니다.

    일반 키 입력과 VIA 명령의 차이
    구분 일반 키 입력 VIA 설정 통신
    목적 눌린 키 전달 설정 읽기·쓰기
    데이터 키보드 HID 보고서 명령·위치·설정값
    방향 주로 키보드 → PC PC ↔ 키보드
    주요 결과 문자·단축키 입력 키맵·조명·매크로 변경

    이 통신은 브라우저에서 보이는 키보드 그림과는 직접적인 관련이 없습니다. JSON이 화면 구조를 만들고, Raw HID 계열의 통신이 실제 장치 설정을 읽고 쓰는 역할을 맡는 구조입니다.

    따라서 다른 키보드의 JSON을 강제로 불러와 화면을 표시하는 데 성공하더라도 펌웨어가 기대하는 명령 구조나 키 위치가 다르면 정상적으로 설정할 수 없습니다. 화면 정의와 펌웨어 프로토콜 구현이 함께 맞아야 합니다.

    실행 TIP

    VIA 연결 문제를 확인할 때는 키보드 입력이 정상인지와 VIA 설정 통신이 정상인지를 분리해서 확인해야 합니다. 타이핑이 된다고 VIA 통신까지 정상인 것은 아니며, 반대로 VIA에서 장치를 읽더라도 운영체제의 키 입력 설정에 별도 문제가 있을 수 있습니다.

    10. 키 하나를 변경하면 JSON이 수정될까?

    사용자가 VIA 화면에서 키 하나를 선택하고 다른 키코드를 지정하면 정의 JSON 파일이 수정되는 것은 아닙니다. JSON은 키보드 구조를 설명하는 기준으로 계속 유지되고, 실제 변경값은 키보드 펌웨어 쪽으로 전달됩니다.

    VIA는 먼저 현재 선택된 레이어와 화면상의 키 위치를 확인합니다. 그다음 사용자가 선택한 키코드를 펌웨어에서 사용하는 값으로 변환하고, 변경할 레이어·행·열 또는 키 인덱스와 함께 쓰기 명령을 전송합니다.

    키 하나를 변경하는 순서
    1. 사용자가 화면에서 변경할 키를 선택합니다.
    2. VIA가 해당 키의 논리적 위치와 현재 레이어를 확인합니다.
    3. 새로 선택한 기능을 펌웨어용 키코드 값으로 변환합니다.
    4. 키보드에 키맵 변경 명령을 전송합니다.
    5. 펌웨어가 동적 키맵 또는 저장 영역의 값을 갱신합니다.
    6. VIA가 변경된 값을 다시 읽거나 화면에 즉시 반영합니다.

    VIA 펌웨어는 일반적으로 전원이 꺼져도 설정이 유지될 수 있도록 비휘발성 저장 영역을 활용합니다. 다만 저장 방식과 저장 가능한 레이어 수, 매크로 용량은 키보드 펌웨어와 MCU 구성에 따라 달라질 수 있습니다.

    이 때문에 같은 키보드를 다른 컴퓨터에 연결해도 이전에 VIA에서 변경한 키맵이 유지되는 경우가 많습니다. 설정값이 브라우저에만 저장된 것이 아니라 키보드 내부에 기록되어 있기 때문입니다.

    반대로 JSON 파일을 삭제하거나 다른 컴퓨터에서 VIA를 열더라도 키보드 내부의 키맵이 즉시 초기화되지는 않습니다. VIA가 해당 장치를 해석할 수 있는 올바른 정의만 다시 확보하면 펌웨어에 저장된 설정을 읽어올 수 있습니다.

    💡 Link&Tem Insight

    VIA JSON은 설계도이고 키보드 내부 설정은 실제 가구 배치에 가깝습니다. 설계도를 지워도 방 안의 가구가 자동으로 사라지지는 않습니다. 하지만 설계도가 잘못되어 있으면 어떤 위치의 가구를 옮기고 있는지 정확히 알기 어려워집니다.

    11. JSON 버전이 다르면 무엇이 달라질까?

    VIA 키보드 정의에는 규격 버전에 따라 사용할 수 있는 속성과 구조가 달라질 수 있습니다. 오래된 정의와 최신 정의는 기본적인 키보드 식별과 배열 표시라는 목적은 같지만, 사용자 정의 기능과 메뉴 구성 방식에서 차이가 날 수 있습니다.

    VIA V3 정의는 키보드 제조사나 개발자가 사용자 정의 UI를 구성하고 펌웨어의 특정 설정 채널과 연결할 수 있도록 확장된 구조를 제공합니다. 공식 문서에서도 V3 정의가 커스텀 기능을 제어할 수 있는 UI 구성을 지원한다고 설명합니다. :contentReference[oaicite:2]{index=2}

    예를 들어 단순한 키맵 변경 외에 조명 밝기, 애니메이션 속도, 특수 동작 모드, 제조사가 추가한 기능을 VIA 화면에서 조절하려면 JSON의 메뉴 정의와 펌웨어의 명령 처리 코드가 서로 대응해야 합니다.

    항목 기본 정의 확장 정의
    장치 식별 VID·PID VID·PID 및 추가 조건
    키 배열 물리 레이아웃 표시 레이아웃과 확장 요소 표시
    설정 UI 기본 기능 중심 커스텀 메뉴 구성 가능
    펌웨어 조건 기본 VIA 처리 코드 메뉴와 일치하는 처리 코드 필요

    버전 번호만 최신으로 바꾼다고 정의가 자동으로 호환되는 것은 아닙니다. 속성 이름과 데이터 구조를 새 규격에 맞게 작성해야 하며, 사용자 정의 메뉴를 추가했다면 펌웨어도 해당 명령을 처리하도록 구현해야 합니다.

    구형 JSON이 최신 VIA에서 열리지 않거나 일부 기능이 빠져 보인다면 버전 필드만 확인하지 말고 VIA 공식 규격에서 요구하는 전체 구조와 속성을 함께 비교해야 합니다.

    12. JSON 오류는 어느 단계에서 발생할까?

    VIA JSON 문제는 모두 같은 증상으로 나타나지 않습니다. 파일 문법, 정의 규격, 장치 식별, 레이아웃 연결, 펌웨어 통신 중 어느 단계에서 문제가 생겼는지에 따라 현상이 달라집니다.

    따라서 단순히 “VIA가 인식하지 않는다”라고 판단하기보다 JSON을 불러오는 데 실패했는지, 키보드가 연결되지 않는지, 배열만 잘못 나타나는지, 키 변경만 적용되지 않는지를 구분해야 합니다.

    증상 가능한 원인 확인 항목
    파일 자체가 열리지 않음 JSON 문법 오류 쉼표·따옴표·괄호
    정의는 추가되지만 장치가 안 보임 VID·PID 불일치 또는 권한 문제 USB 식별값·브라우저 권한
    키보드 배열이 찌그러짐 레이아웃 좌표·크기 오류 X·Y·W·H·회전값
    특정 키만 엉뚱하게 변경됨 키 위치 매핑 불일치 매트릭스 행·열과 키 순서
    키맵이 계속 로딩 중임 펌웨어 통신 실패 VIA 펌웨어·USB 모드·케이블
    변경값이 재연결 후 사라짐 저장 영역 또는 펌웨어 문제 EEPROM·동적 키맵 설정

    문법 오류는 비교적 쉽게 찾을 수 있지만 키 위치 매핑 오류는 화면이 정상적으로 보이기 때문에 발견하기 어렵습니다. 모든 키를 한 번씩 테스트하고, 각 레이어에서 변경값이 정확한 위치에 적용되는지 확인해야 합니다.

    키보드 제조사가 같은 모델명으로 여러 PCB 리비전이나 펌웨어 버전을 배포했다면 JSON도 버전에 따라 달라질 수 있습니다. 제품 이름이 같더라도 VID·PID, 키 위치, 노브 지원, 레이어 수가 다를 수 있으므로 정확한 리비전에 맞는 파일을 사용해야 합니다.

    실행 TIP

    JSON 문제를 해결할 때는 파일을 반복해서 무작정 불러오기보다 ① 파일 파싱 여부, ② 장치 연결 여부, ③ 배열 표시 여부, ④ 키맵 읽기 여부, ⑤ 변경값 저장 여부 순서로 확인하는 것이 효율적입니다.

    13. JSON 문제인지 펌웨어 문제인지 구분하는 방법

    VIA 오류를 해결할 때 가장 어려운 부분은 JSON 정의와 펌웨어 중 어느 쪽에 문제가 있는지 판단하는 것입니다. 두 요소가 함께 작동하기 때문에 증상만 보고 한쪽을 단정하기 어렵습니다.

    가장 먼저 확인할 수 있는 기준은 화면 배열입니다. 키보드 모양이 전혀 나타나지 않거나 물리 배열과 크게 다르면 JSON 정의 문제일 가능성이 높습니다. 반대로 배열은 정확하지만 키코드를 읽지 못하거나 변경값이 저장되지 않으면 펌웨어 통신 문제를 우선 의심할 수 있습니다.

    빠른 구분 기준
    • 키보드 모양이 잘못됨: JSON 레이아웃 정의 확인
    • 장치 선택 창에 나타나지 않음: 연결 모드·USB 권한·VID/PID 확인
    • 키맵 값을 읽지 못함: VIA 지원 펌웨어와 통신 기능 확인
    • 특정 키만 잘못 바뀜: 키 위치와 매트릭스 매핑 확인
    • 재부팅 후 설정이 사라짐: 펌웨어 저장 기능과 저장 공간 확인
    • 커스텀 메뉴만 작동하지 않음: JSON 메뉴와 펌웨어 핸들러 확인

    또한 VIA에서 키보드가 보이지 않는다고 바로 펌웨어를 다시 플래시하는 것은 권장되지 않습니다. 먼저 케이블, 브라우저 권한, 연결 모드, 올바른 JSON 사용 여부를 확인하는 것이 안전합니다.

    펌웨어 업데이트가 필요한 상황이라면 제조사가 제공한 정확한 모델과 PCB 버전의 파일을 사용해야 합니다. 정의 JSON과 달리 펌웨어 플래시는 키보드 MCU의 실행 프로그램을 변경하므로 잘못된 파일을 적용하면 정상 부팅이 어려워질 수 있습니다.

    14. VIA가 JSON을 읽는 전체 과정 한눈에 보기

    1
    JSON 파일 선택
    브라우저가 사용자가 선택한 로컬 JSON 파일의 텍스트를 읽습니다.
    2
    문법과 규격 해석
    VIA가 JSON을 파싱하고 버전, 이름, 식별값, 레이아웃 데이터를 분리합니다.
    3
    장치 식별
    JSON의 VID·PID와 연결된 HID 장치의 식별값을 비교합니다.
    4
    화면 레이아웃 생성
    키 위치, 크기, 회전, 레이아웃 옵션을 바탕으로 키보드 UI를 만듭니다.
    5
    키 위치 연결
    화면의 각 키를 펌웨어가 사용하는 매트릭스 위치 또는 키 인덱스와 연결합니다.
    6
    현재 설정 요청
    VIA가 키보드에 레이어별 키코드와 지원 설정값을 요청합니다.
    7
    응답값 표시
    펌웨어가 반환한 값을 키 이름과 옵션 값으로 변환해 화면에 표시합니다.
    8
    변경값 전송
    사용자의 변경 내용을 펌웨어에 전송하고 장치의 저장 영역에 반영합니다.

    VIA 공식 규격에서도 키보드 정의 JSON이 물리 키 배열, 레이아웃 옵션, 노브와 조명 같은 설정 요소를 정의하는 파일이라고 설명합니다. :contentReference[oaicite:3]{index=3}

    결국 JSON을 읽는 과정은 단순히 파일을 화면에 표시하는 작업이 아닙니다. VIA가 키보드의 외형과 논리 구조를 이해하고, 연결된 장치와 대응시키며, 펌웨어 통신에 사용할 번역 기준을 만드는 과정입니다.

    15. 자주 묻는 질문

    Q1. JSON을 불러오면 키보드 펌웨어가 바뀌나요?

    아닙니다. 키보드 정의 JSON은 VIA가 장치와 레이아웃을 해석하는 데 사용하는 파일입니다. 펌웨어 플래시 파일과는 역할이 다릅니다.

    Q2. 다른 키보드 JSON을 불러오면 고장 날 수 있나요?

    JSON을 불러오는 것만으로 펌웨어가 바뀌지는 않습니다. 다만 잘못된 키 위치로 설정을 변경하면 의도하지 않은 키가 바뀔 수 있으므로 배열이 맞지 않을 때는 저장 작업을 진행하지 않는 것이 좋습니다.

    Q3. JSON이 정상인데 키보드가 VIA에 안 나타나는 이유는 무엇인가요?

    VID·PID 불일치, 브라우저 장치 권한, USB 케이블, 유선 모드 설정, VIA 미지원 펌웨어 등이 원인일 수 있습니다.

    Q4. JSON 안에 현재 키맵도 저장되어 있나요?

    일반적인 키보드 정의 JSON에는 현재 사용 중인 레이어별 키맵이 저장되지 않습니다. 현재 키맵은 연결된 펌웨어에서 읽어옵니다.

    Q5. 키맵 백업 JSON과 정의 JSON은 같은 파일인가요?

    목적이 다릅니다. 정의 JSON은 키보드 구조를 설명하고, 키맵 백업 파일은 사용자가 설정한 키 배치를 저장하는 용도로 사용됩니다.

    Q6. VIA 화면의 배열만 맞으면 JSON이 정상인가요?

    반드시 그렇지는 않습니다. 키 크기와 위치가 맞아도 화면의 키와 펌웨어의 매트릭스 위치가 잘못 연결되어 있을 수 있습니다. 실제 키 변경 테스트까지 확인해야 합니다.

    Q7. VIA를 종료해도 변경한 키맵이 유지되나요?

    펌웨어가 비휘발성 저장을 정상 지원한다면 대부분 유지됩니다. 저장 방식과 용량은 키보드의 펌웨어 구성에 따라 달라질 수 있습니다.

    함께 보면 좋은 글

    공식 자료

    Sources

    1. VIA 공식 문서, Keyboard Definition Specification

    2. VIA 공식 문서, Layout Options

    3. VIA 공식 문서, Configuring QMK

    4. VIA 공식 문서, VIA Version 3 Changes

    5. QMK 공식 문서, Raw HID

    LINK&TEM 한 줄 정리
    VIA JSON은 키보드 설정값을 담은 펌웨어가 아니라, VIA가 키보드의 구조를 이해하고 화면의 키와 펌웨어 위치를 연결하도록 돕는 정의 파일입니다.
  • VIA JSON 구조 완벽 이해: 키보드 배열과 펌웨어 연결 원리

    VIA JSON 구조 완벽 이해: 키보드 배열과 펌웨어 연결 원리

    LINK&TEM GUIDE

    VIA JSON 구조

    키보드 JSON 파일은 어떤 정보를 담고 있으며 VIA는 어떻게 이를 해석할까?

    📌 핵심 요약
    • VIA JSON은 키보드 펌웨어가 아니라 키보드 레이아웃을 설명하는 메타데이터입니다.
    • JSON에는 키 위치, 레이어, 레이아웃, 메뉴 정보 등이 저장됩니다.
    • VIA는 JSON을 읽어 화면에 키보드를 그리고 사용자가 키를 변경할 수 있도록 합니다.
    • 잘못된 JSON을 사용하면 키 배열이 어긋나거나 일부 기능이 정상적으로 표시되지 않을 수 있습니다.
    • JSON 자체는 키보드 동작을 변경하는 것이 아니라 VIA가 장치를 이해하도록 도와주는 역할을 합니다.

    VIA를 처음 사용하는 사람이라면 가장 먼저 접하는 파일이 바로 JSON입니다. 대부분은 제조사 홈페이지에서 JSON 파일을 다운로드한 뒤 VIA에 불러오기만 하면 된다고 알고 있지만, 정작 JSON 파일 안에 무엇이 들어 있는지, 왜 필요한지는 잘 알려져 있지 않습니다.

    많은 사용자가 JSON을 펌웨어(Firmware)와 같은 것으로 오해하기도 합니다. 하지만 실제로는 역할이 전혀 다릅니다. 펌웨어는 키보드 내부에서 동작하는 프로그램이고, JSON은 VIA가 그 키보드를 이해하기 위한 ‘설명서’에 가깝습니다.

    이번 글에서는 VIA JSON이 어떤 구조로 이루어져 있는지, 각 항목이 어떤 의미를 가지는지, VIA가 JSON을 이용해 키보드 화면을 만드는 과정까지 차근차근 살펴보겠습니다.


    1. VIA JSON이란 무엇인가?

    VIA JSON은 키보드 레이아웃을 설명하는 데이터 파일입니다. 확장자는 ‘.json’이며 JavaScript Object Notation이라는 데이터 표현 방식을 사용합니다. JSON 자체는 프로그래밍 언어가 아니라 사람이 읽기도 쉽고 프로그램도 쉽게 해석할 수 있도록 만든 데이터 형식입니다.

    VIA는 키보드를 연결했을 때 내부 펌웨어의 Vendor ID와 Product ID를 확인한 뒤, JSON에 기록된 정보를 이용하여 화면에 키보드의 모양을 그립니다. 즉 VIA가 화면에 보여주는 키 배열은 JSON에 정의된 내용을 그대로 시각화한 결과라고 볼 수 있습니다.

    중요한 점은 JSON 파일이 키보드를 제어하지 않는다는 것입니다. 실제 키 입력을 처리하는 것은 QMK 기반 펌웨어이며, JSON은 VIA 인터페이스를 구성하는 역할만 담당합니다.

    💡 TIP

    JSON은 ‘키보드의 프로그램’이 아니라 ‘키보드의 설계도’입니다. VIA는 이 설계도를 읽어 사용자에게 키 배열과 설정 화면을 보여줍니다.
    Link&Tem Insight

    QMK는 키 입력을 처리하는 펌웨어를 담당하고 VIA는 설정 인터페이스를 담당합니다. 두 시스템이 서로 분리되어 있기 때문에 펌웨어를 수정하지 않고도 VIA에서 키맵을 변경할 수 있는 구조가 만들어집니다.

    2. JSON 파일에는 어떤 정보가 들어 있을까?

    JSON 파일은 단순히 키 위치만 저장하는 것이 아닙니다. VIA가 필요한 거의 모든 화면 정보가 이 파일 안에 포함됩니다.

    항목 역할
    name 키보드 이름
    vendorId 제조사 식별 번호
    productId 제품 식별 번호
    layouts 키 위치 정보
    matrix 스위치 매트릭스 정보
    menus RGB 등 추가 설정 메뉴

    이처럼 JSON은 단순히 키 하나의 위치만 설명하는 것이 아니라 키보드 전체 인터페이스를 구성하는 정보를 체계적으로 저장하고 있습니다.

    3. layouts 항목의 역할

    가장 중요한 항목은 layouts입니다. VIA에서 보이는 키보드 모양 대부분은 layouts 정보를 기반으로 생성됩니다.

    각 키는 X좌표와 Y좌표, 너비, 높이 등의 값을 가지고 있으며 VIA는 이를 이용해 브라우저 화면 위에 키를 배치합니다.

    예를 들어 Enter 키는 일반 키보다 세로 길이가 길고 Space Bar는 가로 길이가 매우 긴데, 이러한 차이 역시 layouts 안에 정의되어 있습니다.

    실수하기 쉬운 부분

    JSON이 키 위치를 설명하기 때문에 다른 모델의 JSON을 적용하면 키 위치가 어긋나거나 일부 키가 겹쳐 보이는 현상이 발생할 수 있습니다.

    4. Matrix 정보는 왜 필요할까?

    겉으로 보기에는 키보드 배열만 있으면 될 것 같지만 실제 키보드는 Matrix 구조로 동작합니다.

    각 키는 Row와 Column의 교차점으로 연결되어 있으며 펌웨어는 이 Matrix를 계속 스캔하면서 눌린 키를 찾습니다.

    JSON 안의 Matrix 정보는 화면의 키와 실제 펌웨어 안의 위치를 연결하는 역할을 합니다. 따라서 사용자가 VIA에서 특정 키를 클릭하면 VIA는 Matrix 번호를 통해 해당 위치를 정확하게 찾아 변경 요청을 보낼 수 있습니다.

    Link&Tem Insight

    Matrix 번호는 실제 PCB 회로와 연결됩니다. 따라서 화면에서는 오른쪽 Shift를 선택했더라도 내부적으로는 특정 Row와 Column 번호를 대상으로 데이터를 전송하게 됩니다.

    Part 1 정리

    이번 Part에서는 VIA JSON이 무엇인지, JSON이 담고 있는 핵심 정보와 layouts, Matrix 구조가 어떤 역할을 하는지 살펴보았습니다. 다음 Part에서는 VIA가 JSON을 실제로 읽는 순서와 menus 구조, 레이어 정보, JSON 오류가 발생하는 이유, FAQ 및 함께 보면 좋은 글까지 이어서 정리하겠습니다.

    6. VIA는 JSON 파일을 어떤 순서로 읽을까?

    VIA에서 JSON 파일을 불러오면 파일에 적힌 내용을 단순히 화면에 그대로 출력하는 것이 아닙니다. 먼저 JSON 문법이 올바른지 확인하고, 장치를 구분하는 정보와 키보드 배열 정보를 차례로 해석한 뒤 실제 연결된 키보드와 통신할 준비를 합니다.

    전체 흐름을 간단히 정리하면 JSON 문법 확인 → 장치 정보 확인 → 화면 레이아웃 생성 → 키보드 연결 승인 → 펌웨어와 통신 순서로 이해할 수 있습니다. JSON은 키보드의 펌웨어 자체가 아니라 VIA가 키보드를 이해하기 위해 사용하는 정의 파일에 가깝습니다.

    VIA의 JSON 처리 흐름
    1. 불러온 파일이 정상적인 JSON 형식인지 검사합니다.
    2. 키보드 이름, Vendor ID, Product ID 등의 장치 정보를 확인합니다.
    3. layouts에 정의된 키 위치를 바탕으로 화면 배열을 만듭니다.
    4. 사용자가 장치 접근을 허용하면 실제 키보드와 연결합니다.
    5. VIA 프로토콜을 통해 현재 키맵과 레이어 정보를 읽습니다.
    6. 사용자가 변경한 키 설정을 키보드의 동적 키맵 영역에 기록합니다.

    여기서 중요한 부분은 JSON 파일을 불러오는 것과 실제 키보드를 연결하는 것은 별개의 과정이라는 점입니다. JSON을 정상적으로 불러오면 화면에 키보드 모양이 나타날 수 있지만, 실제 장치 연결이 완료되지 않았다면 키 변경 내용은 키보드에 저장되지 않습니다.

    반대로 키보드가 USB 장치로 정상 연결되어 있어도 VIA가 해당 키보드의 배열 정보를 알지 못하면 화면에 키 배열을 제대로 표시할 수 없습니다. 이 때문에 사이드로드 방식의 VIA 키보드는 JSON 불러오기와 장치 승인을 모두 완료해야 합니다.

    💡 TIP

    VIA 화면에 키보드 배열은 보이는데 키를 눌러도 반응하지 않는다면 JSON보다 장치 승인 상태를 먼저 확인해보는 것이 좋습니다. 반대로 장치는 연결되는데 배열이 비어 있거나 이상하다면 JSON의 장치 정보와 layouts 구성을 확인해야 합니다.
    🔎 Insight

    JSON은 키 입력을 직접 처리하지 않습니다. 실제 키 스캔, 디바운스, 레이어 전환과 USB HID 전송은 키보드 펌웨어가 담당합니다. JSON은 VIA가 그 펌웨어의 설정 가능한 구조를 사용자에게 보여주기 위한 인터페이스 정의에 가깝습니다.

    7. menus는 무엇을 정의할까?

    VIA JSON에서 menus는 키 배열 외에 사용자가 조절할 수 있는 추가 설정 화면을 정의할 때 사용됩니다. 대표적으로 조명 효과, 밝기, 애니메이션 속도, 특정 펌웨어 기능과 같은 항목을 VIA 화면에 표시할 수 있습니다.

    다만 menus에 원하는 설정 이름을 임의로 적는다고 해서 기능이 새로 생기는 것은 아닙니다. 해당 기능을 실제로 처리하는 코드가 키보드 펌웨어에 구현되어 있어야 하며, JSON에 정의된 명령과 펌웨어 내부의 설정 처리 방식도 서로 일치해야 합니다.

    menus에 표시할 수 있는 항목 예시
    • RGB 조명 효과 선택
    • 조명 밝기와 속도 조절
    • LED 색상 또는 채도 조절
    • 키보드별 사용자 지정 기능
    • 펌웨어가 지원하는 토글 및 슬라이더 설정

    menus는 일반적인 키맵 변경보다 구조가 복잡합니다. 화면에 표시될 컨트롤 종류뿐 아니라 사용자가 값을 바꿨을 때 어떤 명령을 보내야 하는지도 연결되어야 하기 때문입니다. 펌웨어에 없는 기능을 JSON 메뉴에만 추가하면 버튼이나 슬라이더는 나타나더라도 정상적으로 작동하지 않을 수 있습니다.

    주의할 점

    다른 키보드의 JSON에서 RGB 메뉴 부분만 복사해 붙이는 방식은 권장되지 않습니다. 같은 RGB 기능처럼 보여도 펌웨어가 사용하는 채널, 명령 번호, 지원 범위가 다를 수 있습니다.

    8. VIA JSON과 레이어의 관계

    레이어는 하나의 물리 키에 여러 기능을 배치할 수 있게 해주는 구조입니다. 기본 레이어에서는 일반 문자 키로 작동하지만, Fn 키를 누른 상태에서는 밝기 조절이나 미디어 제어 키로 작동하도록 구성할 수 있습니다.

    VIA 화면에서 Layer 0, Layer 1, Layer 2처럼 여러 페이지가 표시되지만, 실제 레이어 수와 키맵 저장 공간은 펌웨어가 결정합니다. JSON은 사용자가 레이어별 배열을 확인하기 쉽도록 키보드 모양을 표현하며, 실제 키코드 데이터는 VIA 프로토콜을 통해 펌웨어에서 읽어옵니다.

    구분 주요 역할
    JSON 화면에 표시할 키 위치와 선택 가능한 레이아웃을 정의
    VIA 사용자의 키 변경 명령을 키보드에 전달
    펌웨어 레이어 수, 키코드 처리, 동적 키맵 저장을 실제로 담당
    EEPROM·플래시 변경된 동적 키맵을 전원이 꺼진 뒤에도 유지

    예를 들어 JSON에 레이어처럼 보이는 배열을 여러 개 추가하더라도 펌웨어가 그만큼의 동적 레이어를 지원하지 않으면 실제 사용 가능한 레이어 수는 늘어나지 않습니다. 레이어를 추가하려면 QMK 펌웨어 설정과 메모리 크기까지 함께 고려해야 합니다.

    또한 VIA에서 자주 사용하는 MO(1), TG(1), TO(1) 같은 키코드는 레이어를 사용하는 방식이 서로 다릅니다. MO는 누르는 동안만 지정 레이어를 활성화하고, TG는 레이어를 켜거나 끄며, TO는 지정한 레이어로 전환합니다.

    레이어 키를 배치할 때 확인할 점
    • 이동한 레이어에서 기본 레이어로 돌아올 키가 있는지 확인합니다.
    • Fn 키를 변경하기 전 현재 위치를 기록해두는 것이 안전합니다.
    • 레이어 전환 키를 여러 개 배치하면 복구가 쉬워집니다.
    • 펌웨어가 지원하는 레이어 수를 초과해 설정할 수는 없습니다.
    🔎 Insight

    VIA에서 키를 바꾸면 펌웨어 소스 코드가 다시 컴파일되는 것이 아닙니다. 이미 펌웨어 안에 마련된 동적 키맵 저장 영역의 값만 변경됩니다. 그래서 설정이 빠르게 적용되지만, 펌웨어가 처음부터 지원하지 않는 기능까지 VIA만으로 추가할 수는 없습니다.

    9. VIA JSON에서 자주 발생하는 오류

    VIA JSON 오류는 크게 문법 오류, 장치 식별 오류, 레이아웃 오류, 펌웨어 호환 오류로 나눌 수 있습니다. 화면에 파일을 불러오지 못했다는 메시지가 나타난다면 먼저 JSON 문법을 확인해야 하고, 파일은 열리지만 키보드를 찾지 못한다면 Vendor ID와 Product ID를 확인해야 합니다.

    증상 가능한 원인 확인 방법
    JSON이 열리지 않음 쉼표, 따옴표, 괄호 오류 JSON 문법 검사기로 구조 확인
    배열만 보이고 연결되지 않음 장치 승인 또는 VID·PID 불일치 USB 연결과 장치 선택 창 확인
    키 위치가 어긋남 layouts 좌표 또는 키 개수 오류 물리 배열과 JSON 배열 비교
    특정 키 설정이 다른 키에 적용됨 JSON 순서와 매트릭스 매핑 불일치 펌웨어 키맵 순서와 정의 비교
    메뉴는 보이지만 작동하지 않음 펌웨어에 명령 처리 기능이 없음 펌웨어 지원 기능과 메뉴 정의 확인

    쉼표와 괄호 오류

    JSON은 항목과 항목 사이에 쉼표가 필요하지만 마지막 항목 뒤에는 불필요한 쉼표를 허용하지 않는 경우가 많습니다. 또한 중괄호와 대괄호가 하나라도 빠지면 전체 파일을 읽지 못할 수 있습니다. 사람이 보기에는 작은 오타처럼 보여도 VIA 입장에서는 파일 구조가 완전히 깨진 것으로 판단할 수 있습니다.

    Vendor ID와 Product ID 불일치

    VID와 PID는 USB 장치를 구분하는 핵심 값입니다. JSON에 기록된 값과 실제 키보드가 보고하는 값이 다르면 VIA는 화면 정의와 연결된 장치를 같은 제품으로 판단하지 못할 수 있습니다. 같은 제품명이라도 유선·무선 리시버 또는 펌웨어 버전에 따라 식별 정보가 달라질 가능성이 있습니다.

    키 배열 순서 불일치

    화면에 그려지는 키의 순서와 펌웨어가 기대하는 키맵 순서가 다르면 사용자가 클릭한 키와 실제 변경되는 키가 달라질 수 있습니다. 이 오류는 배열이 비슷한 다른 모델의 JSON을 복사해 수정할 때 특히 자주 발생합니다.

    지원하지 않는 VIA 정의 버전

    VIA 정의 파일은 사용되는 스키마와 기능에 따라 구조가 달라질 수 있습니다. 오래된 정의 파일을 최신 VIA 환경에서 사용하거나, 반대로 최신 형식의 JSON을 오래된 프로그램에서 열면 일부 필드가 인식되지 않을 수 있습니다. 제조사에서 제공하는 최신 파일을 우선 사용하는 이유가 여기에 있습니다.

    💡 TIP

    JSON을 수정하기 전에는 원본 파일을 별도로 복사해두는 것이 좋습니다. 오류가 발생했을 때 수정 지점을 찾는 것보다 정상 작동하던 원본으로 돌아간 뒤 한 항목씩 변경하는 편이 훨씬 빠릅니다.

    10. VIA JSON, QMK 키맵, VIAL 구조 차이

    VIA JSON과 QMK 키맵은 모두 키보드 배열과 관련되어 있지만 역할은 다릅니다. QMK 키맵은 펌웨어를 빌드할 때 포함되는 실제 키 동작 코드이고, VIA JSON은 이미 빌드된 펌웨어를 VIA 화면에서 설정하기 위한 정의 파일입니다.

    VIAL은 QMK 기반 펌웨어와 그래픽 설정 도구를 결합한다는 점에서는 VIA와 비슷하지만, 장치 정의와 보안 절차, 지원 기능 구성에서 차이가 있습니다. VIAL은 키보드 펌웨어 안에 더 많은 정의 정보를 포함하고 다양한 고급 기능을 제공하는 방식으로 설계됩니다.

    구분 VIA JSON QMK 키맵 VIAL
    주요 목적 VIA 화면 정의 펌웨어 동작 구현 실시간 키보드 설정
    적용 방식 파일 불러오기 또는 등록 컴파일 후 플래싱 VIAL 프로그램 연결
    기능 추가 펌웨어 지원 범위 내 표시 소스 코드로 직접 구현 지원 기능을 GUI에서 설정
    난이도 비교적 낮음 높음 중간

    단순히 키 위치를 바꾸고 매크로를 설정하려는 사용자라면 VIA만으로 충분한 경우가 많습니다. 반면 펌웨어의 동작 자체를 바꾸거나 새로운 기능을 구현하려면 QMK 소스 수정과 컴파일이 필요합니다. VIAL은 다양한 고급 설정을 GUI에서 다루고 싶을 때 선택할 수 있지만, 키보드가 VIAL 펌웨어를 지원해야 합니다.

    11. VIA JSON을 직접 수정해도 될까?

    기본적인 JSON 문법과 VIA 구조를 이해하고 있다면 직접 수정할 수 있습니다. 예를 들어 키보드 이름을 정리하거나, 실제 제품과 다른 화면상의 키 위치를 바로잡거나, 펌웨어에서 이미 지원하는 옵션을 화면에 표시하도록 수정할 수 있습니다.

    그러나 JSON 수정만으로 매트릭스 회로를 바꾸거나, NKRO를 추가하거나, 스캔 속도를 높이거나, 새로운 키보드 기능을 구현할 수는 없습니다. 이런 동작은 펌웨어와 하드웨어 영역에서 결정됩니다.

    JSON 수정으로 가능한 것과 어려운 것
    • 가능: 화면 키 위치 수정, 키보드 이름 변경, 레이아웃 옵션 정리
    • 조건부 가능: 펌웨어가 이미 지원하는 조명·설정 메뉴 표시
    • 불가능: 물리 매트릭스 변경, 새로운 USB 기능 추가, 스캔 로직 변경
    • 펌웨어 작업 필요: 레이어 수 확장, 사용자 키코드 구현, 기능 자체 추가

    수정할 때는 한 번에 여러 항목을 바꾸지 않는 것이 좋습니다. 원본을 복사한 뒤 키보드 이름, layouts, 메뉴처럼 영역을 나누어 하나씩 수정하고, 변경할 때마다 VIA에서 정상적으로 불러와지는지 확인해야 오류 원인을 쉽게 찾을 수 있습니다.

    🔎 Insight

    VIA JSON을 키보드 드라이버라고 부르는 경우가 있지만, 운영체제 수준의 장치 드라이버와는 성격이 다릅니다. JSON은 키보드의 USB 통신을 가능하게 하는 파일이 아니라 VIA 내부에서 장치를 설명하고 설정 화면을 구성하는 데이터입니다.

    12. 자주 묻는 질문

    Q. VIA JSON을 불러오면 키보드 펌웨어도 바뀌나요?

    아닙니다. JSON은 VIA 화면에서 키보드 구조를 설명하는 파일입니다. 펌웨어를 교체하거나 업데이트하려면 별도의 펌웨어 파일과 플래싱 과정이 필요합니다.

    Q. 다른 키보드의 JSON을 불러오면 고장 날 수 있나요?

    일반적으로 JSON을 잘못 불러온 것만으로 하드웨어가 바로 손상되지는 않습니다. 다만 배열이 잘못 표시되거나 엉뚱한 키가 변경될 수 있으므로 자신의 모델과 펌웨어에 맞는 파일을 사용해야 합니다.

    Q. JSON에 키를 추가하면 실제 키보드에도 키가 생기나요?

    아닙니다. JSON은 화면 표현만 정의합니다. 실제 키 수와 위치는 PCB 매트릭스, 펌웨어 키맵, 물리 스위치 배치에 의해 결정됩니다.

    Q. VIA 설정은 키보드를 분리하면 사라지나요?

    정상적인 VIA 지원 펌웨어라면 변경한 동적 키맵이 키보드의 비휘발성 저장 영역에 기록되므로 USB 케이블을 분리해도 유지됩니다. 공장 초기화나 펌웨어 교체 시에는 설정이 초기화될 수 있습니다.

    Q. JSON은 정상인데 VIA가 키보드를 찾지 못하는 이유는 무엇인가요?

    데이터 전송을 지원하지 않는 케이블, 잘못된 연결 모드, 브라우저 권한 거부, VID·PID 불일치, VIA 기능이 없는 펌웨어 등이 원인일 수 있습니다. 유선 연결과 Chrome 또는 Edge 환경부터 확인하는 것이 좋습니다.

    Q. VIA JSON으로 NKRO나 Polling Rate를 바꿀 수 있나요?

    일반적인 VIA JSON만으로는 바꿀 수 없습니다. NKRO 처리, 스캔 주기, USB Polling Rate 같은 항목은 주로 키보드 펌웨어와 USB 장치 설정에서 결정됩니다.

    📚 함께 보면 좋은 글

    VIA JSON의 역할을 이해했다면 키보드 입력 처리 과정과 VIA·VIAL의 구조도 함께 살펴보는 것이 좋습니다. 각 개념이 어느 영역에서 작동하는지 비교하면 JSON으로 가능한 설정과 펌웨어 수정이 필요한 작업을 더 명확하게 구분할 수 있습니다.

    13. 공식 자료

    VIA JSON을 직접 작성하거나 수정하려면 예제 파일만 복사하기보다 VIA와 QMK의 공식 문서를 함께 확인하는 것이 안전합니다. 특히 정의 파일 버전, 동적 키맵, 장치 식별 정보는 사용하는 펌웨어와 VIA 환경에 따라 달라질 수 있습니다.

    14. Sources

    Link&Tem 한 줄 정리

    VIA JSON은 키보드의 기능을 만드는 펌웨어가 아니라, VIA가 장치와 배열을 이해하고 설정 화면을 구성하도록 돕는 구조 설명서입니다.

  • NKRO 동작 원리|키보드는 여러 키를 어떻게 동시에 인식할까?

    NKRO 동작 원리|키보드는 여러 키를 어떻게 동시에 인식할까?

    LINK&TEM GUIDE

    NKRO 동작 원리

    모든 키를 동시에 입력해도 왜 정확하게 인식될까?

    📌 핵심 요약
    • NKRO는 N-Key Rollover의 약자로 모든 키 입력을 동시에 인식하는 기술입니다.
    • 단순히 USB 속도가 빠르기 때문이 아니라 키보드 내부 스캔 구조와 HID 리포트 방식이 함께 작동한 결과입니다.
    • 매트릭스 구조만으로는 고스팅이 발생할 수 있으므로 대부분의 NKRO 키보드는 다이오드를 사용합니다.
    • QMK와 VIA, VIAL을 지원하는 대부분의 커스텀 키보드는 NKRO를 기본적으로 지원합니다.
    • 게임뿐 아니라 단축키가 많은 작업 환경에서도 NKRO는 입력 정확도를 높여 줍니다.

    기계식 키보드를 살펴보다 보면 NKRO 지원이라는 문구를 자주 보게 됩니다. 하지만 실제로 NKRO가 무엇을 의미하는지, 왜 필요한 기술인지 정확히 이해하는 경우는 많지 않습니다.

    많은 사람들이 NKRO를 “동시에 여러 키를 누를 수 있는 기능” 정도로 알고 있지만 실제 내부에서는 훨씬 복잡한 과정이 진행됩니다. 키보드는 수백 번의 스캔을 반복하면서 어떤 키가 눌렸는지 확인하고, 그 결과를 USB HID Report 형태로 운영체제에 전달합니다. 이 과정에서 여러 키를 동시에 안정적으로 전달하기 위한 구조가 바로 NKRO입니다.

    이번 글에서는 NKRO가 만들어진 이유부터 키보드 내부 동작 과정, USB HID Report와의 관계, 왜 다이오드가 필요한지, 그리고 실제 게임과 작업 환경에서 어떤 차이를 만드는지까지 순서대로 알아보겠습니다.


    1. NKRO란 무엇인가?

    NKRO는 N-Key Rollover의 약자입니다. 여기서 N은 특정 숫자가 아니라 “제한이 없는 개수”를 의미합니다. 다시 말해 키보드에 존재하는 모든 키를 동시에 눌러도 각각을 독립적으로 인식할 수 있는 구조를 의미합니다.

    예를 들어 일반적인 6KRO 키보드는 수정키(Ctrl, Shift, Alt 등)를 제외하면 동시에 최대 6개의 일반 키만 USB 보고서에 담을 수 있습니다. 반면 NKRO는 키 개수 제한 대신 비트 단위의 상태 정보를 전송하기 때문에 사실상 모든 키를 동시에 전달할 수 있습니다.

    💡 TIP

    NKRO는 키를 “더 빨리” 읽는 기술이 아닙니다. 여러 개의 키 상태를 동시에 독립적으로 저장하고 전송하는 방식이라고 이해하는 것이 정확합니다.

    2. 왜 NKRO가 필요할까?

    초기의 키보드는 문서 작성이 주목적이었습니다. 사람이 동시에 누르는 키 개수가 많지 않았기 때문에 2~6개의 동시 입력만으로도 충분했습니다.

    하지만 게임에서는 상황이 완전히 달라집니다. 이동(WASD), 달리기(Shift), 점프(Space), 스킬(QERF), 아이템 숫자키까지 동시에 입력하는 경우가 흔합니다. 여기에 음성 채팅 단축키나 매크로까지 사용하면 동시에 입력되는 키 수는 훨씬 많아집니다.

    영상 편집이나 CAD 프로그램에서도 여러 Modifier 키와 단축키를 동시에 사용하는 경우가 많기 때문에 입력 제한이 작업 효율에 직접적인 영향을 줄 수 있습니다.

    NKRO가 특히 중요한 환경
    • FPS 게임
    • 리듬 게임
    • MMORPG
    • 영상 편집
    • 프로그래밍
    • CAD·3D 작업
    🔍 Link&Tem Insight USB 규격이 NKRO를 막는 것은 아닙니다. 실제 제한은 대부분 HID Report Descriptor가 어떻게 설계되었는지에 따라 결정됩니다. 따라서 같은 USB 연결이라도 키보드마다 동시 입력 가능한 개수가 달라질 수 있습니다.

    3. 키보드는 여러 키를 어떻게 읽을까?

    키보드는 각각의 스위치를 독립적인 전선으로 연결하지 않습니다. 대신 행(Row)과 열(Column)로 이루어진 매트릭스(Matrix) 구조를 사용합니다.

    컨트롤러는 매우 빠른 속도로 각 행을 하나씩 활성화한 뒤 모든 열을 읽습니다. 이를 반복하면서 어떤 위치의 스위치가 닫혔는지 확인합니다. 이것이 바로 키보드 스캔(Scanning)입니다.

    스캔이 완료되면 컨트롤러는 현재 눌린 모든 키 목록을 메모리에 저장하고, USB Polling 시점마다 PC로 전달합니다.

    실수하기 쉬운 부분

    Scan Rate가 높다고 NKRO가 되는 것은 아닙니다. Scan Rate는 얼마나 자주 키를 확인하는지이고, NKRO는 확인한 결과를 얼마나 많이 저장하고 전달할 수 있는지에 대한 개념입니다.
    🔍 Link&Tem Insight QMK Documentation에서는 Matrix Scan과 HID Report를 별개의 과정으로 설명합니다. 즉 키를 읽는 과정과 USB로 전달하는 과정은 내부적으로 서로 다른 단계이며 각각 독립적으로 최적화됩니다.

    4. 고스팅(Ghosting)은 왜 발생할까?

    매트릭스 구조에서는 특정 조합의 키를 동시에 누르면 실제로 누르지 않은 키가 눌린 것처럼 보이는 현상이 발생할 수 있습니다. 이것을 Ghosting이라고 합니다.

    예를 들어 네 개의 스위치가 사각형 형태를 만들면 전류가 예상하지 못한 방향으로 흐를 수 있고, 컨트롤러는 존재하지 않는 입력까지 감지하게 됩니다.

    이를 방지하기 위해 대부분의 NKRO 지원 기계식 키보드는 모든 스위치에 다이오드를 추가합니다. 다이오드는 전류가 한 방향으로만 흐르도록 만들어 Ghosting과 Masking 현상을 거의 제거합니다.

    구분 특징
    다이오드 없음 고스팅 발생 가능
    다이오드 있음 각 키를 독립적으로 인식 가능
    NKRO 설계 모든 키 입력을 안정적으로 유지
    Part 1 정리

    NKRO는 단순히 “동시 입력이 많다”는 기능이 아니라 매트릭스 스캔, 다이오드 설계, HID Report 구조가 함께 작동하여 모든 키 입력을 독립적으로 처리하는 기술입니다. 다음에서는 USB HID Report에서 NKRO가 실제로 어떻게 표현되는지, 6KRO와의 차이, VIA·VIAL·QMK와의 관계, 실사용 환경에서 어떤 장점이 있는지 자세히 알아보겠습니다.

    5. NKRO는 키 입력을 어떻게 기록할까?

    NKRO의 핵심은 현재 눌려 있는 여러 키의 상태를 동시에 기록하고, 그 정보를 운영체제에 전달하는 것입니다. 키보드는 사용자가 입력한 글자를 순서대로 저장했다가 보내는 장치가 아닙니다. 매우 짧은 주기로 키 스위치의 상태를 검사한 뒤, 현재 어떤 키가 눌려 있고 어떤 키가 떼어졌는지를 하나의 입력 상태로 정리합니다.

    예를 들어 사용자가 W, A, Shift, Space를 동시에 누르고 있다고 가정해보겠습니다. 키보드 펌웨어는 매트릭스를 스캔하면서 네 키가 모두 활성화되어 있다는 사실을 확인합니다. 이후 디바운스 처리를 거쳐 실제 입력으로 판단된 키를 HID Report에 기록하고, USB 또는 무선 연결을 통해 컴퓨터에 전달합니다.

    NKRO 입력 처리 흐름
    1. 사용자가 여러 스위치를 동시에 누릅니다.
    2. MCU가 키보드 매트릭스의 행과 열을 반복해서 검사합니다.
    3. 다이오드 방향과 전기 신호를 기준으로 눌린 키를 판별합니다.
    4. 디바운스 처리를 통해 일시적인 접점 떨림을 제거합니다.
    5. 키맵과 레이어를 적용해 실제 키코드를 결정합니다.
    6. 현재 눌린 키 상태를 HID Report 형식으로 만듭니다.
    7. 완성된 Report가 운영체제로 전송됩니다.

    이 과정에서 중요한 점은 NKRO가 단순히 많은 키를 감지하는 기능만을 의미하지 않는다는 것입니다. 매트릭스 회로에서 각각의 키를 구분할 수 있어야 하며, 펌웨어가 그 상태를 손실 없이 처리해야 하고, 마지막으로 HID Report가 충분한 수의 키 상태를 표현할 수 있어야 합니다.

    세 단계 중 하나라도 제한이 있으면 완전한 NKRO가 성립하지 않습니다. 회로에서 키를 정확히 구분하더라도 Report가 6개의 일반 키만 표현할 수 있다면 컴퓨터에는 6개까지만 전달될 수 있습니다. 반대로 Report 형식이 NKRO를 지원하더라도 매트릭스에서 Ghosting이 발생하면 실제로 누르지 않은 키가 함께 감지될 수 있습니다.

    💡 핵심 구조

    NKRO는 키 매트릭스 회로, 다이오드, 펌웨어 처리, HID Report 구조가 함께 작동해야 구현됩니다. 제품 설명에 NKRO라고 적혀 있다는 사실만으로 내부 구조를 모두 확인할 수 있는 것은 아닙니다.

    6. 6KRO와 NKRO의 HID Report 차이

    6KRO와 NKRO의 차이를 이해하려면 USB HID Report 구조를 살펴봐야 합니다. 일반적인 USB 키보드는 운영체제에 키 상태를 전달하기 위해 HID Report를 사용합니다. Report에는 모디파이어 키 상태와 일반 키코드가 들어갑니다.

    전통적인 Boot Keyboard Report는 호환성을 우선한 단순한 구조입니다. Ctrl, Shift, Alt, GUI 같은 모디파이어 상태를 기록하는 영역과 일반 키코드 6개를 담는 영역으로 구성되는 경우가 많습니다. 이 방식에서는 일반 키 슬롯이 6개이므로 동시에 표현할 수 있는 일반 키도 최대 6개입니다.

    구분 일반적인 표현 방식 특징
    6KRO 키코드 슬롯 6개 호환성이 높고 구조가 단순합니다.
    NKRO 비트맵 또는 확장 Report 각 키의 눌림 상태를 독립적으로 표현할 수 있습니다.

    NKRO에서는 키코드 목록 대신 비트맵 방식을 사용할 수 있습니다. 각 키에 하나의 비트를 배정하고, 키가 눌리면 해당 비트를 1로 바꾸는 구조입니다. 키가 떼어지면 다시 0으로 돌아갑니다.

    예를 들어 A, S, D 키에 각각 하나의 비트가 배정되어 있다면 세 키를 동시에 누르는 순간 해당 비트들이 모두 1로 표시됩니다. 키의 개수가 늘어나더라도 Report 안에 충분한 비트가 준비되어 있다면 여러 키의 상태를 동시에 표현할 수 있습니다.

    주의할 점

    6KRO의 숫자 6은 일반 키 슬롯을 기준으로 설명하는 경우가 많습니다. Ctrl, Shift, Alt 같은 모디파이어 키는 별도의 비트 영역으로 처리될 수 있으므로 실제로는 모디파이어와 일반 키 6개를 함께 입력할 수 있습니다.

    따라서 6KRO 키보드에서 Shift, Ctrl, W, A, S, D, Space를 동시에 눌렀다고 해서 반드시 입력이 누락되는 것은 아닙니다. Shift와 Ctrl은 모디파이어 영역에서 처리되고, W, A, S, D, Space는 일반 키 슬롯에 기록될 수 있기 때문입니다.

    반면 알파벳이나 숫자처럼 일반 키로 분류되는 키를 7개 이상 동시에 누르면 Report 슬롯이 부족해질 수 있습니다. 이때 펌웨어와 장치 구현에 따라 일부 키가 무시되거나, 오류 상태를 나타내는 특수 값이 보고될 수 있습니다.

    7. 다이오드가 NKRO에 중요한 이유

    키보드 매트릭스에는 제한된 MCU 핀으로 많은 키를 처리하기 위해 행과 열이 사용됩니다. 하지만 단순히 스위치만 격자 형태로 연결하면 여러 키를 동시에 눌렀을 때 전류가 예상하지 않은 경로로 흐를 수 있습니다.

    이 문제를 줄이기 위해 각 스위치에 다이오드를 배치합니다. 다이오드는 전류가 한 방향으로 흐르도록 제한하는 부품입니다. 각 키에 다이오드가 있으면 여러 스위치가 동시에 연결되더라도 전류 경로를 더 명확하게 분리할 수 있습니다.

    예를 들어 같은 매트릭스 안에서 세 개의 키를 눌렀을 때, 다이오드가 없다면 전류가 다른 행과 열로 우회하면서 네 번째 키도 눌린 것처럼 보일 수 있습니다. 다이오드가 각 스위치의 전류 방향을 제한하면 이러한 우회 경로가 차단되어 실제로 누른 키를 더 정확히 구분할 수 있습니다.

    다이오드가 수행하는 역할
    • 매트릭스 안에서 전류가 역방향으로 흐르는 것을 제한합니다.
    • Ghosting이 발생할 수 있는 우회 경로를 차단합니다.
    • 각 스위치의 상태를 독립적으로 판별하기 쉽게 만듭니다.
    • 여러 키를 동시에 누르는 NKRO 구현에 필요한 기반을 제공합니다.

    다만 다이오드가 있다고 해서 자동으로 NKRO가 완성되는 것은 아닙니다. 다이오드는 매트릭스에서 키를 정확히 감지하기 위한 하드웨어 조건입니다. 감지된 입력을 처리하는 펌웨어와 운영체제로 전달하는 Report 구조도 NKRO를 지원해야 합니다.

    Link&Tem Insight

    다이오드는 입력 가능한 키의 숫자를 직접 늘리는 부품이라기보다, 동시에 눌린 키를 서로 혼동하지 않도록 전기 신호를 분리하는 부품입니다. 정확한 감지가 가능해진 뒤에야 펌웨어와 HID Report가 NKRO를 완성할 수 있습니다.

    8. NKRO와 Anti-Ghosting은 같은 기능일까?

    키보드 제품 설명에서는 NKRO와 Anti-Ghosting이 함께 표시되는 경우가 많습니다. 두 용어는 관련이 있지만 완전히 같은 의미는 아닙니다.

    Anti-Ghosting은 여러 키를 눌렀을 때 실제로 누르지 않은 키가 입력되는 Ghosting 현상을 방지하는 개념입니다. 특정 게임 조합이나 자주 사용하는 키 영역에서 Ghosting이 발생하지 않도록 회로를 설계하는 것도 Anti-Ghosting이라고 표현할 수 있습니다.

    NKRO는 동시에 눌린 모든 키를 각각 인식하고 전달하는 기능을 의미합니다. 따라서 완전한 NKRO 키보드는 일반적으로 Ghosting을 방지할 수 있어야 하지만, Anti-Ghosting 키보드가 반드시 모든 키에 대해 NKRO를 지원하는 것은 아닙니다.

    항목 NKRO Anti-Ghosting
    목적 여러 키의 상태를 동시에 인식하고 전달 누르지 않은 키가 입력되는 현상 방지
    적용 범위 전체 배열을 의미하는 경우가 많음 특정 키 조합이나 영역만 적용될 수 있음
    확인 방법 다수의 키를 동시에 눌러 인식 여부 확인 문제가 발생하는 특정 조합을 시험

    일부 멤브레인 키보드는 게임에서 자주 사용하는 WASD 주변 키에 대해서만 여러 키 동시 입력을 지원하기도 합니다. 이러한 제품도 Anti-Ghosting이라고 표시될 수 있지만, 키보드 전체에서 모든 키 조합을 인식하는 NKRO와는 차이가 있습니다.

    9. NKRO 모드와 6KRO 모드를 나누는 이유

    NKRO가 더 많은 키를 처리할 수 있다면 모든 키보드가 항상 NKRO로 동작하면 될 것처럼 보입니다. 하지만 실제 제품에서는 NKRO와 6KRO 모드를 전환할 수 있도록 제공하는 경우가 있습니다.

    가장 큰 이유는 호환성입니다. 일부 BIOS, UEFI, KVM 스위치, 구형 운영체제 또는 특수 장치는 단순한 Boot Keyboard Report를 더 안정적으로 인식할 수 있습니다. 확장된 NKRO Report를 제대로 처리하지 못하는 환경에서는 키보드가 인식되지 않거나 일부 입력이 정상적으로 전달되지 않을 수 있습니다.

    이 때문에 키보드 펌웨어는 부팅 과정이나 호환성이 필요한 환경에서 6KRO 형식을 사용하고, 운영체제가 정상적으로 로드된 뒤에는 NKRO 형식으로 동작하도록 설계될 수 있습니다. 일부 커스텀 키보드는 특정 키 조합이나 VIA·VIAL 설정을 통해 두 모드를 직접 전환할 수 있습니다.

    💡 6KRO가 필요한 상황

    BIOS나 UEFI에서 키보드가 인식되지 않거나 KVM 스위치, 특수 보안 장비, 오래된 시스템에서 입력 문제가 발생한다면 NKRO를 끄고 6KRO 모드로 바꾸는 것이 해결 방법이 될 수 있습니다.

    일반적인 Windows, macOS, Linux 환경에서는 NKRO가 문제없이 동작하는 경우가 많습니다. 하지만 키보드를 여러 장치에 연결하거나 업무용 특수 시스템에서 사용할 계획이라면 전환 기능이 있는지 확인하는 것이 좋습니다.

    10. 무선 키보드에서도 NKRO가 가능할까?

    NKRO는 USB 유선 연결에서만 가능한 기능은 아닙니다. 2.4GHz 무선이나 Bluetooth 연결에서도 장치와 펌웨어가 지원한다면 여러 키를 동시에 전달할 수 있습니다.

    다만 연결 모드에 따라 실제 동시 입력 수가 달라지는 제품이 있습니다. 유선과 2.4GHz에서는 NKRO를 지원하지만 Bluetooth에서는 6KRO로 제한되는 방식이 대표적입니다. Bluetooth의 전송 구조, 펌웨어 메모리, 배터리 사용량, 호환성 등을 고려해 제조사가 Report 크기를 다르게 설정할 수 있기 때문입니다.

    연결 방식 NKRO 가능 여부 확인할 점
    USB 유선 지원 가능 펌웨어와 HID Report 지원 여부
    2.4GHz 지원 가능 수신기와 전용 펌웨어 사양
    Bluetooth 제품별로 다름 6KRO 제한 여부와 운영체제 호환성

    따라서 무선 키보드의 사양에 NKRO라고 적혀 있더라도 모든 연결 모드에서 동일하게 동작하는지는 별도로 확인해야 합니다. 제조사 설명서에서 유선, 2.4GHz, Bluetooth 모드별 동시 입력 지원 수를 구분해 확인하는 것이 가장 정확합니다.

    11. NKRO가 입력 지연을 줄여줄까?

    NKRO는 동시에 인식할 수 있는 키의 수와 관련된 기능입니다. 따라서 NKRO를 지원한다고 해서 키보드의 입력 지연이 자동으로 짧아지는 것은 아닙니다.

    입력 지연은 매트릭스 Scan Rate, 디바운스 시간, 센서 처리, 펌웨어 연산, USB Polling Rate, 무선 전송, 운영체제 처리 등 여러 단계의 영향을 받습니다. NKRO는 이 과정에서 여러 키의 상태를 손실 없이 표현하는 역할을 담당합니다.

    예를 들어 1,000Hz Polling Rate와 빠른 디바운스를 지원하는 6KRO 키보드는 동시 입력 수에는 제한이 있지만 한두 개의 키를 누르는 상황에서는 매우 빠르게 반응할 수 있습니다. 반대로 NKRO를 지원하더라도 Scan Rate가 낮거나 디바운스 시간이 길다면 단일 키 입력 지연이 더 길 수 있습니다.

    Link&Tem Insight

    NKRO는 빠른 키보드를 의미하는 성능 수치가 아닙니다. NKRO는 동시 입력 정확도를 나타내고, Scan Rate와 Polling Rate는 입력을 발견하고 전달하는 주기와 관련됩니다.

    12. NKRO가 실제로 필요한 사용 환경

    일반적인 문서 작성에서는 여러 개의 일반 키를 7개 이상 동시에 누르는 일이 거의 없습니다. Ctrl, Shift, Alt 같은 모디파이어는 별도로 처리되므로 대부분의 단축키도 6KRO 범위 안에서 정상적으로 작동합니다.

    NKRO의 장점은 게임, 음악 프로그램, 리듬 게임, 키보드 입력 테스트, 여러 명이 하나의 키보드를 사용하는 환경처럼 많은 키가 동시에 눌릴 수 있는 상황에서 크게 나타납니다.

    NKRO가 유용한 대표 상황
    • 이동키와 여러 스킬키를 동시에 사용하는 게임
    • 양손으로 많은 키를 누르는 리듬 게임
    • 컴퓨터 키보드를 MIDI 입력처럼 활용하는 프로그램
    • 다수의 단축키와 매크로를 조합하는 작업 환경
    • 키보드 회로와 펌웨어를 테스트하는 커스텀 키보드 개발

    FPS 게임에서도 W, Shift, Ctrl, Space와 여러 기능키를 동시에 누를 수 있습니다. 이 정도는 잘 설계된 6KRO 키보드에서도 처리될 가능성이 높지만, 키 조합에 대한 제한을 신경 쓰지 않고 사용할 수 있다는 점에서 NKRO가 유리합니다.

    반면 인터넷 검색, 문서 작성, 간단한 사무 작업이 중심이라면 NKRO의 차이를 직접 체감하기 어려울 수 있습니다. 이 경우 키감, 배열, 소음, 연결 안정성, 배터리 사용 시간 같은 요소가 실제 만족도에 더 큰 영향을 줄 수 있습니다.

    13. 내 키보드의 NKRO를 확인하는 방법

    키보드가 NKRO를 지원하는지 확인하는 가장 간단한 방법은 키 테스트 도구에서 여러 키를 동시에 눌러보는 것입니다. VIA를 지원하는 키보드라면 VIA의 Key Tester 기능을 사용할 수 있고, 운영체제에서 동작하는 다른 키 테스트 도구를 이용할 수도 있습니다.

    테스트할 때는 한 번에 키를 무작정 많이 누르기보다 조합을 바꿔가며 확인하는 것이 좋습니다. 같은 행이나 같은 열에 있는 키, 대각선 형태의 키, 게임에서 자주 사용하는 키 조합을 차례대로 눌러보면 매트릭스 제한이나 특정 조합 문제를 찾기 쉽습니다.

    테스트 시 주의사항

    키 테스트 화면에서 많은 키가 표시된다고 해서 모든 물리 키 조합이 검증된 것은 아닙니다. 배열 전체의 NKRO를 확인하려면 행과 열이 다른 여러 조합을 반복해서 시험해야 합니다.

    또한 연결 모드를 변경해서 테스트해야 합니다. 유선에서는 모든 키가 정상적으로 인식되지만 Bluetooth에서는 동시 입력 수가 줄어들 수 있습니다. 운영체제, 펌웨어 버전, NKRO 설정 상태에 따라서도 결과가 달라질 수 있습니다.

    14. NKRO 테스트에서 자주 생기는 오해

    첫 번째 오해는 손가락으로 누를 수 있는 키의 수만 확인하면 된다는 것입니다. 사람이 일반적으로 동시에 누를 수 있는 키는 제한적이지만, 특정 조합에서 Ghosting이나 Blocking이 발생하는지는 단순한 숫자만으로 판단하기 어렵습니다.

    두 번째는 테스트 화면에 표시되지 않은 키가 모두 키보드 고장이라는 생각입니다. NKRO 모드가 꺼져 있거나 Bluetooth 모드에서 동시 입력 수가 제한될 수 있고, 운영체제 또는 브라우저가 특정 단축키를 먼저 처리했을 가능성도 있습니다.

    예를 들어 Alt와 Tab 조합은 운영체제의 창 전환 기능으로 사용되고, Ctrl과 W는 브라우저 탭을 닫을 수 있습니다. Windows 키가 포함된 조합도 운영체제 단축키가 실행되어 테스트 화면에서 확인하기 불편할 수 있습니다.

    세 번째는 NKRO가 켜져 있으면 무조건 모든 키가 동시에 입력된다는 생각입니다. Fn 키는 일반적인 HID 키코드로 PC에 직접 전송되지 않고 키보드 내부 레이어를 전환하는 용도로 사용되는 경우가 많습니다. 따라서 Key Tester에서 Fn 키 자체가 표시되지 않는 것은 정상일 수 있습니다.

    15. 자주 묻는 질문

    Q1. NKRO는 모든 키를 정말 동시에 누를 수 있다는 뜻인가요?

    일반적으로 키보드 배열 안의 여러 일반 키를 동시에 인식하고 전달할 수 있다는 뜻입니다. 다만 Fn처럼 내부 레이어 전환에 사용되는 키나 시스템이 별도로 처리하는 특수 키는 일반 키와 동작 방식이 다를 수 있습니다.

    Q2. 6KRO 키보드는 키를 6개만 누를 수 있나요?

    일반 키코드 슬롯이 6개라는 의미로 사용되는 경우가 많습니다. Ctrl, Shift, Alt 같은 모디파이어는 별도 영역에서 처리될 수 있어 모디파이어를 포함하면 6개보다 많은 물리 키가 동시에 인식될 수 있습니다.

    Q3. NKRO와 Anti-Ghosting 중 무엇이 더 좋은가요?

    두 기능은 직접 비교할 대상이 아닙니다. Anti-Ghosting은 잘못된 가상 입력을 막는 개념이고, NKRO는 여러 키를 동시에 인식하고 전달하는 기능입니다. 완전한 NKRO를 구현하려면 Ghosting을 방지할 수 있는 회로 구조가 필요합니다.

    Q4. NKRO를 켜면 게임 반응 속도가 빨라지나요?

    NKRO는 동시 입력 수와 관련된 기능이므로 단일 키의 입력 지연을 직접 줄이지는 않습니다. 반응 속도는 Scan Rate, 디바운스, 펌웨어 처리, Polling Rate 등의 영향을 받습니다.

    Q5. 다이오드가 없으면 NKRO를 구현할 수 없나요?

    일반적인 스위치 매트릭스에서는 각 키의 전류 경로를 분리하기 위해 다이오드가 중요한 역할을 합니다. 다만 센서를 개별적으로 읽는 구조나 전혀 다른 회로 방식에서는 구현 방법이 달라질 수 있습니다.

    Q6. Bluetooth에서도 NKRO를 사용할 수 있나요?

    기술적으로 가능하지만 실제 지원 여부는 제품마다 다릅니다. 일부 키보드는 유선과 2.4GHz에서 NKRO를 지원하고 Bluetooth에서는 6KRO로 동작합니다.

    Q7. VIA에서 Fn 키가 테스트되지 않는 것은 고장인가요?

    Fn 키는 PC로 직접 전송되는 일반 키가 아니라 키보드 내부 레이어를 전환하는 키로 처리되는 경우가 많습니다. 따라서 VIA Key Tester에 Fn 키 자체가 표시되지 않아도 정상일 수 있습니다.

    Q8. NKRO 모드에서 키보드가 인식되지 않으면 어떻게 해야 하나요?

    키보드의 NKRO 전환 단축키나 설정 도구를 이용해 6KRO 모드로 바꿔보는 것이 좋습니다. 특히 BIOS, KVM 스위치, 구형 시스템에서 문제가 발생한다면 호환성이 높은 6KRO 모드가 도움이 될 수 있습니다.

    함께 보면 좋은 글

    공식 자료

    출처

    • USB Implementers Forum, HID 및 Keyboard/Keypad Usage 관련 문서
    • QMK Firmware 공식 문서 및 오픈소스 펌웨어 자료
    • VIA 공식 웹사이트와 키보드 테스트 기능
    Link&Tem 한 줄 정리

    NKRO는 다이오드가 적용된 매트릭스 회로에서 여러 키를 정확히 감지하고, 펌웨어와 확장 HID Report가 그 상태를 손실 없이 컴퓨터에 전달하는 구조입니다.

  • Scan Rate와 Polling Rate 차이|키보드 입력 속도와 지연 구조 이해하기

    Scan Rate와 Polling Rate 차이|키보드 입력 속도와 지연 구조 이해하기

    LINK&TEM GUIDE

    Scan Rate와 Polling Rate 차이

    키보드가 입력을 찾는 속도와 PC에 전달하는 속도는 서로 다르다

    📌 핵심 요약
    • Scan Rate는 키보드 컨트롤러가 내부 키 매트릭스를 검사하는 빈도입니다.
    • Polling Rate는 PC가 USB 장치의 입력 보고를 확인하거나 전송받는 빈도입니다.
    • 두 수치는 모두 Hz로 표시되지만 측정하는 구간과 역할이 서로 다릅니다.
    • Polling Rate가 높아도 Scan Rate가 낮으면 키 입력을 발견하는 단계에서 지연이 발생할 수 있습니다.
    • 실제 입력 지연은 스캔, 디바운스, 펌웨어 처리, USB 전송, 운영체제 처리 과정이 합쳐져 결정됩니다.

    기계식 키보드의 성능을 비교하다 보면 1,000Hz Polling Rate, 4,000Hz Scan Rate, 8,000Hz 응답속도와 같은 표현을 자주 볼 수 있습니다. 숫자가 높을수록 빠르다는 점은 쉽게 이해할 수 있지만, Scan Rate와 Polling Rate가 정확히 무엇을 측정하는지는 혼동하기 쉽습니다.

    두 용어는 모두 키 입력 속도와 관련되어 있고 Hz 단위를 사용하지만 같은 의미가 아닙니다. Scan Rate는 키보드 내부에서 물리적인 스위치 상태를 얼마나 자주 확인하는지를 나타내고, Polling Rate는 키보드와 PC 사이에서 입력 데이터가 얼마나 자주 전달될 수 있는지를 나타냅니다.

    쉽게 말하면 키보드가 먼저 내부에서 “어떤 키가 눌렸는가”를 찾아야 하고, 그다음 발견한 입력을 PC에 알려야 합니다. 전자가 Scan Rate이고 후자가 Polling Rate입니다. 둘 중 하나만 빠르다고 해서 전체 입력 과정이 무조건 빨라지는 것은 아닙니다.


    1. 키를 누른 순간 바로 PC에 전달되는 것은 아니다

    사용자가 키보드의 스위치를 누르면 금속 접점이나 자기 센서의 상태가 변합니다. 하지만 PC가 그 변화를 즉시 직접 읽는 것은 아닙니다. 키보드 내부의 마이크로컨트롤러가 먼저 스위치 상태를 확인하고, 눌린 키를 판별한 뒤, 정해진 형식의 입력 보고서로 만들어 USB 또는 무선 인터페이스를 통해 PC에 전송합니다.

    일반적인 유선 키보드에서는 입력이 대략 다음 순서로 처리됩니다.

    키 입력이 전달되는 기본 흐름
    1. 사용자가 키 스위치를 누릅니다.
    2. 스위치 접점 또는 센서의 전기적 상태가 변합니다.
    3. 키보드 컨트롤러가 키 매트릭스나 센서를 스캔합니다.
    4. 디바운스와 입력 판정 과정을 거칩니다.
    5. 펌웨어가 눌린 키를 키코드로 변환합니다.
    6. USB HID 보고서에 현재 입력 상태를 기록합니다.
    7. PC가 정해진 USB 전송 주기에 맞춰 입력 데이터를 받습니다.
    8. 운영체제와 프로그램이 해당 키 입력을 처리합니다.

    이 과정에서 Scan Rate는 주로 3번 단계와 관계가 있고, Polling Rate는 6번과 7번 사이의 통신 주기와 관계가 있습니다. 따라서 두 수치를 동일한 속도 지표로 보면 실제 병목이 어디에서 발생하는지 알기 어렵습니다.

    💡 핵심 개념

    키보드가 입력을 먼저 발견해야 PC로 보낼 수 있습니다. Scan Rate는 입력을 발견하는 속도이고, Polling Rate는 발견한 입력을 전달할 수 있는 속도입니다.

    2. Scan Rate란 무엇인가?

    Scan Rate는 키보드의 마이크로컨트롤러가 스위치 상태를 검사하는 빈도를 의미합니다. 대부분의 키보드는 모든 스위치를 개별 핀에 직접 연결하지 않고, 행과 열로 구성된 키 매트릭스를 사용합니다. 컨트롤러는 특정 행에 신호를 보내고 열의 상태를 읽는 작업을 반복하면서 어느 위치의 키가 눌렸는지 확인합니다.

    예를 들어 Scan Rate가 1,000Hz라면 키보드가 내부 입력 상태를 초당 약 1,000회 검사한다는 뜻입니다. 한 번의 스캔 주기로 환산하면 약 1ms입니다. 4,000Hz라면 한 주기가 약 0.25ms이고, 8,000Hz라면 약 0.125ms입니다.

    Scan Rate 한 번의 스캔 주기 이론상 최대 대기 시간
    125Hz 8ms 약 8ms
    500Hz 2ms 약 2ms
    1,000Hz 1ms 약 1ms
    4,000Hz 0.25ms 약 0.25ms
    8,000Hz 0.125ms 약 0.125ms

    여기에서 말하는 최대 대기 시간은 키가 눌린 시점과 다음 스캔 시점이 얼마나 떨어져 있는지를 단순하게 계산한 값입니다. 키가 스캔 직전에 눌리면 거의 즉시 발견될 수 있지만, 스캔 직후에 눌리면 다음 스캔까지 한 주기 가까이 기다려야 합니다.

    따라서 1,000Hz Scan Rate에서 스캔 단계의 대기 시간은 항상 1ms가 아니라 약 0ms에서 1ms 사이에 분포합니다. 입력 시점이 무작위라고 가정하면 평균 대기 시간은 대략 스캔 주기의 절반인 0.5ms 정도로 볼 수 있습니다.

    Scan Rate가 담당하는 것
    • 행과 열로 구성된 키 매트릭스 검사
    • 각 스위치의 눌림과 해제 상태 확인
    • 새롭게 변한 키 상태 탐지
    • 아날로그 또는 자기축 키보드의 센서 값 샘플링
    • 다음 입력 판정 단계에 전달할 원시 데이터 생성

    기계식 접점식 키보드에서는 매트릭스를 얼마나 자주 검사하는지가 중요하고, 홀 이펙트와 같은 자기축 키보드에서는 센서 값을 얼마나 자주 읽는지도 중요합니다. 자기축 키보드는 단순한 눌림과 해제뿐 아니라 자석의 이동 거리를 측정해야 하므로 센서 샘플링, 필터링, 작동 지점 판정 과정까지 함께 고려해야 합니다.

    3. Scan Rate가 높으면 무엇이 달라질까?

    Scan Rate가 높아지면 키를 누른 뒤 컨트롤러가 그 변화를 발견하기까지의 대기 시간이 짧아집니다. 예를 들어 125Hz 스캔에서는 최악의 경우 다음 검사까지 약 8ms를 기다릴 수 있지만, 1,000Hz에서는 최대 약 1ms, 8,000Hz에서는 최대 약 0.125ms 수준으로 줄어듭니다.

    다만 Scan Rate가 높다고 해서 그 숫자만큼 실제 키보드의 전체 지연이 결정되는 것은 아닙니다. 키 상태를 발견한 뒤에도 디바운스, 키맵 처리, 레이어 판정, 매크로 처리, HID 보고서 생성, USB 전송과 같은 단계가 남아 있기 때문입니다.

    주의할 점

    제조사가 높은 Scan Rate를 표시하더라도 그 수치가 키보드의 전체 입력 지연을 의미하지는 않습니다. 내부 스캔 속도와 실제 PC에서 측정되는 End-to-End 지연은 별도로 봐야 합니다.

    또한 스캔 속도를 지나치게 높이면 마이크로컨트롤러의 처리 부하와 전력 소비가 증가할 수 있습니다. 유선 키보드에서는 전력 문제가 크게 드러나지 않을 수 있지만, 배터리를 사용하는 무선 키보드에서는 높은 스캔 빈도가 사용 시간에 영향을 줄 수 있습니다.

    펌웨어 설계도 중요합니다. 컨트롤러가 빠르게 스캔하더라도 매 스캔마다 무거운 RGB 효과, 복잡한 매크로 처리, 통신 작업을 함께 수행하면 일정한 주기를 유지하지 못할 수 있습니다. 표시된 최대 Scan Rate보다 실제 스캔 간격의 안정성이 더 중요한 이유입니다.

    4. Polling Rate란 무엇인가?

    Polling Rate는 키보드와 PC 사이에서 입력 보고가 처리되는 빈도를 의미합니다. USB 키보드에서는 일반적으로 HID 인터럽트 전송의 폴링 간격과 연결해 설명합니다. PC의 USB 호스트가 정해진 간격마다 키보드의 입력 엔드포인트를 확인하고, 준비된 데이터가 있으면 이를 받아가는 구조입니다.

    Polling Rate가 1,000Hz라면 약 1ms마다 입력 보고를 처리할 기회가 생깁니다. 2,000Hz는 약 0.5ms, 4,000Hz는 약 0.25ms, 8,000Hz는 약 0.125ms 간격입니다.

    Polling Rate 보고 간격 초당 전송 기회
    125Hz 8ms 약 125회
    500Hz 2ms 약 500회
    1,000Hz 1ms 약 1,000회
    4,000Hz 0.25ms 약 4,000회
    8,000Hz 0.125ms 약 8,000회

    여기에서 중요한 점은 Polling Rate가 키보드 스위치를 직접 검사하는 속도가 아니라는 것입니다. 키보드 내부에서 아직 입력을 발견하지 못했다면 PC가 아무리 자주 데이터를 확인해도 새로운 입력 보고서는 준비되지 않습니다.

    반대로 키보드가 빠르게 입력을 발견했더라도 USB 보고 주기가 느리면 다음 전송 기회까지 기다려야 합니다. 따라서 Scan Rate와 Polling Rate는 입력 경로의 서로 다른 구간을 담당하면서 전체 지연에 각각 영향을 줍니다.

    💡 비유로 이해하기

    Scan Rate는 창고 직원이 새 택배가 들어왔는지 확인하는 빈도이고, Polling Rate는 배송 차량이 창고에 도착하는 빈도와 비슷합니다. 직원이 택배를 늦게 발견해도 배송이 늦어지고, 택배를 빨리 발견했지만 차량이 늦게 와도 배송이 늦어집니다.

    5. Scan Rate와 Polling Rate의 핵심 차이

    두 수치의 가장 큰 차이는 측정하는 위치입니다. Scan Rate는 키보드 내부 회로와 펌웨어에서 발생하는 검사 주기이고, Polling Rate는 키보드와 PC 사이의 통신 주기입니다.

    구분 Scan Rate Polling Rate
    측정 구간 스위치·센서 → 컨트롤러 키보드 → PC
    주요 역할 키 상태 변화 탐지 입력 보고서 전달
    표시 단위 Hz Hz
    영향 요소 매트릭스, MCU, 펌웨어 USB 규격, HID 설정, 펌웨어
    높을 때의 효과 입력 발견 대기 시간 감소 전송 대기 시간 감소

    예를 들어 Scan Rate가 1,000Hz이고 Polling Rate도 1,000Hz인 키보드를 생각해볼 수 있습니다. 키가 스캔 직후에 눌리면 다음 스캔까지 최대 약 1ms를 기다리고, 입력 보고서가 USB 전송 직후에 준비되면 다음 폴링까지 다시 최대 약 1ms를 기다릴 수 있습니다.

    단순히 두 최댓값을 더하면 스캔과 USB 보고 단계에서만 최대 약 2ms의 대기 가능성이 생깁니다. 여기에 디바운스와 펌웨어 처리 시간이 추가되므로 실제 전체 지연은 Polling Rate의 역수 하나만으로 계산할 수 없습니다.

    반대로 Scan Rate가 8,000Hz인데 Polling Rate가 1,000Hz라면 입력은 내부에서 매우 빠르게 발견할 수 있지만 PC로 전달되는 기회는 약 1ms 간격입니다. Scan Rate가 1,000Hz인데 Polling Rate만 8,000Hz라면 PC는 자주 확인하지만 새로운 키 상태를 발견하는 주기는 약 1ms입니다.

    대표적인 조합 해석
    • 낮은 Scan Rate + 높은 Polling Rate: PC 통신은 빠르지만 키 입력 발견 단계가 병목이 될 수 있습니다.
    • 높은 Scan Rate + 낮은 Polling Rate: 입력은 빨리 찾지만 전송 기회를 기다릴 수 있습니다.
    • 둘 다 높은 경우: 스캔과 전송 대기 시간은 줄지만 다른 처리 단계가 병목이 될 수 있습니다.
    • 둘 다 안정적인 경우: 최대 수치보다 실제 입력 간격의 일관성이 좋아질 수 있습니다.

    6. 같은 1,000Hz라도 체감이 다른 이유

    두 키보드가 모두 1,000Hz Polling Rate를 지원하더라도 실제 입력 지연과 체감은 다를 수 있습니다. Polling Rate는 전체 처리 과정 중 마지막 통신 구간에 가까운 한 요소일 뿐이기 때문입니다.

    첫 번째 차이는 Scan Rate입니다. 한 키보드는 내부 매트릭스를 1,000Hz로 스캔하고 다른 키보드는 4,000Hz로 스캔할 수 있습니다. USB 보고 속도는 같더라도 입력 변화를 발견하는 평균 시간에는 차이가 생길 수 있습니다.

    두 번째 차이는 디바운스입니다. 접점식 기계식 스위치는 눌리거나 떼는 순간 신호가 여러 번 튀는 바운스 현상이 발생할 수 있습니다. 펌웨어는 이를 한 번의 정상적인 입력으로 판별하기 위해 일정 시간이나 알고리즘을 사용합니다. 이 디바운스 설정이 길면 높은 Scan Rate와 Polling Rate의 장점이 일부 줄어들 수 있습니다.

    세 번째 차이는 펌웨어 구조입니다. 스캔 루프가 효율적으로 설계되어 있는지, USB 보고서를 언제 갱신하는지, RGB와 매크로 처리 작업이 입력 처리를 방해하지 않는지에 따라 실제 지연이 달라질 수 있습니다.

    네 번째 차이는 키보드의 작동 방식입니다. 접점식 스위치는 접점이 실제로 닫히는 시점이 필요하지만, 홀 이펙트 방식은 자석의 이동 거리를 연속적으로 측정하고 설정된 작동 지점을 넘는 순간 입력을 판정할 수 있습니다. 따라서 같은 Polling Rate를 지원하더라도 스위치 구조와 작동 지점 설정에 따라 전체 반응 시간이 달라질 수 있습니다.

    숫자만 비교하면 안 되는 이유

    1,000Hz는 이론적으로 약 1ms의 USB 보고 간격을 의미할 뿐입니다. 제품 전체의 입력 지연이 정확히 1ms라는 뜻은 아니며, 키를 누른 순간부터 화면에 반영되기까지는 여러 단계가 추가됩니다.
    Part 1 정리

    Scan Rate는 키보드가 내부의 스위치와 센서를 검사하는 속도이고, Polling Rate는 판별된 입력을 PC에 전달할 수 있는 속도입니다. 두 수치가 모두 높을수록 각 구간의 대기 시간은 줄어들 수 있지만, 실제 입력 지연은 디바운스와 펌웨어 처리까지 함께 확인해야 합니다. 다음 내용에서는 전체 지연 계산, 1,000Hz와 8,000Hz의 실질적인 차이, 무선 키보드에서의 의미와 제품 사양을 올바르게 읽는 방법을 이어서 살펴보겠습니다.

    7. 전체 입력 지연은 어떻게 계산될까?

    키보드 입력 지연을 이해할 때 가장 흔한 실수는 Polling Rate만으로 전체 응답속도를 계산하는 것입니다. 1,000Hz Polling Rate의 전송 간격이 1ms라고 해서 키보드의 입력 지연이 항상 1ms인 것은 아닙니다. 실제 입력은 스위치가 움직이는 순간부터 시작해 내부 스캔, 입력 안정화, 펌웨어 처리, USB 보고, 운영체제 처리 단계를 차례로 통과합니다.

    이를 단순화하면 키보드 내부의 입력 지연은 다음 요소들의 합으로 생각할 수 있습니다.

    키보드 입력 지연을 구성하는 주요 요소
    1. 스위치 작동 시간: 키캡을 누른 뒤 접점 또는 센서가 작동 지점에 도달하는 시간
    2. 스캔 대기 시간: 키가 눌린 뒤 다음 매트릭스 스캔이 실행될 때까지의 시간
    3. 디바운스 시간: 접점의 불안정한 신호를 정상적인 한 번의 입력으로 판별하는 시간
    4. 펌웨어 처리 시간: 키맵, 레이어, 탭홀드, 매크로 등을 처리하는 시간
    5. USB 보고 대기 시간: 완성된 HID 보고서가 다음 전송 주기를 기다리는 시간
    6. PC 처리 시간: 운영체제, 게임 엔진, 디스플레이가 입력을 반영하는 시간

    예를 들어 1,000Hz Scan Rate와 1,000Hz Polling Rate를 사용하는 키보드가 있다고 가정해보겠습니다. 키가 스캔 직후에 눌리면 다음 스캔까지 약 1ms 가까이 기다릴 수 있고, HID 보고서가 전송 직후에 완성되면 다시 다음 USB 전송까지 약 1ms 가까이 기다릴 수 있습니다.

    여기에 5ms의 고정 디바운스가 적용되어 있다면 스캔과 전송 속도가 아무리 빨라도 디바운스 단계에서 더 긴 시간이 사용될 수 있습니다. 따라서 높은 Scan Rate와 Polling Rate를 실제 성능으로 연결하려면 디바운스 알고리즘과 펌웨어 처리 구조도 함께 최적화되어야 합니다.

    💡 평균 지연과 최대 지연은 다릅니다

    1ms 주기의 스캔이나 폴링은 항상 1ms를 기다린다는 뜻이 아닙니다. 입력 시점에 따라 거의 즉시 처리될 수도 있고, 한 주기 가까이 기다릴 수도 있습니다. 무작위 입력을 가정하면 각 주기에서 발생하는 평균 대기 시간은 대략 주기의 절반입니다.

    8. 1,000Hz와 8,000Hz는 얼마나 차이 날까?

    1,000Hz의 한 주기는 1ms이고 8,000Hz의 한 주기는 0.125ms입니다. 숫자만 보면 8배 차이지만, 두 설정 사이에서 줄어드는 최대 전송 대기 시간은 약 0.875ms입니다. 평균 대기 시간으로 보면 약 0.5ms에서 약 0.0625ms로 감소하므로 차이는 약 0.4375ms입니다.

    구분 1,000Hz 8,000Hz
    한 주기 1ms 0.125ms
    이론상 최대 대기 약 1ms 약 0.125ms
    이론상 평균 대기 약 0.5ms 약 0.0625ms
    초당 처리 기회 약 1,000회 약 8,000회

    이 차이는 측정 장비에서는 확인할 수 있지만 모든 사용자가 타이핑만으로 명확하게 구분하기는 어렵습니다. 일반 문서 작업에서는 스위치를 누르는 물리적 시간, 손가락 움직임, 운영체제 처리와 화면 주사율이 더 큰 영향을 줄 수 있습니다.

    반면 고주사율 모니터를 사용하는 리듬 게임, 경쟁형 FPS, 짧은 작동 지점을 사용하는 자기축 키보드 환경에서는 작은 지연 차이가 누적되어 의미를 가질 수 있습니다. 특히 입력 시점의 변동 폭이 줄어들면 평균 지연뿐 아니라 입력 타이밍의 일관성도 좋아질 수 있습니다.

    다만 8,000Hz라는 숫자가 제품의 모든 입력 과정이 0.125ms 안에 끝난다는 뜻은 아닙니다. USB 보고 간격이나 내부 스캔 간격 중 하나가 0.125ms라는 의미일 수 있으므로 제조사가 어느 구간의 수치를 표시했는지 확인해야 합니다.

    고주사율이 항상 8배 빠른 것은 아닙니다

    8,000Hz는 1,000Hz보다 초당 처리 기회가 8배 많지만, 전체 입력 지연이 8분의 1로 줄어드는 것은 아닙니다. 스위치, 디바운스, 펌웨어, 운영체제와 디스플레이 지연은 별도로 남아 있습니다.

    9. Scan Rate가 Polling Rate보다 높아야 할까?

    일반적으로 내부 Scan Rate가 외부 Polling Rate와 같거나 더 높은 구성이 유리합니다. 키보드는 USB 보고 주기가 돌아오기 전에 새로운 키 상태를 발견하고 보고서를 준비해야 하기 때문입니다.

    예를 들어 Polling Rate가 1,000Hz인데 Scan Rate가 125Hz라면 PC는 약 1ms마다 입력을 확인하지만 키보드는 내부 상태를 약 8ms마다 한 번씩만 검사합니다. 이 경우 빠른 USB 통신보다 느린 내부 스캔이 명확한 병목이 됩니다.

    반대로 Scan Rate가 8,000Hz이고 Polling Rate가 1,000Hz라면 입력을 빠르게 발견하고 여러 번 내부 상태를 갱신할 수 있습니다. 다만 PC로 새로운 보고서를 전달하는 기회는 약 1ms마다 한 번이므로 최종 전송 단계에는 1,000Hz의 한계가 남습니다.

    구성 해석 가능한 병목
    125Hz Scan
    1,000Hz Polling
    PC는 자주 확인하지만 키 상태 발견이 느림 내부 스캔
    1,000Hz Scan
    1,000Hz Polling
    스캔과 전송 주기가 균형적인 구성 디바운스·펌웨어
    8,000Hz Scan
    1,000Hz Polling
    입력 탐지는 빠르지만 전송은 1ms 단위 USB 보고 주기
    8,000Hz Scan
    8,000Hz Polling
    두 단계의 대기 시간을 모두 줄인 구성 스위치·펌웨어·PC

    그렇다고 Scan Rate를 무조건 Polling Rate의 여러 배로 높여야 하는 것은 아닙니다. 컨트롤러 성능이 충분하지 않은 상태에서 지나치게 빠른 스캔을 설정하면 RGB 효과, 무선 처리, 매크로 기능과 자원을 경쟁할 수 있습니다. 중요한 것은 표시된 최대 수치보다 실제 펌웨어가 일정한 주기로 입력을 처리하는지입니다.

    10. 디바운스가 빠른 스캔을 가릴 수 있다

    접점식 기계식 스위치는 금속 접점이 닿는 순간 신호가 한 번에 안정적으로 바뀌지 않을 수 있습니다. 아주 짧은 시간 동안 연결과 해제가 반복되어 컨트롤러에는 여러 번 눌린 것처럼 보일 수 있는데, 이를 바운스 현상이라고 합니다.

    키보드 펌웨어는 잘못된 중복 입력을 막기 위해 디바운스 과정을 수행합니다. 전통적인 방식은 상태 변화가 감지된 뒤 일정 시간을 기다리고, 신호가 유지되면 정상 입력으로 확정하는 것입니다. 설정된 시간이 5ms라면 Scan Rate가 8,000Hz여도 입력 확정에는 그보다 긴 시간이 필요할 수 있습니다.

    현대 키보드 펌웨어는 무조건 고정 시간을 기다리는 방식뿐 아니라 여러 번의 스캔 결과를 비교하거나, 눌림과 해제에 서로 다른 조건을 적용하거나, 빠른 입력과 채터링을 구분하는 알고리즘을 사용하기도 합니다. 따라서 단순히 “디바운스 0ms”라는 문구보다 실제로 중복 입력 없이 안정적으로 작동하는지를 확인하는 것이 중요합니다.

    빠른 입력과 안정성의 균형
    • 디바운스가 너무 길면 정상 입력 확정이 늦어질 수 있습니다.
    • 디바운스가 너무 짧으면 한 번 누른 키가 여러 번 입력되는 채터링이 생길 수 있습니다.
    • 스위치 상태와 사용 기간에 따라 필요한 안정화 시간이 달라질 수 있습니다.
    • 좋은 펌웨어는 지연을 줄이면서도 잘못된 중복 입력을 방지해야 합니다.

    11. 자기축 키보드에서는 의미가 달라질까?

    홀 이펙트 센서를 사용하는 자기축 키보드는 금속 접점의 닫힘 여부가 아니라 자석의 위치 변화를 측정합니다. 컨트롤러는 센서에서 읽은 값을 기준으로 키가 얼마나 눌렸는지 계산하고, 사용자가 지정한 작동 지점을 넘으면 입력을 발생시킵니다.

    이 구조에서는 전통적인 접점 바운스가 없기 때문에 기계식 접점식 스위치와 동일한 디바운스 과정이 필요하지 않을 수 있습니다. 대신 센서 샘플링, 노이즈 필터링, 기준점 보정, 이동 거리 계산과 작동 지점 판정이 중요해집니다.

    자기축 키보드에서 높은 Scan Rate가 강조되는 이유도 여기에 있습니다. 센서 위치를 더 자주 읽으면 작동 지점이나 래피드 트리거 기준을 통과한 순간을 더 빠르게 발견할 가능성이 높아집니다. 하지만 센서 값을 자주 읽는 것과 정확하게 판별하는 것은 별개의 문제입니다.

    센서 노이즈가 큰 상태에서 필터링을 지나치게 줄이면 키가 미세하게 떨리거나 의도하지 않은 입력이 발생할 수 있습니다. 반대로 안정성을 위해 필터링을 강하게 적용하면 높은 샘플링 속도의 장점이 줄어들 수 있습니다. 자기축 키보드 역시 Scan Rate 숫자 하나보다 센서 정확도와 펌웨어 알고리즘을 함께 봐야 합니다.

    12. 무선 키보드에서도 같은 의미일까?

    무선 키보드에서도 내부 Scan Rate는 존재하지만, PC로 전달되는 구간은 유선 USB와 다를 수 있습니다. 2.4GHz 전용 수신기, Bluetooth HID, 절전 모드와 무선 패킷 전송 주기가 추가되기 때문입니다.

    2.4GHz 게이밍 키보드는 전용 수신기와 제조사 프로토콜을 사용해 1,000Hz 이상의 보고율을 지원하는 경우가 있습니다. 하지만 무선 간섭, 패킷 재전송, 수신기 위치, 배터리 절약 정책에 따라 실제 지연과 안정성이 달라질 수 있습니다.

    Bluetooth 키보드는 호환성과 배터리 효율을 중요하게 설계하는 경우가 많습니다. 키보드가 절전 상태에 들어갔다가 깨어나는 시간, 연결 간격, 운영체제의 Bluetooth 처리 구조가 추가되므로 유선 USB의 Polling Rate 개념을 그대로 적용하기 어렵습니다.

    연결 방식 특징 확인할 요소
    유선 USB 일정한 전송 주기와 안정적인 전원 공급 USB 보고율, 펌웨어 지연
    2.4GHz 낮은 지연을 목표로 한 전용 무선 연결 수신기, 간섭, 실제 보고율
    Bluetooth 호환성과 전력 효율 중심 연결 간격, 절전 복귀, OS 환경
    무선 모드별 수치를 따로 확인하세요

    하나의 키보드가 유선에서는 8,000Hz, 2.4GHz에서는 1,000Hz, Bluetooth에서는 더 낮은 전송 빈도로 동작할 수 있습니다. 제품 페이지에 적힌 최고 수치가 모든 연결 모드에 적용된다고 단정하면 안 됩니다.

    13. 제조사 사양표를 읽는 방법

    키보드 제품 페이지에 “8K 응답속도” 또는 “8,000Hz 초고속 스캔”이라는 표현만 적혀 있다면 정확히 어느 구간을 의미하는지 확인해야 합니다. Scan Rate와 Polling Rate는 서로 다른 수치인데도 마케팅 문구에서는 명확하게 구분되지 않는 경우가 있기 때문입니다.

    먼저 8,000Hz가 내부 매트릭스 스캔 속도인지, 센서 샘플링 속도인지, USB 보고율인지 확인합니다. 센서 샘플링은 아날로그 값을 읽는 횟수이고, 매트릭스 Scan Rate는 모든 키의 상태를 검사하는 빈도이며, Polling Rate는 PC와 통신하는 빈도입니다.

    두 번째로 유선과 무선 모드별 사양이 구분되어 있는지 확인합니다. 세 번째로 디바운스 또는 입력 처리 지연에 대한 설명이 있는지 살펴봅니다. 네 번째로 “최대”라는 표현이 붙어 있다면 해당 모드가 기본 설정인지, 전용 소프트웨어에서 활성화해야 하는지도 확인해야 합니다.

    제품 사양 확인 체크리스트
    • 표시된 Hz가 Scan Rate인지 Polling Rate인지 확인합니다.
    • 센서 샘플링 속도와 전체 매트릭스 스캔 속도를 구분합니다.
    • 유선, 2.4GHz, Bluetooth 모드의 수치를 각각 확인합니다.
    • 전용 드라이버에서 고성능 모드를 켜야 하는지 확인합니다.
    • 고주사율 사용 시 CPU 점유율이나 배터리 소모 변화가 있는지 확인합니다.
    • 독립적인 입력 지연 측정 결과가 있는지 살펴봅니다.
    • 평균 지연뿐 아니라 측정값의 편차도 확인합니다.

    특히 “응답속도 0.125ms”라는 표현은 주의해서 해석해야 합니다. 8,000Hz의 한 주기가 0.125ms이므로 이를 그대로 응답속도로 표시하는 경우가 있지만, 이것은 해당 처리 주기의 길이일 뿐 키를 누른 뒤 PC가 입력을 인식하기까지의 전체 시간이 아닙니다.

    14. 높은 Polling Rate가 PC 성능에도 영향을 줄까?

    Polling Rate가 높아지면 PC가 더 자주 USB 입력을 처리하게 됩니다. 키보드의 데이터량은 마우스보다 상대적으로 작지만, 8,000Hz처럼 매우 높은 보고율에서는 시스템이 처리해야 하는 인터럽트와 보고 횟수가 늘어날 수 있습니다.

    최신 고성능 PC에서는 큰 문제가 발생하지 않는 경우가 많지만, 오래된 CPU나 특정 USB 컨트롤러, 일부 게임과의 조합에서는 높은 보고율이 불필요한 부하를 만들 수 있습니다. 입력 끊김이나 프레임 타임 불안정이 나타난다면 8,000Hz에서 4,000Hz 또는 1,000Hz로 낮춰 비교하는 것이 좋습니다.

    USB 허브를 사용하는 경우에도 연결 상태를 확인해야 합니다. 여러 고주사율 장치를 하나의 허브에 연결하거나 품질이 낮은 연장 케이블을 사용하면 전원과 신호 안정성 문제가 생길 수 있습니다. 가능하면 메인보드 후면의 USB 포트에 직접 연결해 테스트하는 것이 정확합니다.

    💡 실사용 설정 팁

    일반적인 문서 작업과 게임에서는 1,000Hz도 충분히 빠른 편입니다. 4,000Hz나 8,000Hz는 고주사율 모니터와 경쟁 게임 환경에서 시험해보고, 시스템 안정성이나 배터리 사용 시간이 나빠진다면 낮은 단계로 조정하는 것이 합리적입니다.

    15. 직접 성능을 확인할 때 주의할 점

    웹 기반 키보드 테스트 페이지는 눌린 키가 정상적으로 인식되는지 확인하는 데 유용하지만 Scan Rate와 Polling Rate를 정확히 측정하는 도구는 아닙니다. 웹 브라우저가 전달하는 키 이벤트에는 운영체제, 브라우저 처리와 화면 표시 시간이 포함되기 때문입니다.

    Polling Rate는 USB 패킷이나 HID 보고서의 도착 간격을 분석해야 더 정확하게 확인할 수 있습니다. 입력 지연은 키를 실제로 누르는 물리적 시점과 PC에서 이벤트가 발생하는 시점을 동시에 측정해야 하므로 고속 카메라, 전기적 신호 측정 장치 또는 전용 지연 측정 장비가 필요할 수 있습니다.

    여러 키보드의 성능을 비교할 때는 동일한 PC, 동일한 USB 포트, 동일한 운영체제 설정과 동일한 측정 방법을 사용해야 합니다. 한두 번의 최솟값만 비교하지 말고 여러 차례 측정한 평균, 중앙값과 편차를 함께 보는 것이 좋습니다.

    측정 대상 확인 방법 주의점
    동시 입력 키보드 테스트 페이지에서 여러 키 누르기 Scan Rate 측정은 불가능
    Polling Rate USB HID 보고 간격 분석 보고가 없을 때의 동작도 고려
    전체 입력 지연 물리 입력과 PC 이벤트 시점 비교 스위치와 측정 장치 오차 포함
    안정성 반복 입력 후 누락과 중복 확인 최솟값보다 편차가 중요

    16. 어떤 수치를 우선해서 봐야 할까?

    키보드를 선택할 때 Scan Rate와 Polling Rate 중 하나만 고르는 방식으로 접근할 필요는 없습니다. 두 수치는 입력 과정의 서로 다른 구간을 설명하므로 균형 있게 확인해야 합니다.

    일반 사용자는 1,000Hz Polling Rate와 안정적인 펌웨어를 갖춘 제품이면 충분한 경우가 많습니다. 빠른 입력이 중요한 사용자는 높은 Scan Rate, 짧고 안정적인 디바운스, 낮은 실제 입력 지연을 함께 확인해야 합니다.

    자기축 키보드를 선택한다면 센서 샘플링 속도만 보지 말고 작동 지점 정확도, 래피드 트리거 안정성, 키별 캘리브레이션과 펌웨어 업데이트도 확인하는 것이 좋습니다. 무선 키보드는 최고 Polling Rate보다 절전 복귀 시간과 연결 안정성이 체감에 더 큰 영향을 줄 수도 있습니다.

    Link&Tem 결론

    Scan Rate는 키보드가 내부에서 키 상태를 발견하는 속도이고, Polling Rate는 판별한 입력을 PC에 전달하는 속도입니다. 두 수치는 모두 높을수록 각 단계의 대기 시간을 줄일 수 있지만, 실제 성능은 디바운스, 펌웨어, 연결 방식과 시스템 환경까지 포함해 판단해야 합니다. 제품 사양에서는 Hz 숫자보다 그 숫자가 어떤 구간을 나타내는지 먼저 확인하는 것이 중요합니다.

    자주 묻는 질문

    Q. 1,000Hz Polling Rate면 입력 지연이 1ms인가요?
    아닙니다. 1,000Hz는 약 1ms마다 USB 입력 보고를 처리할 기회가 있다는 뜻입니다. 스캔, 디바운스, 펌웨어와 스위치 작동 시간이 추가되므로 전체 입력 지연은 1ms보다 길 수 있습니다.
    Q. Scan Rate가 높으면 Polling Rate는 낮아도 되나요?
    내부에서 입력을 빠르게 발견할 수는 있지만 PC로 전달되는 주기가 느리면 전송 단계가 병목이 됩니다. 두 수치가 균형 있게 구성되어야 각 단계의 대기 시간을 줄일 수 있습니다.
    Q. 8,000Hz 키보드는 무조건 더 좋은가요?
    전송 대기 시간을 줄이는 데는 유리하지만 모든 환경에서 큰 체감 차이가 생기는 것은 아닙니다. 시스템 부하, 펌웨어 안정성, 디바운스와 실제 지연 측정 결과까지 함께 확인해야 합니다.
    Q. 키보드 테스트 사이트로 Scan Rate를 측정할 수 있나요?
    일반적인 웹 키보드 테스트는 키 인식과 동시 입력 여부를 확인하는 용도입니다. 브라우저에서 보이는 이벤트만으로 내부 매트릭스 스캔 주기를 정확하게 측정하기는 어렵습니다.
    Q. 무선 키보드도 1,000Hz를 지원할 수 있나요?
    전용 2.4GHz 수신기를 사용하는 일부 키보드는 1,000Hz 이상의 보고율을 지원합니다. Bluetooth 모드는 전력 효율과 호환성을 우선해 다른 주기로 동작할 수 있으므로 연결 모드별 사양을 확인해야 합니다.
    Q. NKRO와 Polling Rate는 같은 기능인가요?
    아닙니다. NKRO는 여러 키를 동시에 정확하게 판별하고 보고하는 능력이고, Polling Rate는 입력 보고가 PC로 전달될 수 있는 빈도입니다. 동시 입력 개수와 전송 주기는 서로 다른 성능 항목입니다.

    📚 함께 보면 좋은 글

    Scan Rate와 Polling Rate를 이해했다면 키보드가 여러 입력을 구분하고, VIA와 VIAL이 키맵 정보를 처리하는 구조도 함께 살펴볼 수 있습니다. 아래 글을 순서대로 읽으면 하드웨어 스캔부터 설정 소프트웨어까지 전체 흐름을 연결해 이해하는 데 도움이 됩니다.

    공식 참조 자료

    Sources

    1. USB Implementers Forum, Device Class Definition for Human Interface Devices 1.11
    2. USB Implementers Forum, HID Usage Tables 1.4
    3. QMK Firmware Documentation, keyboard matrix scanning and debounce concepts
    Link&Tem 한 줄 정리
    Scan Rate는 키를 발견하는 속도, Polling Rate는 발견한 입력을 PC에 전달하는 속도입니다.

  • 디바운스란 무엇인가? 키보드 오입력을 막는 핵심 기술 완벽 이해

    디바운스란 무엇인가? 키보드 오입력을 막는 핵심 기술 완벽 이해

    LINK&TEM GUIDE

    디바운스란 무엇인가?

    기계식 키보드의 오입력을 막는 핵심 기술, 바운싱부터 펌웨어 처리 방식까지

    📌 핵심 요약
    • 기계식 스위치는 눌리는 순간 접점이 여러 번 튀는(Bounce) 현상이 발생한다.
    • 디바운스(Debounce)는 이러한 중복 신호를 하나의 입력으로 정리하는 과정이다.
    • 디바운스가 없으면 한 번 눌렀는데 두 번 이상 입력되는 채터링(Chattering)이 발생할 수 있다.
    • 현대 키보드는 대부분 MCU 펌웨어에서 3~10ms 정도의 디바운스 알고리즘을 적용한다.
    • 디바운스 시간은 입력 안정성과 입력 지연(Latency)의 균형을 맞추는 중요한 설정이다.

    기계식 키보드를 사용하다 보면 “한 번만 눌렀는데 글자가 두 번 입력된다”거나 “가끔 키가 씹히는 것 같다”는 경험을 하는 경우가 있습니다. 많은 사용자는 이를 스위치 고장으로 생각하지만 실제 원인은 디바운스(Debounce)와 관련된 경우가 적지 않습니다.

    기계식 스위치는 사람이 보기에는 한 번만 눌린 것처럼 보이지만 전기적으로는 그렇지 않습니다. 금속 접점이 서로 닿는 순간 아주 짧은 시간 동안 여러 번 붙었다 떨어졌다를 반복하는데, 이를 바운싱(Bouncing)이라고 합니다.

    이번 글에서는 디바운스가 왜 필요한지, 키보드 내부에서는 어떤 방식으로 처리되는지, 게임용 키보드에서 디바운스 시간을 줄이는 이유는 무엇인지, 그리고 채터링과는 어떤 관계가 있는지까지 순서대로 알아보겠습니다.


    1. 디바운스란 무엇인가?

    디바운스(Debounce)는 스위치에서 발생하는 짧은 시간의 불안정한 신호를 제거하고, 실제 입력만 인식하도록 만드는 기술입니다. 쉽게 말하면 여러 번 발생한 신호를 하나의 정상 입력으로 정리하는 과정이라고 이해하면 됩니다.

    기계식 스위치 내부에는 금속 접점이 존재합니다. 키를 누르면 두 접점이 맞닿으며 회로가 연결되는데, 금속은 탄성이 있기 때문에 즉시 안정적으로 붙지 않습니다. 아주 짧은 시간 동안 여러 번 튕기면서 ON-OFF 상태가 반복됩니다.

    💡 쉽게 이해하기

    전등 스위치를 빠르게 누르면 “딸깍” 한 번으로 끝나는 것처럼 느껴집니다. 하지만 전기적으로는 접점이 수차례 흔들린 뒤 안정됩니다. 키보드도 동일한 현상이 발생하며 이것이 바로 바운싱입니다.

    MCU는 수천 번 이상의 속도로 스위치를 계속 검사하기 때문에 이 작은 흔들림도 모두 감지할 수 있습니다. 따라서 아무런 처리 없이 신호를 읽으면 한 번 누른 키가 여러 번 입력된 것으로 오해할 수 있습니다.

    2. 바운싱(Bouncing)은 왜 발생할까?

    바운싱은 기계적인 특성 때문에 발생합니다. 스위치 내부의 금속 접점은 서로 충돌한 뒤 즉시 멈추지 않고 아주 짧은 시간 동안 반복적으로 진동합니다.

    일반적으로 이 현상은 수백 마이크로초에서 수 밀리초(ms) 정도 지속됩니다. 사람은 절대로 느낄 수 없는 시간입니다. 하지만 MCU 입장에서는 매우 긴 시간이며 수십 번 이상의 스캔이 이루어질 수 있습니다.

    단계 스위치 상태
    키 누름 시작 접점이 처음 맞닿음
    바운싱 접점이 여러 번 튐
    안정화 접점이 완전히 붙음
    디바운스 완료 하나의 입력으로 확정
    TIP

    스위치 품질이 아무리 좋아도 바운싱 자체는 완전히 없어지지 않습니다. 따라서 모든 기계식 키보드는 어떤 형태로든 디바운스 처리를 수행합니다.
    🔍 Link&Tem Insight

    QMK 공식 문서에서는 디바운스를 단순한 지연 시간이 아니라 입력 안정성을 확보하기 위한 알고리즘으로 설명합니다. 최근 펌웨어는 모든 키에 동일한 시간을 적용하는 방식뿐 아니라 키별 상태를 독립적으로 관리하는 방식도 제공합니다.

    3. 디바운스가 없으면 어떤 문제가 생길까?

    디바운스가 제대로 적용되지 않으면 가장 대표적으로 발생하는 문제가 바로 채터링(Chattering)입니다.

    채터링은 사용자가 키를 한 번만 눌렀는데 컴퓨터에서는 두 번 이상 입력된 것으로 인식하는 현상입니다. 예를 들어 “A”를 한 번 눌렀는데 “AA”가 입력되거나, 백스페이스를 한 번 눌렀는데 여러 글자가 삭제되는 증상이 대표적입니다.

    반대로 디바운스 시간이 지나치게 길면 이번에는 입력 반응이 느려질 수 있습니다. 따라서 제조사는 입력 안정성과 응답 속도 사이에서 적절한 값을 선택하게 됩니다.

    대표적인 증상
    • 한 번 눌렀는데 두 번 입력됨
    • 랜덤하게 같은 글자가 반복 입력됨
    • 게임에서 연속 입력이 발생함
    • 오래된 스위치에서 증상이 심해짐

    4. 키보드는 디바운스를 어떻게 처리할까?

    현대 기계식 키보드는 대부분 MCU 펌웨어 안에서 디바운스를 수행합니다. 키보드는 매우 빠른 속도로 키 매트릭스를 계속 스캔하며 각 스위치의 상태를 읽습니다.

    새로운 입력이 감지되면 즉시 확정하지 않고 일정 시간 동안 같은 상태가 유지되는지 확인합니다. 만약 짧은 시간 안에 상태가 계속 바뀐다면 바운싱으로 판단하고 무시합니다. 반대로 일정 시간 동안 안정적으로 유지되면 그때 비로소 정상 입력으로 등록합니다.

    입력 처리 순서
    1. 키 매트릭스 스캔
    2. 접점 변화 감지
    3. 디바운스 타이머 시작
    4. 상태 안정 여부 확인
    5. USB HID 또는 Bluetooth HID 보고서 생성
    6. PC로 입력 전송
    🔍 Link&Tem Insight

    디바운스는 USB나 Bluetooth보다 먼저 수행됩니다. 즉 입력이 운영체제로 전달되기 전에 MCU 내부에서 이미 불필요한 신호를 제거한 뒤 HID Report를 생성합니다. 따라서 운영체제는 하나의 정상 입력만 받게 됩니다.

    Part 1 정리

    디바운스는 스위치의 바운싱을 제거하여 하나의 안정적인 입력만 남기는 핵심 기술입니다. 기계식 키보드에서는 거의 필수적인 기능이며, 채터링 방지와 입력 안정성에 직접적인 영향을 줍니다. 다음에서는 디바운스 시간 설정, 게이밍 키보드의 초저지연 기술, 채터링과 스위치 노후화의 관계, FAQ와 함께 보면 좋은 글까지 이어서 살펴보겠습니다.

    5. 디바운스 시간(Debounce Time)은 얼마나 적당할까?

    디바운스는 무조건 짧다고 좋은 것도, 길다고 좋은 것도 아닙니다. 키보드 제조사는 입력 안정성과 반응 속도 사이에서 가장 적절한 시간을 선택합니다.

    일반적으로 기계식 키보드는 3~10ms 정도의 디바운스 시간을 사용하는 경우가 많습니다. 스위치 종류와 펌웨어 설계 방식에 따라 조금씩 차이가 있지만 대부분 이 범위 안에서 동작합니다.

    디바운스 시간 특징
    0~1ms 입력은 매우 빠르지만 채터링 위험 증가
    3~5ms 게임과 일반 사용의 균형이 좋음
    5~10ms 안정성 우선, 오입력 가능성 감소
    10ms 이상 매우 안정적이지만 입력 반응이 다소 느려질 수 있음

    예를 들어 사무용 키보드는 안정성을 위해 조금 긴 디바운스를 적용하는 경우가 많고, 게이밍 키보드는 응답 속도를 높이기 위해 더 짧은 값을 사용하는 경우가 많습니다.

    TIP

    펌웨어에서 디바운스 값을 직접 변경할 수 있다면 가장 낮은 값으로 설정하기보다는 기본값에서 테스트해 보면서 자신의 스위치 상태에 맞게 조정하는 것이 좋습니다.

    6. 게이밍 키보드는 왜 디바운스를 줄일까?

    최근 게이밍 키보드에서는 1ms 이하의 응답 속도를 강조하는 경우가 많습니다. 이러한 제품은 MCU 성능 향상과 스위치 품질 개선을 통해 디바운스 시간을 줄여 입력 지연을 최소화합니다.

    특히 광축(Optical Switch)이나 Hall Effect 스위치는 금속 접점을 직접 사용하는 구조가 아니기 때문에 일반 기계식 스위치보다 바운싱 자체가 훨씬 적거나 거의 발생하지 않습니다. 그 결과 매우 짧은 디바운스 설정도 안정적으로 사용할 수 있습니다.

    🔍 Link&Tem Insight

    Hall Effect 키보드는 자기장의 변화를 측정하고, 광축은 빛을 이용해 입력을 감지합니다. 둘 다 금속 접점이 직접 충돌하지 않기 때문에 기계적인 바운싱이 크게 줄어들며, 디바운스 시간이 일반 기계식 키보드보다 짧아질 수 있습니다.

    7. 채터링은 왜 오래된 키보드에서 많이 발생할까?

    기계식 스위치는 수천만 회 이상의 내구성을 갖고 있지만 시간이 지나면서 접점이 마모되거나 산화될 수 있습니다. 접점이 오염되면 바운싱 시간이 길어지고 신호가 불안정해져 채터링이 발생할 가능성이 높아집니다.

    특히 먼지, 습기, 산화가 함께 발생하면 스위치 내부 저항이 변하면서 접촉이 일정하지 않게 됩니다. 이 경우 디바운스만으로는 해결되지 않고 스위치 교체가 필요한 경우도 있습니다.

    원인 결과
    접점 산화 신호 불안정
    스위치 마모 채터링 증가
    먼지 유입 접촉 불량
    디바운스 부족 중복 입력 발생

    8. 자주 묻는 질문

    Q. 디바운스는 입력 지연을 만들까요?

    아주 짧은 시간의 지연은 발생합니다. 하지만 일반적으로 수 밀리초 수준이므로 대부분의 사용자는 체감하기 어렵습니다.

    Q. 채터링이 생기면 디바운스를 늘리면 해결되나요?

    일시적으로 완화될 수 있지만 스위치가 심하게 마모된 경우에는 근본적인 해결책이 되지 않습니다.

    Q. 광축 키보드는 디바운스가 필요 없나요?

    금속 접점이 없어 바운싱은 크게 줄지만 센서 안정성을 위해 매우 짧은 필터링 과정은 여전히 사용됩니다.

    Q. 모든 기계식 키보드가 같은 디바운스를 사용하나요?

    아닙니다. 제조사, MCU, 펌웨어, 스위치 종류에 따라 사용하는 알고리즘과 시간이 모두 다를 수 있습니다.

    Q. 디바운스는 USB와 Bluetooth 모두 적용되나요?

    네. 입력 신호는 MCU 내부에서 먼저 디바운스 처리된 뒤 USB HID 또는 Bluetooth HID 보고서 형태로 전송됩니다.

    📚 함께 보면 좋은 글

    디바운스는 키보드 입력 처리 과정의 한 단계입니다. 아래 글을 함께 읽으면 키 입력이 스위치에서 PC까지 전달되는 전체 구조를 더욱 쉽게 이해할 수 있습니다.

    🔗 공식 자료

    📖 출처

    • QMK Firmware Documentation
    • QMK Debounce Documentation
    • QMK Matrix Documentation
    • USB Implementers Forum (USB-IF)
    • Bluetooth SIG Specifications
    Link&Tem 한 줄 정리

    디바운스는 기계식 스위치의 바운싱을 제거해 하나의 안정적인 입력만 남기는 핵심 기술입니다. 우리가 매일 사용하는 키보드의 정확한 입력은 바로 이 수 밀리초의 정교한 펌웨어 처리 덕분에 가능해집니다.