음성봇을 스텁부터 만든 이유 — 테스트로 설계를 먼저 굳히다

시리즈 · 음성봇 직접 만들기 — 실시간 음성봇의 뼈대를 바닥부터 만든 8편 기록입니다. 1. 끼어들기(barge-in) — 재생 중인 TTS를 실시간으로 끊는 법 2. "말이 끝났다"는 판단 — VAD 엔드포인터 3. 엔진을 코드 수정 없이 바꾸는 인터페이스 설계 4. 로컬 LLM 대화 두뇌와 도구 호출 루프 5. 매 턴 지연시간을 재는 이유 6. 브라우저 마이크에서 서버까지 — 오디오 프로토콜 7. 로컬 Whisper STT 연결하기 8. 스텁부터 만든 이유 — 테스트 우선 설계 (완결) — 지금 보는 글 돌아보며 시작하는 마지막 편 이 시리즈를 시작할 때부터 정해 둔 규칙이 하나 있었습니다. 진짜 음성 인식 모델과 진짜 합성 모델이 준비되기 전까지는, 그 둘을 흉내만 내는 가짜 엔진으로 전체 구조를 먼저 돌려본다는 규칙입니다. 여덟 편을 거치며 끼어들기 처리, 상태 흐름, 프로토콜, 엔진 인터페이스를 하나씩 다뤘는데, 그 모든 것이 사실 이 가짜 엔진 위에서 검증됐습니다. 지금 코드를 다시 열어 보면 그때는 별생각 없이 세운 규칙이 결과적으로 시리즈 전체의 진행 속도를 결정했다는 게 눈에 들어옵니다. 이번 편에서는 왜 굳이 가짜부터 만들었는지, 그리고 그 선택이 시리즈 전체에 어떤 영향을 남겼는지 정리하면서 이 시리즈를 마무리하려 합니다. 실제 모델을 기다리지 않기로 한 이유 음성봇의 핵심 로직은 사실 음성 인식이나 음성 합성 자체가 아닙니다. 사용자가 말을 시작했는지 끝냈는지 판단하는 상태머신, 합성 중에 끼어들기가 들어왔을 때 스트림을 멈추는 동시성 처리, 이벤트가 순서대로 오가는 흐름 제어 같은 것들이 훨씬 까다롭습니다. 반면 실제 인식·합성 모델은 무겁고 설치가 까다롭고 실행 속도도 느립니다. 이 두 가지를 한꺼번에 붙잡고 있으면 어려운 동시성 버그를 실제 모델의 로딩 시간과 뒤섞어 디버깅하게 됩니다. 모델이 느려서 반응이 늦은 건지, 상태머신이 잘못 짜여서 늦은 건지 구분이 안 되는 상황을 미...

아이폰 단축어로 노션에 메모 자동 저장하기 (코딩·서버 없이)

아이폰 단축어로 보이스메모를 Notion에 저장하는 3단계 — 단축어 빌더, 입력 팝업, Notion 목록
단축어로 만들고(좌) → 홈 화면 아이콘을 눌러 팝업에 적고(중) → Notion에 자동 저장(우). 세 단계로 끝납니다 (사용자 본인 실제 화면).

보이스메모 노션 저장을 코딩 한 줄 없이 끝내는 방법입니다. 회의 중 떠오른 생각, 이동하면서 떠올린 메모 — 적어두고도 Notion에 옮기는 게 귀찮아 묻히는 경우가 많습니다. 이 글의 iOS 단축어는 그 마지막 한 단계를 없앱니다. 홈 화면에 둔 단축어 아이콘을 누르면 입력 팝업이 뜨고, 거기에 메모를 적으면 그대로 Notion 새 페이지로 저장됩니다. 메모 앱을 열고 새 페이지를 만들고 제목을 짓는 과정이 아이콘 한 번으로 끝납니다. 서버도, 앱 개발도, API 코드도 필요 없습니다.

앞선 편들이 Discord 봇·CLI처럼 개발자용 도구였다면, 이번 편은 아이폰만 있으면 누구나 5분이면 따라 하는 가장 쉬운 자동화입니다.

1. 왜 단축어인가 — 가장 낮은 진입 장벽

메모를 Notion에 옮기는 일은 사소해 보이지만 마찰이 큽니다. 앱을 열고, 새 페이지를 만들고, 붙여넣고, 제목을 짓는 네 단계를 매번 반복해야 하니까요. 이 마찰 때문에 결국 메모가 메모 앱에만 쌓이고 Notion으로 모이지 않습니다.

