How-to

AI 코딩을 위한 음성 입력: 타이핑 없이 Cursor와 Claude Code에 음성 프롬프트

바이브 코딩은 변경 사항을 타이핑하는 대신 말로 설명할 수 있을 때 더 빨라져요. 실제 예시 여섯 개, 저희가 수렴한 프롬프트 패턴, 그리고 다국어 식별자를 다루는 법.

요약

Cursor에 음성으로 프롬프트를 넣는 방법, 혹은 모든 식별자를 일일이 받아쓰지 않고 Claude Code 받아쓰기를 제대로 하는 방법을 찾고 있다면 이게 실용 가이드예요. AI 코딩을 위한 음성 입력이 통하는 이유는 프롬프트가 대부분 산문이기 때문이에요: 컨텍스트, 의도, 제약, 테스트 기대치. Loqua는 여기에 멀티모달 화면 컨텍스트, 구조화된 프롬프트 포맷팅, 기술 어휘 처리, 그리고 문장 중간 영어+중국어 혼용을 더해줘요. 바이브 코딩 보이스 워크플로가 가장 큰 보상을 주는 곳: 긴 Cursor 프롬프트, Claude Code 디버깅, 리팩터 스펙, 테스트 설명. 짧은 "fix this" 프롬프트는 음성이 별로 빠르지 않은 경우가 많아요 — 진짜 이득은 빽빽한 지시에서 나와요.

Loqua는 맥용 컨텍스트 인식 음성 입력 도구로, 작가님이 작업 중인 환경을 보고 그에 맞게 출력을 잡아줘요. AI 코딩 측면에서는 Cursor의 chat panel, Claude Code의 터미널, ChatGPT의 프롬프트 박스를 감지해서 각 도구가 가장 잘 처리하는 구조로 프롬프트를 만들어줄 수 있다는 뜻이에요.

이건 생산성 listicle 같은 홍보가 아니에요. 저희도 매일 AI 코딩에 음성을 쓰고, 긴 지시에서는 프롬프트 작성 시간을 대략 절반으로 줄여요 — 이득이 가장 큰 지점이에요. 짧은 프롬프트("fix this")는 비등비등해요. 긴 구조화된 프롬프트(리팩터 스펙, 여러 파일 변경, 디버그 설명)가 음성이 값어치를 하는 곳이에요.

왜 음성이 AI 코딩과 잘 맞을까

AI 코딩 프롬프트의 형태는 코드의 형태와 달라요. 좋은 프롬프트에는 컨텍스트 블록(내가 어디 있는지, 뭘 보고 있는지, 방금 뭘 시도했는지), 지시 블록(뭘 원하는지), 제약(X는 바꾸지 마, Y는 유지해, Z 테스트를 통과해야 해)이 있어요. 그건 문법이 아니라 산문이에요 — 산문은 음성이 잘하는 영역이에요.

타이핑보다 생각이 빨라요 — 산문에서는 2배 정도 차이가 쉽게 나요. 병목은 사고 모델이 아니라 키 입력 비용이에요. LLM에게 복잡한 상황을 설명하는 프롬프트에서는 그 차이가 의미가 커요. Loqua는 기본 받아쓰기 위에 세 가지를 더해요: IDE 상태를 봐서 컨텍스트 블록이 알아서 써지고, 프롬프트를 구조적으로 포맷팅하고(system + user, 또는 불릿 스텝 리스트), 식별자를 일일이 받아쓰지 않아도 기술 어휘를 처리해요.

AI 코딩을 위한 설정

이 섹션은 Loqua가 설치돼 있다고 가정해요(맥에서 코드 받아쓰기 설치 가이드 참고). AI 코딩에 특화된 설정은 Loqua에 Accessibility 권한을 주는 것뿐이에요 — 활성 앱의 선택 영역과 인접 텍스트를 읽을 수 있게 해줘요. macOS Accessibility는 developer.apple.com에 문서화돼 있어요. 스크린 리더와 자동화 도구가 쓰는 그 API예요.

