블로그

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

    1막 — 그날

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

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

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

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

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

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

    강변 산책로를 달리는 사람들. 뒤로 맨해튼 스카이라인이 보입니다.
    이미지: AI로 생성한 그림입니다.

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

    2막 — 서랍

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

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

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

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

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

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

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

    3막 — 어느 날

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

    날은 좋았습니다. 커피 한 잔에 기대어 갔고 아이가 시험을 치르는 동안 차에서 무료하게 기다렸습니다. 문제는 돌아오는 길이었습니다. 눈꺼풀이 천근만근이 됐습니다. 이러다 사고를 내겠구나 싶을 만큼 피로가 몰려왔습니다. 짜증이 폭발합니다. 아이에게 짜증을 부렸습니다. 도저히 운전을 이어갈 수 없어 중간에 세우고 쉬었습니다.

    집에 와서 곰곰이 생각했습니다. 아이에게 짜증을 낸 게 처음이 아니었습니다. 아내는 그걸 훨씬 오래전부터 받아왔습니다. 이건 뭔가 잘못됐습니다.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    5막 — 문

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

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

    The Economist 표지. "The quantified self — How data can help you live longer"
    이미지 출처: The Economist, 2022년 5월 7–13일자

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

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

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

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

    제가 왜 관리를 못 했는지가 그제야 설명됐습니다. 저는 결과지의 빨간 항목을 하나씩 따로 보고 있었습니다. 하나는 전체와 연결되어 있고, 따라서 원리를 이해해야 그 하나를 관리할 수 있는 것입니다.

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

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

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

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

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

    ChatGPT도 의사가 아니고 저도 의사가 아닙니다. 여기 적는 건 제 몸에서 나온 제 기록입니다. 따라 하시기 전에 의사와 상의하세요.

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

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

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

    애플워치 울트라
    손목에서 몇 년째 재고만 있던 물건. 이미지 출처: Apple Newsroom

    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가 그걸 사람 말로 착각하고, 제가 입을 떼기도 전에 “말이 끝났다”고 판단해 녹음을 닫아버린 겁니다. 편하라고 붙인 소리 알림이 자기 귀를 막고 있었습니다.

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

  • AI가 써줄 수 있는 글은 쓰지 않습니다

    왜 지금 블로그인가

    검색을 AI가 대신하는 시대에 개인 블로그를 여는 건 늦은 일처럼 보입니다. 실제로 늦었습니다. “이 에러는 이렇게 고칩니다” 같은 글은 이제 값이 없습니다. 물어보면 3초에 답이 나오니까요.

    그래서 그런 글은 쓰지 않기로 했습니다.

    안 쓸 글

    발행 버튼을 누르기 전에 저 자신에게 묻는 질문이 하나 있습니다.

    이 글을 AI가 30초에 쓸 수 있나?

    답이 “그렇다”면 올리지 않습니다. 검색해서 모은 걸 정리한 글, 읽은 책을 요약한 글, 뉴스에 감상을 붙인 글이 전부 여기 걸립니다. 저도 그런 글을 쓸 줄 압니다. 다만 그건 이미 다른 데 많습니다.

    쓸 글

    남는 건 하나입니다. 제가 직접 해보고 그 과정에서 실제로 겪은 것.

    AI가 못 만드는 지점이 그겁니다. AI에겐 흘러간 시간이 없고, 자기 몸이 없고, 틀렸다가 바뀐 생각이 없습니다.

    세 가지를 쓰려 합니다.

    AI — 제 일입니다. 매달 업데이트합니다. 그날그날의 유행을 따라가는 대신, 제가 일하면서 갖게 된 관점으로 보겠습니다. 관점이 글마다 바뀌면 그건 관점이 아니니, 같은 눈으로 계속 보는 쪽을 택합니다.

    건강 — 배운 것을 바탕으로 제 프로토콜을 만들어 매일 하고 있습니다. 그 결과를 숫자와 함께 그대로 적습니다. 잘된 주도 쓰고 무너진 주도 씁니다. 아마 무너진 주가 더 쓸모 있을 겁니다.

    주말 프로젝트 — 만든 것과 접은 것을 같이 적습니다. 접은 이유가 대개 더 유용하고 배울 게 많았습니다.

    약속할 수 있는 것

    매주 건강 기록을 남깁니다. 한 달에 한 번 AI 이야기를 씁니다. 뭔가 만들면 그때그때 적습니다.

    나이가 들어도 직접 배우기를 게을리하지 않으면 어디까지 가는지, 저를 상대로 실험해 보려 합니다. 그 기록이 여기 쌓일 겁니다.