iOS 단축어(Shortcuts)는 이 반복을 버튼 하나로 압축합니다. 서버를 띄울 필요도, 파이썬을 깔 필요도 없습니다. 아이폰에 기본 내장된 단축어 앱과 Notion 앱만 있으면 됩니다. 코딩을 모르는 사람도 블록을 끼우듯 만들 수 있고, 한 번 만들면 홈 화면 아이콘으로 즉시 실행됩니다.

핵심 발상은 단순합니다. 홈 화면 아이콘을 누르면 입력 팝업이 뜨고, 거기 적은 내용이 그대로 Notion 새 페이지가 된다는 것입니다. 메모를 어딘가에 따로 적었다가 복사해 붙여넣을 필요가 없습니다. 떠오른 순간 아이콘을 누르고 팝업에 바로 적으면 끝입니다. (원한다면 미리 복사해 둔 클립보드 내용을 본문으로 함께 가져오게 만들 수도 있습니다.)

2. 두 가지 시작 방법

방법 A — 공유받은 단축어 바로 쓰기 (가장 빠름)

iCloud 단축어 링크를 받으면 클릭 한 번으로 내 아이폰에 추가됩니다. 추가 후 처음 실행할 때 본인 Notion 계정 연결과 저장할 페이지 위치만 지정하면 끝입니다.

[주의] 공유받은 단축어는 만든 사람의 Notion이 아니라 본인 Notion에 연결해야 합니다. 처음 실행 시 Notion 로그인·권한 허용 화면이 뜨면 본인 계정으로 진행하세요.

방법 B — 직접 만들기 (3단계, 원리 이해)

단축어 앱에서 직접 만들면 동작 원리를 알게 되어 나중에 입맛대로 고칠 수 있습니다. 아래 3개 액션이면 됩니다.

3. 단축어 직접 만들기 (3단계)

iOS 단축어 편집 화면 — 클립보드 가져오기, 변수 저장, Notion 페이지 생성 3개 액션
실제 단축어 구성 — 클립보드 가져오기 → 변수 저장 → Notion 페이지 생성 3단계 (사용자 본인 실제 화면)

위 스크린샷이 실제 구성입니다. 액션은 3개뿐입니다.

1) 클립보드 가져오기 (Get Clipboard)

  • 단축어 앱 → 새 단축어 → 액션 추가 → "클립보드 가져오기" 검색해 추가
  • 미리 복사해 둔 내용이 있으면 본문에 함께 담깁니다 (없어도 됩니다 — 핵심은 다음의 팝업 입력입니다)

2) 변수에 저장 (Set Variable)

  • "변수 설정" 액션 추가 → 변수 이름을 "보이스메모"로 짓고 값에 1단계 결과를 지정
  • 뒤 단계에서 깔끔하게 재사용하기 위한 단계입니다(생략 가능)

3) Notion 페이지 생성 (Create a page)

  • "Notion" 액션 검색 → "페이지 생성(Create a page)" 선택
  • 제목: "매번 묻기(Ask Each Time)"로 지정 → 바로 이 설정이 아이콘을 눌렀을 때 뜨는 입력 팝업입니다. 팝업에 적은 내용이 페이지로 들어갑니다
  • 본문/내용: 2단계의 "보이스메모" 변수 (클립보드를 함께 쓸 때)
  • 저장 위치: 원하는 데이터베이스 지정 (예: "To Do List")

저장하고 이름을 붙이면(예: "보이스메모_노션저장") 끝입니다. 이 단축어를 홈 화면에 아이콘으로 추가하면, 아이콘을 누르는 순간 입력 팝업이 떠서 바로 적을 수 있습니다.

[핵심] 별도의 "입력 요청" 액션을 따로 두지 않습니다. Notion 페이지 생성 액션의 제목 칸을 "Ask Each Time"으로 설정하는 것만으로, 아이콘을 누를 때마다 입력 팝업이 자동으로 뜹니다. 액션 하나가 줄어 더 단순합니다.
단축어 실행 시 제목을 입력받는 프롬프트 화면
① 아이콘을 누르면 뜨는 입력 팝업 — 여기 적고 Done
아이폰 단축어로 입력한 메모들이 Notion 데이터베이스에 쌓여 있는 모습
② 적은 메모가 그대로 Notion 새 페이지로 저장 (둘 다 사용자 본인 실제 화면)

4. 자주 겪는 문제

4.1 Notion 액션이 단축어에 안 보임