들이면 좋은 세 가지 습관:

  • 받아쓰기 전에 선택부터. 프롬프트가 특정 블록에 작용하길 원하면 먼저 선택하세요. Loqua가 선택을 컨텍스트로 넘겨요.
  • chat panel을 인라인으로 열어두세요. Cursor에서 chat panel이 보이면 Loqua에게 "지금 편집이 아니라 프롬프트"라고 알려주는 거예요.
  • 구조 구분을 위해 멈추세요. 반 초 정도의 멈춤이 프롬프트에서 단락 구분으로 읽혀요 — 컨텍스트와 지시를 분리할 때 유용해요.

잘 동작하는 프롬프트 구조

몇 달간 음성으로 프롬프트를 쓰면서, 가장 깔끔한 LLM 동작을 만들어내는 세 가지 구조로 수렴했어요. Loqua는 발화 시작을 어떻게 잡는지를 읽어서 출력을 그에 맞춰요.

먼저 이렇게 말하면이런 출력 형태로
"Refactor this so..."Refactor: [목표]. Constraints: [선택에서 암시됨]. Output: [코드].
"Debug this — when I X, Y happens but I expected Z"steps, expected, actual이 있는 서술형 버그 리포트.
"Write a spec for..."구조화된 스펙: Goal / Inputs / Outputs / Edge cases / Tests.
"Add a test that..."테스트 설명 + 수용 기준.
"Explain why this code..."일반 산문, 기술적 톤.

실제 예시 여섯 가지

이렇게 말하면 (Cursor에서 함수 선택한 채로)
"refactor this to use the new auth client and remove the legacy fallback that's not used anywhere else"
Loqua가 이렇게 적어요 (Cursor chat에)
Refactor the selected function to use the new AuthClient. Remove the legacy fallback path — confirmed unused elsewhere in the codebase. Preserve the public function signature.
이렇게 말하면 (Claude Code에서 디버깅)
"when I call the search endpoint with an empty query I get a 500 instead of an empty array I expected the empty case to be handled gracefully"
Loqua가 이렇게 적어요 (Claude Code 터미널에)
Debug: search endpoint returns 500 on empty query.

Steps:
1. POST /search with body { "query": "" }
2. Server responds 500 (expected: 200 with empty array)

Hypothesis: the empty-string path skips the early-return and hits the indexer with an invalid query.

Fix: add an early return for empty queries.
이렇게 말하면 (새 기능 스펙 작성)
"spec for a saved searches feature users can save a search and reload it later it should sync across devices and be queryable by name"
Loqua가 이렇게 적어요 (Cursor 기획 문서에)
## Spec: Saved Searches

**Goal:** users save a search query and reload it later.

**Inputs:** search query (string), user id, optional name (string, defaults to first N chars of query).

**Behavior:**
- Persist to user's saved-searches collection.
- Sync across devices via existing user-data sync.
- Queryable by name (case-insensitive substring match).

**Edge cases:** duplicate names → suffix with index; deleted user → cascade delete.
이렇게 말하면 (테스트 요청)
"add a test that verifies the rate limiter blocks the eleventh request in a one minute window and returns a 429 with a retry after header"
Loqua가 이렇게 적어요 (Claude Code에)
Add a test for the rate limiter:
- Send 10 requests in a 60-second window — all succeed.
- 11th request should return 429.
- Response must include a Retry-After header with seconds-remaining value.
- Use existing test fixtures for time control.
이렇게 말하면 (여러 파일 리팩터 요청)
"break the user controller into separate files for auth profile and preferences keep the existing public API and update the router"
Loqua가 이렇게 적어요 (Cursor chat에)
Refactor: split userController.ts into three modules — authController, profileController, preferencesController. Keep the public API surface unchanged. Update the router to import from the new locations. No behavior changes; this is a structural refactor only.
이렇게 말하면 (작업 도중 방향 전환)
"actually before we refactor add a regression test that covers the current behavior of the merge function so we can detect drift later"
Loqua가 이렇게 적어요 (Claude Code에)
Before refactoring: add a regression test covering the current behavior of the merge function. The test should snapshot the existing outputs so we can detect any drift introduced by the refactor.

