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 값만 저장 영역에 기록할 수 있습니다. 이후 키보드를 다시 연결하면 펌웨어가 이 값을 읽어 변경된 키맵을 그대로 적용합니다.
- 부팅 직후 사용할 기본 레이어
- VIA 또는 동적 키맵 기능으로 수정한 Keycode
- RGB 조명 모드, 색상, 밝기와 속도
- 백라이트 밝기와 활성화 상태
- 오디오 기능의 활성화 여부와 일부 음향 설정
- 디버그 기능이나 키보드별 사용자 설정
- 분할 키보드의 좌우 판별 정보처럼 지속적으로 유지해야 하는 값
정확히 어떤 항목이 저장되는지는 키보드 펌웨어 구성에 따라 달라집니다. 모든 QMK 키보드가 위 설정을 전부 사용하는 것은 아니며, 기능이 비활성화되어 있으면 해당 데이터 영역도 사용되지 않을 수 있습니다. 제조사가 자체 펌웨어를 추가한 제품이라면 배터리 표시 방식이나 무선 모드와 관련된 설정이 별도로 저장되기도 합니다.
EEPROM은 키 입력 자체를 저장하는 공간이 아닙니다. 일반적인 키 입력은 매트릭스 스캔 결과에 따라 실시간으로 처리되고 USB 또는 Bluetooth HID 보고서로 전달됩니다. EEPROM에는 이 과정에서 참조할 설정값이 저장됩니다. 따라서 EEPROM 속도가 키보드의 Polling Rate나 Scan Rate를 직접 결정하는 것은 아닙니다.
3. Flash·RAM·EEPROM은 무엇이 다를까?
키보드 MCU 내부에는 역할이 다른 여러 메모리 영역이 존재합니다. 이 가운데 Flash, RAM, EEPROM은 자주 함께 언급되지만 저장 목적과 데이터 유지 방식이 서로 다릅니다.
Flash에는 일반적으로 QMK 펌웨어의 실행 코드와 컴파일된 기본 키맵이 들어갑니다. RAM은 펌웨어가 실행되는 동안 레이어 상태, 현재 눌린 키, 타이머와 버퍼 같은 임시 데이터를 보관합니다. EEPROM은 전원이 꺼져도 유지해야 하는 소규모 설정을 저장합니다.
세 메모리의 차이를 이해하면 펌웨어를 다시 올렸는데도 설정이 바뀌지 않는 현상을 설명할 수 있습니다. 새로운 펌웨어는 Flash에 기록되지만 기존 EEPROM 데이터가 그대로 남아 있으면 펌웨어가 부팅하면서 이전 설정을 다시 불러올 수 있기 때문입니다.
반대로 EEPROM만 초기화하면 저장 설정은 기본값으로 돌아가지만 Flash의 펌웨어 프로그램은 그대로 남습니다. 키보드가 지원하는 기능과 코드가 삭제되는 것이 아니라, 펌웨어가 참조하던 사용자 설정 데이터가 다시 초기 상태로 만들어지는 것입니다.
펌웨어 플래시와 EEPROM 초기화는 같은 작업이 아닙니다. 펌웨어 플래시는 실행 프로그램을 교체하는 과정이고, EEPROM 초기화는 저장된 설정을 기본값으로 되돌리는 과정입니다. 일부 도구에서는 두 작업을 함께 수행할 수 있어 동일한 기능처럼 보일 수 있습니다.
4. QMK는 EEPROM을 어떻게 사용할까?
QMK는 부팅 과정에서 EEPROM 설정이 정상적으로 초기화되어 있는지 확인합니다. 유효한 데이터가 없거나 초기화 표시가 올바르지 않다면 기본 설정을 기록하고, 이미 정상적인 데이터가 존재하면 그 값을 읽어 기능별 상태를 복원합니다.
QMK의 지속 설정 구조에서는 기본 레이어, 키보드 설정, 사용자 설정, RGB와 백라이트 같은 기능이 각자 필요한 데이터를 저장할 수 있습니다. 개발자는 QMK가 제공하는 함수를 이용해 설정값을 읽고 기록할 수 있으며, 키보드별 사용자 데이터 영역을 별도로 구성하는 것도 가능합니다.
여기서 중요한 점은 현재 활성화된 레이어와 기본 레이어가 다르다는 것입니다. Fn 키를 누르는 동안 잠시 활성화되는 레이어는 일반적으로 RAM의 실시간 상태로 관리됩니다. Fn 키를 놓거나 키보드를 재부팅하면 해제됩니다. 반면 기본 레이어를 영구적으로 변경하는 기능은 선택한 값을 EEPROM에 기록할 수 있어 재부팅 후에도 유지됩니다.
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에 남은 동적 키맵이 계속 우선 적용되기 때문입니다.
- 키보드가 VIA 또는 Dynamic Keymap을 사용하는지 확인합니다.
- 기존 VIA 키맵이 비휘발성 저장 영역에 남아 있는지 확인합니다.
- 필요한 설정을 백업하거나 기존 배열을 기록해 둡니다.
- QMK가 제공하는 EEPROM 초기화 기능을 실행합니다.
- 재부팅 후 펌웨어의 기본 키맵이 다시 적용되는지 확인합니다.
이 현상은 펌웨어 플래시 실패나 MCU 고장으로 오해하기 쉽습니다. 그러나 키보드가 정상적으로 연결되고 일부 기능도 제대로 작동한다면 기존 EEPROM 설정이 새 기본값을 덮어쓰는 상황인지 먼저 살펴보는 것이 좋습니다.
EEPROM을 초기화하면 VIA 키맵, 기본 레이어, RGB 설정 등 여러 사용자 설정이 함께 초기화될 수 있습니다. 문제 해결을 위해 초기화하기 전에는 현재 키 배열과 조명 값을 화면 캡처나 메모로 남겨 두는 것이 안전합니다.
6. EEPROM 초기화가 필요한 상황
EEPROM 초기화는 키보드를 사용할 때마다 해야 하는 정기 관리 작업이 아닙니다. 저장된 값이 현재 펌웨어와 충돌하거나 잘못된 설정 때문에 정상 동작이 어려울 때 선택적으로 사용합니다.
대표적인 사례는 펌웨어 업데이트 후 키 배열이 예상과 다르게 작동하는 경우입니다. 이전 버전에서 사용하던 설정 구조와 새 펌웨어의 기본값이 달라졌는데 기존 데이터가 남아 있다면 일부 기능이 비정상적으로 보일 수 있습니다. RGB 모드가 바뀌지 않거나 기본 레이어가 계속 이전 배열로 시작하는 상황에서도 EEPROM 값을 확인할 필요가 있습니다.
- 새 펌웨어를 올렸는데 이전 VIA 키맵이 계속 적용될 때
- 기본 레이어를 변경한 뒤 원래 배열로 돌아오지 않을 때
- RGB 또는 백라이트 설정이 비정상적으로 저장될 때
- 펌웨어 기능을 변경한 뒤 이전 설정과 충돌하는 것으로 보일 때
- 중고 키보드에 이전 사용자의 설정이 남아 있을 때
- 공식 문제 해결 문서에서 EEPROM 초기화를 안내할 때
QMK에서는 키맵에 배치할 수 있는 EEPROM 초기화용 Keycode와 Bootmagic 기능, 펌웨어 내부 함수 등을 통해 저장 설정을 재초기화할 수 있습니다. 구체적인 방법은 키보드 제조사가 제공한 펌웨어와 부트로더 구성에 따라 달라질 수 있으므로 무작정 특정 키 조합을 따라 하기보다는 해당 키보드의 공식 설명서를 먼저 확인하는 것이 좋습니다.
EEPROM은 키보드 펌웨어 자체를 실행하는 공간이 아니라 전원이 꺼져도 유지해야 하는 설정을 저장하는 비휘발성 영역입니다. QMK에서는 기본 레이어, 조명 상태, VIA 동적 키맵과 사용자 설정을 보존하는 데 활용됩니다. 다음 내용에서는 EEPROM의 쓰기 수명, Wear Leveling 구조, AVR·STM32·RP2040의 저장 방식 차이와 초기화 시 주의사항을 이어서 살펴보겠습니다.
7. EEPROM에는 왜 계속 기록하면 안 될까?
EEPROM은 전원이 꺼져도 데이터를 유지할 수 있지만, 무제한으로 기록할 수 있는 저장공간은 아닙니다. 메모리 셀에 전기적인 방식으로 값을 쓰고 지우는 구조이기 때문에, 같은 위치에 반복적으로 기록하면 셀이 조금씩 마모될 수 있습니다.
이 때문에 키보드 펌웨어는 키를 누를 때마다 EEPROM에 데이터를 저장하지 않습니다. 일반적인 키 입력은 RAM에서 처리되고, 키맵이나 RGB 설정처럼 전원을 껐다 켠 뒤에도 남아야 하는 값이 변경되었을 때만 EEPROM 기록이 발생합니다.
키보드를 사용할 때 발생하는 수많은 키 입력이 모두 EEPROM에 기록되는 것은 아닙니다. EEPROM에는 주로 사용자가 변경한 설정값과 장기적으로 유지해야 하는 상태만 저장됩니다.
예를 들어 VIA에서 하나의 키 기능을 변경하면 변경된 키맵 데이터가 영구 저장공간에 반영될 수 있습니다. 반면 문서를 작성하면서 수천 번 키를 입력하더라도, 그 입력 기록 자체는 EEPROM에 저장되지 않습니다.
8. Write Endurance와 수명은 무엇을 의미할까?
EEPROM 사양에서 자주 등장하는 용어가 Write Endurance입니다. 이는 특정 메모리 위치에 데이터를 안정적으로 다시 기록할 수 있도록 설계된 반복 횟수를 의미합니다.
중요한 점은 EEPROM 전체가 한 번 기록될 때마다 수명이 하나씩 줄어드는 방식은 아니라는 것입니다. 일반적으로는 실제로 기록이 일어난 메모리 셀과 주소 영역의 반복 횟수가 중요합니다. 따라서 같은 주소에 매우 짧은 간격으로 계속 값을 덮어쓰는 구조가 가장 부담을 줄 수 있습니다.
정상적인 키보드 사용에서는 설정값을 매초 반복 저장하지 않습니다. VIA 키맵을 가끔 수정하거나 RGB 설정을 변경하는 정도로 EEPROM 수명이 빠르게 끝날 가능성은 매우 낮습니다.
문제가 될 수 있는 것은 사용자가 직접 펌웨어 코드를 작성하면서 메인 반복문이나 키 스캔 루프 안에 EEPROM 쓰기 함수를 넣는 경우입니다. 키보드의 스캔 루프는 매우 빠르게 반복되므로, 조건 없이 기록 함수가 실행되면 짧은 시간에 같은 영역을 과도하게 덮어쓸 수 있습니다.
- 값이 실제로 변경되었을 때만 기록하는가?
- 키 스캔 루프마다 쓰기 함수가 실행되지는 않는가?
- 짧은 시간에 같은 주소를 반복해서 덮어쓰지는 않는가?
- 펌웨어가 제공하는 저장 API와 드라이버를 사용하고 있는가?
9. Wear Leveling은 왜 필요할까?
Wear Leveling은 특정 메모리 위치에 기록이 집중되지 않도록 저장 위치를 분산하는 방식입니다. 같은 주소만 계속 덮어쓰는 대신 여러 영역을 순차적으로 활용해 플래시 메모리의 마모를 분산합니다.
특히 물리적인 EEPROM이 없는 MCU에서는 내부 플래시 메모리 일부를 EEPROM처럼 사용하는 경우가 있습니다. 하지만 플래시 메모리는 일반 EEPROM과 지우기 단위나 기록 방식이 다르기 때문에, 단순히 특정 주소 하나를 계속 덮어쓰는 방식은 효율적이지 않을 수 있습니다.
이때 펌웨어의 EEPROM 드라이버가 데이터를 여러 위치에 분산하거나, 유효한 최신 데이터를 구분하는 관리 구조를 사용할 수 있습니다. 사용자는 동일하게 EEPROM API를 호출하지만, 실제 하드웨어에서는 MCU와 드라이버에 따라 서로 다른 저장 방식이 작동하는 것입니다.
QMK에서 말하는 EEPROM은 항상 독립된 물리 EEPROM 칩만을 의미하지 않습니다. 개발자가 사용하는 공통 저장 인터페이스에 가까우며, 실제 저장 장치는 MCU 내부 EEPROM, 외부 EEPROM, 플래시 기반 에뮬레이션 등으로 달라질 수 있습니다.
10. AVR, STM32, RP2040의 저장 방식 차이
키보드에 사용되는 MCU가 달라지면 EEPROM을 구현하는 방식도 달라질 수 있습니다. 대표적으로 일부 AVR MCU는 칩 내부에 실제 EEPROM 영역을 포함하지만, STM32나 RP2040 기반 키보드는 선택한 MCU와 보드 구성에 따라 플래시 또는 외부 저장장치를 이용할 수 있습니다.
따라서 “이 키보드에는 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에 대한 흔한 오해
13. 자주 묻는 질문
📚 함께 보면 좋은 글
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 플랫폼 개발 문서.
EEPROM은 키보드가 전원을 잃어도 키맵과 설정을 기억하게 해주는 영구 저장공간이며, 실제 구현 방식은 MCU와 펌웨어 드라이버에 따라 달라집니다.

답글 남기기