가장 흔한 문제입니다. Notion 앱이 최신이 아니거나 단축어 연동이 아직 잡히지 않은 경우입니다.

  • App Store에서 Notion 앱을 최신으로 업데이트합니다.
  • Notion 앱을 한 번 실행해 로그인 상태를 갱신합니다 (앱을 열기만 해도 단축어 연동이 등록됩니다).
  • 단축어 편집 화면에서 액션 검색창에 다시 "Notion"을 입력합니다.
  • 그래도 없으면 아이폰을 재시작한 뒤 재시도합니다.

4.2 저장은 되는데 본문이 비어 있음

대부분 클립보드 문제입니다. 단축어는 "복사된 내용"을 본문으로 넣는데, 그 직전에 복사한 것이 텍스트가 아니거나 비어 있으면 빈 페이지가 생깁니다.

  • 단축어 실행 직전에 텍스트를 복사했는지 확인합니다. 중간에 다른 것을 복사하면 그게 들어갑니다.
  • 사진·파일을 복사한 상태면 본문이 비거나 깨집니다. 글자(텍스트)만 복사하세요.
  • 보이스메모는 "텍스트 변환" 결과를 복사해야 합니다. 음성 파일 자체를 공유하면 안 됩니다.

4.3 제목·본문 한글이 깨지거나 길게 잘림

긴 텍스트는 Notion 한 블록 길이 제한에 걸려 잘릴 수 있습니다. 회의록처럼 긴 내용이라면, 단축어에 "텍스트 분할" 단계를 넣어 문단 단위로 나눠 넣으면 안정적입니다. 한글 깨짐은 거의 없지만, 발생하면 입력 인코딩보다 붙여넣기 원본(어떤 앱에서 복사했는지)을 먼저 의심하세요.

4.4 태그·날짜 같은 속성은 왜 안 들어가나

이게 내장 Notion 액션의 가장 큰 한계입니다. 단축어의 기본 Notion 액션은 제목과 본문만 채울 수 있고, 태그(다중 선택)·날짜·상태 같은 데이터베이스 속성은 직접 설정하지 못합니다. 일상 메모 저장에는 제목+본문이면 충분하지만, 속성까지 자동으로 채우고 싶다면 Notion API + HTTP 요청 방식으로 가야 합니다.

[참고] API 방식은 Notion 통합 토큰을 발급해 단축어의 "URL 콘텐츠 가져오기(HTTP)" 액션으로 직접 호출하는 것인데, JSON을 다뤄야 해서 난이도가 한 단계 올라갑니다. 두 가지만 미리 알아두면 삽질을 줄입니다. ① Notion 토큰 형식이 최근 secret_에서 ntn_으로 바뀌었는데 일부 환경에서 인식 문제가 보고됩니다. ② 데이터베이스 ID는 하이픈(-)을 제거해야 정상 동작하는 경우가 많습니다. 이 글의 범위(서버·코드 없이)를 넘어서므로, 필요해지면 별도 편에서 다루겠습니다.

마치며

이미 여러 번 겪었을 겁니다. 아이디어가 떠올라 폰을 꺼내는 순간, 노션을 열고 워크스페이스를 찾고 데이터베이스를 고르고 새 페이지를 만들다 보면 — 그 몇 단계를 거치는 사이에 흐름이 끊기고 생각은 사라집니다. 옮기는 데 여러 턴이 걸려서, 결국 메모를 포기하게 되는 것이죠.

이 단축어는 그 여러 턴을 한 번으로 줄입니다. 홈 화면 아이콘을 누르고 팝업에 적으면 끝 — 생각이 날아가기 전에 그대로 Notion에 박힙니다. 길게 받아 적어 정리하는 회의록 도구가 아니라, 순간 떠오른 한 줄을 놓치지 않는 퀵 메모(quick memo)입니다.

긴 녹취·회의록을 통째로 정리하는 일은 클로바노트 → Discord → Notion 봇에게 맡기고, 순간 스치는 한 줄은 이 단축어로 잡으세요. 코딩도 서버도 없이, 아이폰 기본 기능만으로 가능합니다.

댓글

이 블로그의 인기 게시물

디스코드 구글캘린더 연동 봇 만들기: 카톡 캡처 OCR 자동 등록 시스템 구축

클로드 코드 비용 줄이는 법 — ollama 로컬 LLM 연동 (M3 맥북)

유튜브 노션 자동 저장 봇 만들기 — Claude CLI MCP + Discord 233일 운영기