[태그:] 동적 키맵

  • 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가 장치와 배열을 이해하고 설정 화면을 구성하도록 돕는 구조 설명서입니다.