[작성자:] 제이 허드슨

  • 몸이 하는 말을 처음 들었습니다

    🎤이 글을 팟캐스트로 들어보세요Beta

    AI 목소리로 만든 5분 요약본입니다 · 본문 전체를 그대로 담지는 않았습니다

    서랍을 열었습니다. 그다음이 문제였습니다.

    지난 글을 올리고 나서 제가 저에게 물은 게 있습니다. 십 년 동안 검진을 받았다면서요. 그것도 측정 아닌가요. 지금부터 하겠다는 것과 뭐가 다른가요.

    답을 못 하면 지난 글은 그냥 반성문입니다.

    몸이 하는 말

    몸은 계속 말을 걸어옵니다. 다만 우리가 아는 언어가 아닙니다.

    하루 단위로는, 어젯밤 잠을 제대로 못 잔 날 아침에 심박수를 재보면 평소보다 높습니다. 주 단위로는, 스트레스가 많았던 주에는 공복혈당이 올라와 있습니다. 몇 주 단위로는, 체중은 그대로인데 허리둘레만 조금씩 줄어드는 날들이 이어지면 근육이 늘고 지방이 줄었다는 뜻입니다. 몸은 이렇게, 서로 다른 주기로 말합니다. 놓치기 딱 좋은 신호들로 말입니다. 들어도 못 알아들었던 겁니다.

    지난 글에서 제가 결과지를 「제가 읽을 수 없는 언어」라고 부른 것도 같은 얘기였습니다.

    몇 년 전만 해도 이 언어를 번역받으려면 병원에 가야 했습니다. 1년에 한 번, 그마저도 거르기 일쑤였습니다. 지금은 다릅니다. 손목의 시계 하나, 반지 하나가 매일 매시간 그 신호를 받아 적습니다. 그러고는 제가 알아들을 수 있는 숫자로 바꿔서 보여줍니다. 이것이 Quantified Self라는 기술의 가장 간단한 정의입니다. 자기 몸을 수치로 번역한다는 뜻입니다.

    제 몸이 하는 말을, 제가 드디어 들을 수 있게 된 겁니다.

    처음 질문(십 년 동안 한 검진과 뭐가 다른가)에 대한 답은 뒤에서 바로 드리겠습니다. 그 전에, 앞으로 몇 편에 걸쳐 이 답을 어떻게 실행에 옮길지부터 짧게 보여드리겠습니다.

    물론 배워야 할 것이 있습니다. 지난 글에서 결과지를 한 줄씩 옮겨 적어 ChatGPT에 물었던 그 밤을 기억하실 겁니다. 그때 저에게 필요했던 것도 번역이었습니다. 지금 하려는 일은 그 번역을 1년에 한 번이 아니라 매일, 몸에 붙여서 받는 것뿐입니다.

    이번 글부터 몇 편에 걸쳐 하려는 일은 이렇습니다.

    한국인에게 가장 흔한 질환 넷에 집중합니다. 비만, 고혈압, 이상지질혈증, 당뇨입니다. 넷 다 다른 이름이지만 생활습관으로 충분히 완화할 수 있고, 많은 경우 정상으로 되돌릴 수 있습니다.

    그다음 다섯 가지를 하나씩 바꿔봅니다. 밥, 잠, 몸, 쉼, 곁입니다.

    밥은 언제, 어떻게, 무엇을 먹는지입니다. 잠은 밥만큼, 어쩌면 밥보다 중요한 습관입니다. 몸은 얼마나 움직이는가, 쉼은 스트레스를 어떻게 내려놓는가입니다. 곁은 정서, 그러니까 사람과의 관계를 말합니다. 다섯 다 일상에서 매일 반복되는 행동입니다.

    다섯 모두 중요하지만 사람마다 약한 곳이 다릅니다. 베개에 머리만 대도 바로 잠드는 사람이 있고, 몇 년째 불면증인 사람도 있습니다. 본인에게 부족한 한 곳부터 손대면 됩니다.

    일상의 습관을 바꾸고 나면 숫자로 확인합니다. 넷이 어떻게 움직였는지 봅니다.

    이 과정은 이렇게 흐릅니다.

    [대상]  비만·고혈압·이상지질혈증·당뇨
       ↓ 무엇을 바꿀지 정한다
    [변화]  밥·잠·몸·쉼·곁
       ↓ 숫자로 확인한다
    [확인]  바뀌었나, 안 바뀌었나

    앞으로 쓸 글들은 모두 이 틀을 따릅니다. 머리에 이것만 넣어두면, 복잡해 보이는 건강 관리도 단순해집니다.

    예전에도 재고 있었는데, 뭐가 다른가

    처음 질문으로 돌아가겠습니다. 십 년을 측정했는데 관리를 못 한 이유가 무엇인가. 셋이 있습니다.

    한 점이냐, 기준선이냐. 건강검진은 1년에 한 점입니다. 한 점만으로는 비교할 것이 없어서 해석이 안 됩니다. 기준선은 다릅니다. 무언가를 바꾸기 직전에 재는 점이고, 그 뒤로 나오는 모든 값은 이 점과 비교됩니다. 비교 상대가 생겨야 측정이 관리로 바뀝니다.

    남의 정상 범위냐, 제 정상 범위냐. 결과지에 나오는 참고 범위는 인구 집단 기준입니다. 범위 안에만 있으면 괜찮은 것이 아닙니다. 제 기준선에서 계속 같은 방향으로 움직이고 있다면 그건 신호입니다. 지난 글에서 이미 이 장면을 봤습니다. 「몇 년치를 날짜 순으로 늘어놓으니 같은 항목이 계속 같은 방향으로 움직이고 있었습니다」 — 그때는 왜 이것이 중요한지 몰랐습니다.

    그냥 재느냐, 무엇을 바꿀지 정해두고 재느냐. 이것이 가장 중요합니다. 기준선은 숫자가 아닙니다. 다음 행동과 짝지어진 숫자입니다. 짝이 없으면 재고 나서 다시 서랍에 들어갑니다. 십 년 동안 제가 한 것이 정확히 그것이었습니다.

    기준선은 무엇을 바꿀지 이미 정해둔 상태에서 재는 것입니다.

    한 번의 사이클

    대상이 정해지면 다음 질문은 이것입니다. 넷을 되돌리려면 무엇을 바꿔야 하는가.

    하나의 변화가 여러 질환에 동시에 영향을 줍니다. 비만과 고혈압을 보면 둘 다 밥을 바꾸면 따라갑니다. 당뇨와 고혈압은 둘 다 스트레스의 영향을 받습니다. 한 가지를 손대면 여러 곳이 움직입니다.

    한 번의 사이클은 이렇습니다. 하나의 변화를 고르고, 기간을 정하고, 숫자를 봅니다. 바뀌었으면 유지합니다. 안 바뀌었으면 다른 변화를 시도합니다. 이 과정을 반복하면서 어느 것이 내 몸을 움직이는지 알아갑니다.

    무엇으로, 얼마나 자주 재는지는 다음 글에서 하나씩 짚겠습니다.

    오늘 하실 수 있는 것

    다 한 번에 잡을 필요는 없습니다. 오늘은 서랍 한 장부터 시작하면 됩니다.

    가장 최근 결과지를 꺼내세요. 그리고 넷(비만·고혈압·이상지질혈증·당뇨) 중에 해당하는 항목이 있는지 찾아보세요. 그것이 기준선입니다. 오늘은 동그라미만 치세요. 숫자를 바꾸려고 하지 마시고요.

    그럼 이제 몸이 하는 이야기를 들으러 가 봅시다.

  • 측정은 했는데 관리를 하지 않았습니다

    1막 — 그날

    2024년 1월, 뉴욕의 하늘은 맑았습니다. 일주일 전에 받은 혈액검사 결과를 들으러 가는 길이었습니다.

    날씨와 달리 몸은 그렇지 못했습니다. 얼마 전부터 기력이 달렸습니다. 무릎은 계단을 오르내릴 때 삐걱거렸고, 허리는 의자에서 일어날 때 아팠고, 목은 아침에 눈을 뜨면 뻐근했습니다. 불면증은 오래돼서 고칠 수 없는 것으로 알고 지냈습니다. 머릿속이 맑지 않으니 뭉게구름을 올려다볼 여유 같은 건 없었습니다.

    한국에서든 여기서든 의사에게 듣는 말은 늘 같았습니다. 술을 줄이세요. 운동을 하세요. 잘 챙겨 드세요. 몰라서 안 하나 싶었습니다. 지나고 보니 저는 정말로 아는 게 없었습니다.

    그날 들은 설명도 기억나지 않습니다. 어려운 용어는 늘 그렇듯 귀를 스쳐 지나갔습니다. 남은 건 종이에 빨간색으로 찍힌 항목이 지난번보다 몇 개 늘었다는 사실뿐이었습니다. 저 숫자들이 자기들끼리 짜고 제 기력을 빼가는 모양이라고 생각했습니다.

    집에 오니 더 피곤했습니다. 현관을 지나고 나면 손가락 하나 까딱하기 싫어집니다. 몇 년째 그랬습니다.

    오는 길에 조깅하는 사람들을 봤습니다. 몸이 좋은 것도 아니었고 뛰는 자세가 나은 것도 아니었습니다. 저는 웃었습니다. 금세 잊었습니다.

    저녁에 한국에서 전화가 왔습니다. 어머니는 연세가 드셔도 자식 걱정뿐입니다. 수십 년째 당뇨를 앓고 계시고 그 병에 유전이 크게 작용한다는 걸 아시니 통화할 때마다 같은 말을 하십니다. 너는 그러지 마라. 의사가 ’당뇨 전 단계’라고 했던 말이 떠올랐습니다. 아직 당뇨는 아니다. 그렇게 정리하고 전화를 끊었습니다.

    2막 — 서랍

    제 책상 서랍에는 검사 결과지가 쌓여 있습니다. 한국에서 받은 건강검진 결과지, 미국에서 받은 혈액검사 결과지. 버리지는 않았습니다. 다시 꺼내 본 적도 없었습니다.

    서랍에 쌓인 검사 결과지

    기계도 하나 샀습니다. 오래전에 The Economist에서 「The Quantified Self」라는 기사를 읽고, 이것저것 재보면 좋겠다는 생각이 들어 애플워치를 샀습니다. 그러고는 데이터를 들여다보지 않았습니다. 시계는 손목에서 계속 뭔가를 재고 있었고, 저는 그걸 시계로 썼습니다.

    양쪽 병원을 다니면서 차이를 하나 느꼈습니다. 제가 다닌 한국 병원에서는 의사가 쉽게 설명해줬고 저에게 요구하는 것이 없었습니다. 미국 쪽은 반대였습니다. 진료 시간이 길고 별별 것을 꼬치꼬치 캐묻습니다. 제대로 답하지 못하는 질문이 많았습니다. 다른 환자들은 이런 걸 다 알고 오나, 나만 모르나 싶었습니다.

    요구도 많았습니다. 집에 혈압계가 있습니까. 심박계는 있습니까. 그런 기본적인 것도 없이 건강에 관심이 있다고 할 수 있느냐고 묻는 것처럼 들려서 불편했습니다. 몇 번 반복되고 나니 검진 날짜가 다가오면 그것만으로 스트레스를 받았습니다.

    그러면서도 결과지는 읽지 않았습니다. HbA1c, Bilirubin, Neutrophils, ALT, AST, MCV. 일반인은 접근할 필요도 없고 접근할 수도 없는 Lexicon, 의학 용어라고 생각했습니다. 제 몸인데 제가 읽을 수 없는 언어로 정해둔 겁니다.

    그래서 제가 이해한 것은 한 줄이었습니다. 뭔가 제대로 돌아가지 않는 데가 있지만 사는 데 지장은 없는 정도. 나이가 들면 어쩔 수 없는 변화겠거니 했습니다.

    시간은 그대로 흘렀습니다. 늘 피곤했지만 그러려니 했고, 그 무기력이 일상이 됐습니다.

    3막 — 어느 날

    아이 시험장에 데려다줄 일이 생겼습니다. 차로 몇 시간 거리였고 제가 운전대를 잡았습니다.

    날은 좋았습니다. 커피 한 잔에 기대어 갔고 아이가 시험을 치르는 동안 차에서 무료하게 기다렸습니다. 문제는 돌아오는 길이었습니다. 눈꺼풀이 참을 수 없을 만큼 무거워졌습니다. 정신력으로 버틸 수 있는 수준이 아니었습니다. 이대로는 사고가 난다는 걸 몸이 먼저 알았습니다.

    그런데도 짜증이 먼저 터졌습니다. 지금 상태로 운전대를 잡고 있으면 안 된다는 걸 알면서도, 그 순간 튀어나온 건 브레이크를 밟는 판단이 아니라 아이에게 낸 짜증이었습니다. 몸을 움직이는 것도, 뭔가를 생각하는 것도 다 귀찮았습니다. 책임감이 그 귀찮음을 이기지 못하는 지점까지 와 있었던 겁니다. 도저히 운전을 이어갈 수 없어 갓길에 차를 세웠습니다.

    세워놓고 곰곰이 생각해보니 이건 의지로 극복할 수 있는 문제가 아니었습니다. 제 몸 상태가 그만큼 최악이었던 겁니다. 비만, 당뇨 전 단계, 높은 혈압, 고지혈증, 운동 부족, 술과 담배로 찌든 생활 — 하나하나는 늘 어렴풋이 문제라고 알고 있었습니다. 그런데 그날 처음으로, 이 모든 게 따로가 아니라 한데 뭉쳐 지금의 저를 만들었다는 걸 깨달았습니다.

    그리고 그건 그날 하루의 짜증으로 끝나는 일이 아니라는 것도 알았습니다. 일, 가정, 사회생활 전반에 이미 오래전부터 영향을 미치고 있었습니다. 아이에게 짜증을 낸 게 처음이 아니었습니다. 아내는 그걸 훨씬 오래전부터 받아왔습니다. 이건 뭔가 잘못됐습니다.

    집에 돌아와 노트북을 켰습니다. 서랍에 내팽개쳐 뒀던 결과지를 꺼내 검사 항목을 하나하나 옮겨 적고 ChatGPT에 넣었습니다. 이 항목이 무엇인지, 몸에 어떤 영향을 주는지, 정상 범위는 어디까지인지, 무엇을 해야 하는지 물었습니다.

    결과는 생각보다 좋지 않았습니다. 그리고 제 몸 상태를 처음으로 마주한 순간이었습니다.

    몇 년치를 날짜 순으로 늘어놓으니 같은 항목이 계속 같은 방향으로 움직이고 있었습니다.

    저에게는 그리 긴 시간이 아니었던 것 같은데, 그 결과는 훨씬 오래 쌓여서 만들어진 것이었습니다.

    ChatGPT는 의사가 아닙니다. 추천은 해주지만 진단은 못 합니다. 그래도 제 상태를 밖에서 보게 해주는 눈은 됐습니다.

    4막 — 측정은 했는데 관리를 안 했다

    회사를 다니며 배운 것이 하나 있다면, 측정하지 않는 것은 관리되지 않는다는 겁니다.

    저는 측정하고 있었습니다. 한국에서는 건강검진으로, 미국에서는 혈액검사로, 몇 년째 정기적으로. 손목에서는 시계가 하루도 쉬지 않았습니다. 서랍의 종이들과 그 시계가 증거입니다.

    그러니까 문제는 데이터가 없는 게 아니었습니다. 측정은 했는데 관리를 하지 않았습니다.

    왜 그랬는지 생각해 봤습니다.

    첫째, 제 건강을 의사에게 맡겨두고 있었습니다. 제 몸인데 제 몸을 설명하는 언어는 의사들의 언어였고, 저는 그걸 배운 적이 없으니 제가 할 수 있는 일이 아니라고 여겼습니다.

    미국 의사가 집에 혈압계가 있느냐고 물었을 때, 그건 저를 나무란 게 아니었습니다. 맡기지 말라는 말이었습니다. 알아듣는 데 몇 년이 걸렸습니다.

    둘째, 귀찮았습니다. 제가 겪은 한국 의료는 빠르고 쌌습니다. 제 전문 분야도 아닌 일에 시간을 쓰는 건 바보 같다고 생각했습니다. 귀동냥으로 들은 영양제를 챙기고 집 앞 산에 몇 번 오르면 나아지겠거니 했습니다. 마음만 먹으면 언제든 된다고. 심각해지면 집 앞에 널린 병원 중에 제일 유명한 데를 가면 다 고쳐줄 거라고.

    그사이 어머니는 수십 년째 당뇨를 앓으셨고, 저는 십여 년째 당뇨 전 단계였습니다.

    십여 년입니다. 그날 밤 전화를 끊으며 「아직 당뇨는 아니다」라고 정리한 그 문장을, 저는 십 년 넘게 해마다 반복하고 있었습니다.

    무엇을 어떻게 바꿔야 하는가. 그리고 저는 왜 알면서도 움직이지 않는가. 답은 쉽게 나오지 않았습니다. 측정하는 일과 관리하는 일 사이에 제가 한 번도 열어본 적 없는 문이 하나 있다는 걸, 그때는 몰랐습니다.

    5막 — 문

    관리하는 방법을 찾아봤지만 뚜렷한 길이 보이지 않았습니다. 혼자 무모한 일을 벌이는 것 같아 마음이 식어갈 무렵이었습니다.

    실마리는 오래된 데서 나왔습니다. 애플워치를 사게 만들었던 그 기사입니다. 거기에 바이오해킹이라는 분야가 있다고 적혀 있었습니다. 그때는 시계만 사고 덮었는데, 이번에는 그 단어를 따라갔습니다.

    브라이언 존슨의 Don’t Die 행사를 다녀왔습니다. 그가 자기 몸에 하는 일에 다 동의하지는 않습니다. 다만 그 행사에서 배운 게 많았습니다. 개인이 자기 건강을 관리한다는 게 뭔지 거기서 처음 봤습니다. 전문가들을 만났고, 그들을 통해 또 다른 전문가와 자료로 이어졌습니다.

    이후 바이오해킹 행사를 더 다니고 책을 읽으며 체계를 잡아갔습니다. 그런데도 뭔가 놓치고 있다는 아쉬움이 가시지 않았습니다. 늘 목말랐습니다.

    결국 하버드 의대 과정에 등록했습니다. 제 몸을 제가 관리하려면 배우는 것 말고는 방법이 없다고 판단했습니다.

    거기서 배운 것은 하나로 줄일 수 있습니다. 몸은 증상 하나씩 고치는 대상이 아니라 전체로 봐야 한다는 것. 그리고 그 전체를 실제로 다루는 틀이 따로 있다는 것.

    제가 왜 관리를 못 했는지가 그제야 설명됐습니다. 저는 결과지의 빨간 항목을 하나씩 따로 보고 있었습니다. 하나씩은 손댈 데가 없어 보였습니다.

    준비하는 데 2년이 걸렸습니다. 그리고 석 달이 걸렸습니다. 제 몸을 다시 돌리는 시간이. 지금 제 결과지에 빨간 항목은 0개입니다. 모두 제자리를 찾았습니다. 어떤 숫자가 어떻게 움직였는지는 프로토콜 문서에 따로 적겠습니다.

    6막 — 그래서 이렇게 씁니다

    하나씩 바꿉니다. 두 개를 같이 바꾸면 어느 쪽이 들었는지 알 수 없습니다.

    숫자로 확인합니다. 몸 상태에 대한 제 느낌은 그날 날씨에 따라 달라집니다.

    틀리면 접습니다. 효과가 있어도 제가 못 지킬 만큼 번거로우면 접습니다. 그 판단도 같이 적습니다.

    매주 짧은 기록을 남기고, 실험이 하나 끝날 때마다 무엇을 바꿔서 무엇이 움직였는지 적겠습니다. 잘된 주보다 무너진 주를 더 자세히 쓰겠습니다. 저에게도 그쪽이 더 쓸모 있었습니다.

    저와 비슷하게 결과지에 빨간 항목이 늘고 있는 분들을 생각하며 씁니다. 제 몸에서 나온 기록이라 그대로 맞지는 않을 겁니다. 어디서부터 시작할지 정하는 데만 쓰셔도 충분합니다.

    그날 길에서 조깅하는 사람들을 보고 저는 웃었습니다. 지금 저는 그 사람들 중 하나가 되지는 않았습니다. 달리지 않고 걷습니다. 달리기는 저에게 무리였고, 측정해 보니 걷기가 저에게 맞았습니다.

    활동 링과 심박수가 떠 있는 애플워치 울트라 화면

    2024년 1월 그날 밤, 저는 전화를 끊으며 「아직 당뇨는 아니다」라고 정리했습니다. 그건 안심한 사람의 문장이 아니었습니다. 자기 결과지를 한 번도 읽어본 적 없는 사람의 문장이었습니다.

    지금도 그 문장을 쓰고 계신 분이 있을 겁니다. 저는 십 년을 썼습니다. 서랍을 여는 데는 하루면 됩니다.

  • AI 키보드가 품절돼 생긴 일

    시작은 키보드였습니다

    Codex Micro 매크로패드. 아래쪽 가장 큰 키에 마이크 아이콘이 있습니다.
    이미지 출처: PCMag, “OpenAI Is Selling a $230 Keyboard Designed for Its Codex Agent”

    Codex Micro라는 키보드를 봤습니다. Work Louder와 OpenAI가 만든 230달러짜리 매크로패드인데, 키마다 색이 바뀌며 상태를 알려주고 — 파랑이면 생각 중, 초록이면 완료, 노랑이면 내 차례 — 아래쪽 가장 큰 자리에 마이크 키가 박혀 있었습니다. 사고 싶었습니다. 이미 품절이었습니다.

    못 사게 되니 오히려 생각을 하게 됐습니다. 나는 Claude Code를 쓸 때 무엇으로 지시를 내리고 있나. 세어보니 거의 전부 타이핑이었습니다. 그리고 지시가 길어질수록 느려졌습니다. 머릿속에 있는 걸 다 적기 전에 앞부분을 다듬고 있거나, 귀찮아서 짧게 줄이고 있었습니다.

    긴 지시에는 말이 더 맞겠다는 판단이 여기서 나왔습니다. 저 키보드에 마이크 키가 있는 것도 우연은 아닐 겁니다.

    키보드는 못 샀으니 소프트웨어로 만들기로 했습니다.

    만들려던 것

    마이크에 대고 말하면 그대로 받아적어서, 지금 열려 있는 Claude Code 세션에 넣어주는 상주 스크립트입니다. “엔터”, “지워” 같은 예약어는 텍스트 대신 키 입력으로 처리합니다.

    받아적는 건 로컬에서 돌립니다. mlx-whisper의 large-v3-turbo를 쓰고, 그 앞에 faster-whisper의 VAD를 세워 무음 구간을 걸러냅니다. 조용한 구간을 whisper에 그냥 넘기면 하지도 않은 말을 지어내기 때문입니다.

    반대 방향도 붙였습니다. Claude의 대답은 macOS say로 읽어줍니다. 화면을 안 보고도 진행 상황을 알 수 있습니다.

    시작할 때 몰랐던 것

    상시 대기가 이렇게 어려운 줄 몰랐습니다.

    핫키를 누르고 말하는 방식으로 먼저 만들었습니다. 잘 돌아가니 욕심이 났습니다. 손도 안 대고 “클로드” 한마디로 깨어나면 더 좋지 않겠나. 시리도 하고 알렉사도 하는데. 왜 어려웠는지, 그래서 어떻게 됐는지는 아래 「되돌린 것」에 정리했습니다.

    며칠, 어디까지

    하루입니다. 설계 문서를 커밋한 게 7월 24일 오후, 마지막 커밋이 25일 새벽 0시 50분. 그 사이 23개 커밋이었습니다.

    하루로 끝난 데는 이유가 있습니다. 전에 Vibe-Chat을 만들면서 STT와 TTS를 이미 한 번씩 공부해뒀습니다. whisper가 무음 구간에서 “감사합니다” 같은 하지도 않은 말을 지어낸다는 것도 그때 겪었고, 앞에 VAD를 세워 막아야 한다는 것도 그때 알았습니다. 이번엔 그 부분을 그대로 가져다 썼습니다. 처음부터 만든 게 아니라 절반은 재고에서 꺼낸 셈입니다.

    그리고 그날 밤 이걸로 실제로 일했습니다. 실행 로그가 201줄 남아 있습니다.

    21:23:44 ● 녹음중… (말이 끝나면 자동 종료)
    21:23:46 ⏳ 변환중…
    21:23:47 ✓ 키 입력: esc_esc
    21:23:47 ● 녹음중… (말이 끝나면 자동 종료)
    21:23:51 ⏳ 변환중…
    21:23:51 ✓ "응, 좋아졌지?" 주입됨

    되돌린 것

    웨이크 워드를 만들었고, 하루 만에 지웠습니다.

    fc6d1c3  feat: 웨이크 워드 '클로드' 상시 대기 모드
    9569f74  revert: 웨이크 워드 제거 — 핫키+VAD 자동 종료로 복귀

    이유는 정확도였습니다. “클로드”라고 불렀는데 안 깨어나거나, 부른 적 없는데 깨어났습니다. 둘 다 드물게 일어나는데, 드물게 일어나는 게 더 나빴습니다. 언제 틀릴지 모르니 매번 신경을 쓰게 됩니다. 편하려고 만든 기능이 신경 쓸 거리를 하나 더 늘린 셈이었습니다.

    핫키는 그런 게 없습니다. 누르면 듣고, 안 누르면 안 듣습니다. 여기에 무음 1.5초면 알아서 끊는 VAD를 붙이니, 결국 손이 가는 건 시작할 때 한 번뿐이었습니다. 웨이크 워드로 아끼려던 게 딱 그 한 번이었습니다.

    되돌리는 커밋을 쓰면서 든 생각은, 이걸 만들어보지 않았으면 몰랐겠다는 것이었습니다. 웨이크 워드가 어렵다는 얘기는 어디서든 읽을 수 있습니다. 그런데 “드물게 틀리는 게 자주 틀리는 것보다 성가시다”는 건 읽어서는 안 와닿았습니다. 내가 만든 걸 내가 쓰다가 짜증이 나야 알게 되는 종류입니다.

    책상을 떠났습니다

    여기까지 와도 물리 버튼이 없었습니다. 노트북 키를 눌러야 하니 결국 책상 앞이어야 했습니다. 그러니까 처음에 못 산 그 키보드가 다시 떠올랐습니다.

    8BitDo Micro 블루투스 게임패드

    집에 8BitDo Micro가 있었습니다. 손가락만 한 블루투스 게임패드인데, 뒷면 스위치를 키보드 모드로 놓으면 별도 드라이버 없이 macOS에서 키보드로 잡힙니다. 값은 230달러의 10분의 1 정도입니다.

    여기서 한 번 걸렸습니다. 키보드 모드의 버튼은 원하는 키로 바꿀 수 있는 게 아니라, 버튼마다 정해진 문자키를 보냅니다. L 버튼은 k를 보냅니다. 푸시투토크 키로 쓰기엔 곤란합니다. 누를 때마다 화면에 k가 찍힐 테니까요.

    그래서 Karabiner-Elements를 한 겹 끼웠습니다. 패드가 보내는 kF13으로 바꿉니다. F13은 화면에 아무것도 안 찍히고 macOS 기본 기능도 없어서 푸시투토크에 안전합니다.

    여기서 꼭 필요한 게 기기 식별자 조건입니다. 이걸 빼면 변환이 진짜 키보드에까지 적용돼서, 타이핑하다 k를 누를 때마다 녹음이 시작됩니다.

    vendor_id: 11720, product_id: 36897

    나머지 버튼은 필요해서 걸었습니다. Claude Code는 말만 주고받다 끝나지 않습니다. 중간중간 선택지를 띄웁니다 — 이 편집을 허용할지, 어느 쪽으로 갈지. 방향키로 고르고 Enter로 정하고, 아니다 싶으면 ESC로 이전 메뉴로 돌아갑니다. 짧고 자주 오는 순간이라 말로 하기엔 오히려 번거롭습니다.

    그래서 D패드에 방향키, Y에 Enter, X에 ESC를 걸었습니다. 이제 한 손에 쥐고 대화를 끝까지 끌고 갈 수 있습니다.

    D패드에서 한 번 더 걸렸습니다. 패드를 세로로 쥐니 버튼 라벨과 실제 방향이 안 맞는데, 회전을 계산해서 맞추려다 틀렸습니다. 좌우가 뒤집힌 배치였습니다. 결국 EventViewer를 열고 네 방향을 하나씩 눌러 실측해서 넣었습니다.

    스크립트에서 바꾼 건 이 줄 하나입니다.

    HOTKEY = keyboard.Key.f13

    이제 AirPods를 끼고 게임패드를 쥔 채로 책상을 떠날 수 있습니다. 누르고, 말하고, 놓으면 됩니다.

    여기서 좀 이상한 일이 생겼습니다. 못 사서 아쉬웠던 그 키보드는 애초에 이걸 못 합니다. 매크로패드는 책상에 놓여 있어야 하니까요. 대체품을 만들다 보니 원본이 못 하는 걸 하게 됐습니다.

    남은 것

    한국어 짧은 명령어는 여전히 자주 틀립니다. “지워”가 “주워”로 찍힙니다. 오인식 단어장과 자모 유사도 매칭을 붙여 급한 불은 껐지만, 근본적으로 해결한 건 아닙니다.

    그리고 오늘 이런 게 있었습니다. 녹음을 시작하자마자 “무음”으로 끝나버리는 일이 생겼습니다. 원인은 녹음 시작을 알리는 그 “띵” 소리였습니다. 스피커에서 난 소리가 마이크로 새어들어가고, VAD가 그걸 사람 말로 착각하고, 제가 입을 떼기도 전에 “말이 끝났다”고 판단해 녹음을 닫아버린 겁니다. 편하라고 붙인 소리 알림이 자기 귀를 막고 있었습니다.

    감시 시작 시점을 조금 뒤로 미뤄서 막아뒀지만, 헤드셋을 안 쓰면 언제든 다시 나올 수 있습니다.