Loqua가 파일 컨텍스트를 보게 하기

선택 없이 "refactor this"라고 말하면 Loqua는 지시만 보내요. 텍스트를 선택해두면, 선택된 게 뭔지 설명하는 짧은 컨텍스트 블록 — 파일 이름, 줄 번호, 주변 식별자 — 을 지시 앞에 붙여요. 컨텍스트를 받아쓸 필요 없어요. 멀티모달 레이어가 알아서 읽어요.

이건 명시적인 컨텍스트의 덕을 보는 AI 도구들에 중요해요(특히 Claude Code는 파일 경로와 줄 번호의 덕을 많이 봐요). Loqua의 옴니모달 스택이 이걸 가능하게 해요 — 연구 수준의 직관이 궁금하면 보이스, 비전을 만나다: 옴니모달 받아쓰기에 더 깊이 들어가 있어요.

문장 중간 EN+中

저희 엔지니어링 팀 논의의 상당수가 영어 기술 용어가 섞인 만다린어로 이뤄져요. 이런 톤으로 AI 도구에 음성 프롬프트를 넣는 게 매일 하는 일이에요. Loqua는 모드 전환 없이 code-switching을 처리해요:

이렇게 말하면 (Cursor chat에서)
"那个 cache invalidation 的逻辑要重构 现在 race condition 太多了 边界 case 经常漏"
Loqua가 이렇게 적어요 (Cursor 프롬프트로)
那个 cache invalidation 的逻辑要重构 —— 现在 race condition 太多了,边界 case 经常漏。请帮我重新设计 invalidation 策略:列出 race-condition 风险点,给出建议的同步原语方案,覆盖典型边界 case。

도구 간 재사용

같은 음성 표현을 서로 다른 AI 도구에 받아쓰면 도구에 맞게 다른 프롬프트가 나와요. 작가님이 다시 짤 필요 없어요 — Loqua가 알아서 해요:

도구Loqua가 만들어내는 프롬프트 형태
Cursor (chat panel)암묵적 파일 컨텍스트가 들어간 대화형 지시
Claude Code (터미널)명시적인 파일 경로와 간단한 계획이 들어간 구조화된 지시
ChatGPT (웹)섹션이 있는 마크다운 형식 프롬프트
Aider (터미널)타깃 경로가 명시된 직접적인 파일 편집 지시

음성으로 한 번만 말하면 — Loqua가 도착지마다 다시 잡아줘요.

주의할 점

  • 코드를 글자 단위로 받아쓰지 마세요. 음성은 프롬프트의 산문 부분을 위한 거예요. 코드는 LLM이 만들게 두세요. 코드를 한 글자씩 받아쓰려 하면 본래 의미가 무너져요.
  • 선택이 중요해요. 선택된 코드를 Loqua가 컨텍스트로 포함하길 원하면 받아쓰기 전에 선택하세요. 안 하면 지시만 전송돼요.
  • 긴 멈춤은 받아쓰기를 끝내요. 1.5초 침묵이 발화 종료로 읽혀요. 문장 중간에 생각 중이라면 필러 단어를 쓰세요 — Loqua가 출력에서 필러는 걷어내지만, 녹음을 유지하는 데에는 활용해요.
  • Cursor의 chat panel 상태가 중요해요. panel이 안 보이면 Loqua가 받아쓰기를 프롬프트가 아니라 코드 편집으로 다룰 수도 있어요. 먼저 열어두세요.
  • 식별자를 그냥 받아쓰지 마세요. 흔치 않은 커스텀 라이브러리 이름이 있다면 Settings의 Personal Dictionary에 추가하거나 한 단어로 발음하세요.

