터미널에서도 살아남는 받아쓰기
받아쓰기 붙여넣기는 터미널, SSH, tmux, 비QWERTY 배열에서 조용히 실패합니다. 클립보드 붙여넣기 방식이 거기서 깨지는 이유와, 타이핑 모드가 대신 하는 일.
받아쓰기 도구를 써 보는 개발자들은 아주 특정한 모양의 실패에 부딪히곤 합니다. 도구는 데모에서 훌륭하게 동작합니다. Notes에서도, Slack에서도, 브라우저에서도 됩니다. 그런데 터미널에 포커스를 주고 한 문장을 받아쓰면, 아무것도 안 나오거나, 말한 것과 다른 게 나오거나, 절반만 나오고 나머지 절반은 어느새 클립보드에 들어가 있습니다. 로컬에서는 되다가 서버에 SSH로 들어가는 순간 죽기도 합니다.
이 패턴이 워낙 일관돼서, 저는 이게 어느 한 제품의 버그라고 생각하지 않습니다. 이 분야가 텍스트를 넣는 방식이 낳은 결과이고, 하필 개발자가 사는 바로 그 자리에서 실패합니다.
이건 2년 전보다 지금 더 중요합니다. Claude Code를 목소리로 조종하기에서 설명한 워크플로처럼 Claude Code를 목소리로 몬다면, 터미널은 여러 앱 중 하나가 아닙니다. 바로 그 앱입니다. 프롬프트가 떨어지는 곳이고, 에이전트가 방향 수정을 기다리는 곳이고, 병렬 레인이라는 것 전체가 되거나 안 되거나 하는 곳입니다. 터미널에서 불안정한 받아쓰기 도구는, 바이브 코더에게는 자기의 유일한 일에서 불안정한 도구입니다.
왜 하필 개발자가 사는 곳에서 붙여넣기가 깨지나?
분야 차원의 작동 원리는 이렇습니다. 대부분의 받아쓰기 도구는 텍스트를 같은 방식으로 넣습니다. 전사된 문장을 시스템 클립보드에 올리고, 포커스된 앱에 Cmd+V 키 입력을 합성해 보냅니다. 합리적인 기본값입니다. 붙여넣기는 즉각적이고, 거의 모든 GUI 텍스트 필드에서 동작하며, 앱별 작업이 거의 필요 없습니다.
문제는 그 전제가 조용히 기대고 있는 모든 것입니다.
먼저 포커스된 앱이 Cmd+V를 "붙여넣기"로 다룬다는 데 기댑니다. 터미널은 흔히 그러지 않습니다. 많은 터미널이 Cmd+V를 다른 데 쓰거나 아예 안 쓰고, tmux와 vim은 붙여넣기가 무엇인지에 대해 각자의 생각이 있으며, 원격 SSH 세션은 쏟아지는 붙여넣기 텍스트를 로컬 기기가 예측할 수 없는 방식으로 해석할 수 있습니다. 브래킷 페이스트, 복사 모드, 삽입 모드 대 일반 모드. 터미널 세계는 합성된 붙여넣기가 엉뚱하게 들어가거나 어디에도 안 들어가는 상태로 가득합니다.
다음으로 클립보드가 쓸 수 있고 보호되지 않은 상태라는 데 기댑니다. 클립보드 매니저는 그걸 고쳐 씁니다. 비밀번호 매니저는 의도적으로 비우거나 보호합니다. 보안 기능이 "내 받아쓰기를 붙여넣기"를 조용히 "아무것도 붙여넣지 않기"로 바꿔 놓는 셈입니다. 그리고 모든 게 잘 돌아갈 때조차, 도구는 방금 당신이 복사해 둔 것을 덮어썼습니다. 창들 사이로 들고 다니던 커밋 SHA는 사라지고 그 자리에 당신의 문장이 들어옵니다. 여러 레인을 굴리는 사람에게 그건 작은 생채기가 아닙니다. 그 클립보드는 일을 하고 있었으니까요.
그리고 — 이건 사람들이 놀라는 지점인데 — 키보드 배열에 기댑니다. 도구가 키 입력 시뮬레이션으로 물러설 때, 순진한 방식은 키 코드, 즉 물리적 키 위치를 보내는 것입니다. 키 코드는 배열을 거쳐 문자로 매핑됩니다. QWERTY에서 "V"의 코드는 V를 만듭니다. Dvorak에서는 같은 물리적 위치가 다른 글자입니다. 그래서 Dvorak, AZERTY, Colemak 배열에서 스캔코드를 시뮬레이션하는 도구는 치환 암호를 통과한 것 같은 텍스트를 만들어 냅니다. 사용자는 알아볼 수 없는 글자를 보고 음성 인식이 실패했다고 짐작합니다. 아닙니다. 인식은 완벽했고, 텍스트를 넣는 과정이 그걸 뒤섞었습니다.
이 중 어느 것도 누군가의 악의나 게으름이 아닙니다. 클립보드 붙여넣기는 90% 경우에 맞는 기본값입니다. 다만 개발자는 나머지 10%에서 하루를 보낼 뿐입니다.
"대신 타이핑한다"는 게 실제로 무슨 뜻인가
Keebye에는 insert_mode라는 설정이 있고 값은 둘입니다. 기본값인 paste, 그리고 type.
타이핑 모드는 붙여넣지 않습니다. macOS에서는 CGEventKeyboardSetUnicodeString을 씁니다. 합성된 키 이벤트에 실제 유니코드 텍스트를 붙이는 API입니다. 문자는 이벤트 자체에 실려 가고, 키보드 배열을 거쳐 조회되지 않습니다. 그래서 구조적으로 배열과 무관합니다. Dvorak이든 AZERTY든 Colemak이든 무엇으로 치든, 도착하는 텍스트는 전사된 그 텍스트입니다. 애초에 잘못될 스캔코드-문자 변환이 없었으니까요.
타이핑 모드의 두 번째 성질은 터미널 사용자가 신경 쓰는 바로 그것입니다. 클립보드를 절대 건드리지 않습니다. 그 코드 경로에서 클립보드 연산은 0입니다. 클립보드 내용은 당신의 것으로 남습니다. SHA가 살아남고, 비밀번호 매니저는 막아설 게 없고, 클립보드 매니저는 기록할 게 없습니다.
그리고 터미널과 원격 세션은 사람이 칠 수 있는 속도보다 빨리 도착하는 텍스트에 목이 막힐 수 있으므로, 타이핑 모드는 의도적으로 속도를 조절합니다. 텍스트는 16자 청크로 들어가고 청크 사이에 4밀리초의 간격이 있습니다. 한 문장이 1초도 안 되어 도착할 만큼 빠르면서도, SSH 너머의 tmux 창이 해석해야 할 덩어리가 아니라 따라갈 수 있는 키 입력으로 받아들일 만큼 절제되어 있습니다.
붙여넣기 모드는 여전히 있고 여전히 기본값입니다. 평범한 GUI 앱에서 큰 텍스트 덩어리를 넣을 때는 정말로 더 빠르니까요. 세 문단짜리 Slack 메시지는 청크의 흐름이 아니라 한 번의 붙여넣기로 도착합니다. 다만 붙여넣기 모드도 배열 교훈은 배웠습니다. 합성되는 Cmd+V는 물리적 V 키코드를 쓰므로, 문자 조회 방식이 겪는 방식으로 비QWERTY 배열에서 깨지지 않습니다.
에이전트 작업을 위한 실전 설정은 단순합니다. insert_mode를 type으로 바꾸고, Claude Code가 도는 터미널에 포커스를 주고, 키를 누른 채 방향 수정을 말하고, 떼세요. 프롬프트는 키 입력이 도착하는 방식으로 도착합니다. 터미널이 보기에는 실제로 그게 키 입력이니까요. SSH와 tmux 관련 세부를 포함한 단계별 설정은 macOS 터미널을 위한 음성 받아쓰기에 있습니다.
솔직한 한계
타이핑 모드는 긴 텍스트에서 붙여넣기보다 느립니다. 결함이 아니라 산수입니다. 간격을 둔 청크 키 입력은 단일 붙여넣기 이벤트보다 오래 걸리고, 문서에 여러 문단을 받아쓴다면 붙여넣기 모드가 더 경쾌하게 느껴질 겁니다. 붙여넣기가 기본값으로 남고 타이핑 모드가 설정에서 켜는 옵션인 이유가 정확히 이것입니다. 맞는 모드는 텍스트가 어디로 가느냐에 달려 있습니다.
어떤 애플리케이션은 대개 보안상의 이유로 합성 입력을 제한하거나 걸러 냅니다. 어떤 텍스트 입력 전략도 거기서 완전히 벗어나지 못합니다. 합성 이벤트를 거부하는 앱은 모든 받아쓰기 도구의 것을 거부합니다.
그리고 이 글이 무엇을 주장하고 무엇을 주장하지 않는지 분명히 해 두겠습니다. 터미널에서 붙여넣기가 깨진다는 불만은 받아쓰기 분야 전반의 패턴이지, 특정 경쟁 제품만의 결함이 아닙니다. 다른 도구들은 각자의 답과 각자의 강점을 가지고 있고, 저희는 Keebye vs Superwhisper와 Keebye vs Wispr Flow에서 각각이 당신에게 더 잘 맞을 수 있는 지점까지 포함해 솔직한 비교를 썼습니다.
텍스트를 넣는 일은 받아쓰기의 화려하지 않은 절반입니다
음성 인식은 모든 관심을 받습니다. 모델 이름, 정확도 주장, 언어 개수. 하지만 받아쓰기 도구에는 일이 둘 있습니다. 당신의 말을 제대로 듣는 것, 그리고 그 텍스트를 잃어버리거나 망가뜨리지 않고 커서가 있는 곳까지 가져가는 것. 두 번째 일은 사소하게 들리지만, 이 분야가 개발자를 조용히 실망시키는 자리입니다. 두 번째 일은 TextEdit에서는 쉽고, Dvorak 배열을 쓰는 원격 서버의 tmux 창에서는 어렵기 때문입니다.
프롬프트가 터미널에 떨어진다면 — 코딩 에이전트를 몬다면 그렇습니다 — 텍스트를 넣는 일은 각주가 아닙니다. 데모용 도구와 실제로 쓰는 도구를 가르는 차이입니다. 참고로 비슷한 결의 실패 양상이 하나 더 있습니다. 마이크 콜드 스타트 때문에 받아쓰기의 첫 단어가 먹히는 것도 기계적인 설명이 있는 분야 전반의 불만이고, 그 이야기는 받아쓰기 앱이 첫 단어를 먹는 이유에 썼습니다.
Keebye는 macOS용 얼리 액세스 중입니다. 입에서 터미널 사이 어딘가에서 받아쓰기가 사라진 적이 있다면, 아래에서 무료 체험을 시작하고, 타이핑 모드를 켜고, 같은 프롬프트를 다시 시도해 보세요. 복사해 둔 SHA는 클립보드에 남고, 단어들은 타이핑된 유니코드로 도착합니다.
가장 어려운 터미널 경로를 시험하세요
무료 체험을 시작해 타이핑 모드를 켜고, 평소 붙여넣기가 깨지던 SSH나 tmux 프롬프트를 시험해 보세요.
Start free trialEarly access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.
계속 읽기
병렬 에이전트에 프롬프트 받아쓰기, 레인 하나씩
코딩 에이전트를 두세 개 동시에 돌리면 프롬프트 쓰는 일이 병목이 됩니다. 지금 보고 있는 레인을 떠나지 않고 병렬 레인에 먹이를 주는 음성 워크플로.
Claude Code를 목소리로 조종하기: 병렬 레인으로 만들기
AI 코딩 에이전트는 타이핑을 병목으로 만들었습니다. macOS에서 병렬 에이전트 레인을 가로질러 프롬프트와 리뷰와 방향 수정을 받아쓰는 실전 워크플로.
말한 그대로 적어라: AI 재작성 없는 받아쓰기
AI로 다듬는 받아쓰기는 당신이 한 말을 고쳐 씁니다. 단서가 빠지고 의미가 뒤집힙니다. LLM 정리 파이프라인이 당신을 의역하는 이유, 그리고 Keebye가 곧이곧대로 남는 이유.