"변환이 뭔지 — 이름, 시키는 말, 부르는 키, 맥락이 얼마나 필요한지 — 가 작은 기록 하나에 다 들어가."
변환 하나가 기록 하나에
FlintMacro 는 변환 하나를 돌리는 데 필요한 걸 다 담고 그 외엔 아무것도 안 담는 작은 값 타입이야. 안 바뀌는 번호 하나. 사람이 부르는 이름. 뭘 하는지 정하는 프롬프트 틀, 긁어놓은 글이 들어갈 {input} 자리와 함께. 켜져 있는지. 단축키(없어도 되고). vault 를 쓸지 말지. 언제 만들었는지. 이게 전부야. 모델도, 쥐고 있는 상태도, 기록도 안에 없어. 매크로는 엔진이 아니라 '이렇게 해줘' 라고 적어둔 종이 한 장이야.
번호가 왜 안 바뀌어야 하나
번호는 만들 때 한 번 붙고 그 뒤로 안 바뀌어. 이름을 고쳐도, 단축키를 갈아도, 틀을 손봐도. 그 덕에 다른 것들이 이 매크로를 안심하고 가리킬 수 있는 거야. 핫키 센터가 이 번호로 등록을 걸어두고, 팔레트도 이걸로 목록을 만들어. 단축키를 바꾸는 것도 '지우고 새로 만들기' 가 아니라 '이 번호를 풀고 같은 번호로 새 키를 거는 일' 이 되고. 이름도 바뀌고 단축키도 바뀌지만, 그 밑의 정체는 그대로야.
번호 : 영원히 그대로 (진짜 정체)
이름 : 고칠 수 있음 (사람이 부르는 말)
틀 : 고칠 수 있음 (실제로 뭘 하는지)
단축키 : 고칠 수 있음 (어떻게 부르는지)
vault : 고칠 수 있음 (맥락이 얼마나 필요한지)
바뀌는 것 전부가 안 바뀌는 번호 하나에 매달려 있다.
그냥 값이고, 그냥 파일이야
매크로가 결국 데이터일 뿐이라 저장도 아주 간단해. 목록을 Flint 자기 폴더의 JSON 파일에 쓰고, 켤 때 읽어. 데이터베이스도, 마이그레이션도, 맞춰두기도 없어. 파일 하나에 작은 기록 몇 개 담긴 배열이 전부지. 이 단순함은 일부러고, 그 자체가 기능이야. 열어서 읽으면 그냥 이해되는 매크로 파일이라야 믿고 고칠 수 있거든.
고칠 수 있는 물건엔 고치는 것과 별개인, 안 바뀌는 정체를 줘. 기록을 이름이나 단축키로 알아본다면, 이름을 고치거나 단축키를 바꾸는 순간 그걸 가리키던 것들이 전부 끊겨. 따로 붙인 안 바뀌는 번호가 '이게 어느 기록인지' 를 '이 기록이 지금 뭐라고 적혀 있는지' 에서 떼어놔. 그래야 바뀌는 칸들이 마음대로 바뀌어도 가리키던 것들이 계속 살아 있어. 번호는 닻이고, 나머지는 움직여도 되는 거야.
그냥 JSON 으로 두는 게 한계가 아니라 기능이야. 매크로 파일이 읽을 수 있는 JSON 이라, 앱을 안 켜고도 Flint 가 뭘 돌릴지 정확히 볼 수 있어. 급하면 손으로 고칠 수도 있고, 두 버전을 나란히 놓고 뭐가 달라졌는지 볼 수도 있고. 여기에 데이터베이스를 들이는 건 그 투명함을 데이터한테 필요도 없는 기계랑 맞바꾸는 짓이야. 이 정도 크기 목록엔 작고 읽히고 파일로 있는 쪽이 화려하지만 안 보이는 쪽을 이겨.