전체적인 효과: 긴 지시에서 프롬프트 작성 시간이 대략 절반으로 줄고, 프롬프트 자체도 더 좋아져요 — 음성 형식이 변경 사항을 명명만 하는 게 아니라 의도를 설명하도록 유도하니까요. 그 부분이 순수 속도보다 더 중요해요. 더 넓은 보이스 AI 코딩 패턴 — Cursor 음성 프롬프트 흐름, Claude Code 받아쓰기, 긴 세션 동안 키보드에서 손을 떼는 법 — 에 관해서는 위에 링크된 동반 가이드들을 참고하세요.

왜 음성이 AI 작업과 잘 맞는지 더 긴 글로 보고 싶다면 AI와 함께 생각하기에 키보드가 잘못된 도구인 이유를 보세요.

자주 묻는 질문

Loqua가 Cursor의 chat panel에서도 동작하나요?
네. Loqua는 Cursor chat panel이 열려 있는 걸 감지하고, 받아쓰기를 코드 편집이 아니라 프롬프트로 처리해요. 선택된 코드(있다면)는 컨텍스트로 포함돼요. chat panel을 먼저 열어두세요; 안 그러면 Loqua가 받아쓰기를 코드 파일 편집으로 다룰 수도 있어요.
Loqua가 Claude Code에서도 동작하나요?
네. Claude Code는 터미널에서 실행되고, Loqua는 그 프롬프트를 구조화된 지시 컨텍스트로 처리해요 — 출력에 적절할 때 명시적인 파일 경로와 간단한 계획이 포함돼요. 긴 리팩터 설명과 스펙 초안 작성에서 빛을 발해요.
코드를 한 글자씩 받아쓸 수 있나요?
기술적으로는 가능하지만 그러면 안 돼요. 음성은 프롬프트의 산문 부분 — 설명, 목표, 제약 — 을 위한 거예요. 코드는 LLM이 만들게 두세요. 코드를 글자 단위로 받아쓰려 하면 본래 목적이 무너져요.
Loqua는 프롬프트인지 코드 편집인지 어떻게 알아요?
활성 앱, 포커스 상태, 보이는 UI 단서를 읽어요. Cursor의 chat panel이 열려 있으면 프롬프트 신호. Claude Code의 터미널이 보이면 프롬프트 신호. Python 파일의 함수 본문에 커서가 있으면 코드 편집 신호예요.
브라우저의 ChatGPT나 Claude.ai는요?
Loqua는 모든 텍스트 입력 — 브라우저 프롬프트 박스 포함 — 에서 동작해요. 도착지가 chat AI일 때는 출력을 섹션이 있는 마크다운 친화 프롬프트로 잡아줘요.
Loqua가 제 프롬프트를 클라우드로 보내나요?
Loqua의 음성 인식과 멀티모달 컨텍스트 레이어는 온디바이스에서 동작해요. Cursor나 Claude Code에 타이핑되는 텍스트는 그 도구들이 자기들 공급자(Anthropic, OpenAI 등)에게 보내는 거예요 — Loqua가 아니라 그 도구들의 네트워크 동작이에요. Loqua가 보내는 것과 보내지 않는 것에 관해서는 프라이버시 노트를 참고하세요.

오늘 Loqua를 써보세요

무료로 시작. 맥 네이티브. 매일 직접 쓰는 알고리즘 연구자들이 만들었어요.

맥용 다운로드

Loqua 블로그 더 보기

how-to
맥에서 코드 받아쓰는 법: Cursor, VS Code, Claude Code 완벽 가이드
productivity
AI와 함께 생각하기에 보이스: 왜 키보드가 잘못된 도구인가
engineering
강화학습 음성 입력: GRPO, DPO, 그리고 우리 보이스 스택의 on-policy distillation
compare
Loqua vs Typeless: 컨텍스트, 코딩, 깊이를 위한 맥 네이티브 Typeless 대안