Skip to content

About

Native macOS and iOS voice notes with OpenRouter AI meeting minutes and Cloudflare sync.

Resources

Stars

0 stars

Watchers

0 watching

Forks

ย 
ย 

Latest commit

ย 

History

24 Commits

Folders and files

Repository files navigation

AI-NoteTaker

Mac์—์„œ ํšŒ์˜๋ฅผ ๋…น์Œํ•˜๊ณ , AI ํšŒ์˜๋ก๊ณผ ๋ฐœํ™”์ž๋ณ„ ์ „์‚ฌ๋ฌธ์„ iPhone์—์„œ๋„ ์ด์–ด์„œ ํ™•์ธํ•˜์„ธ์š”.

AI-NoteTaker๋Š” SwiftUI๋กœ ๋งŒ๋“  macOSยทiOS ๊ฐœ์ธ์šฉ ์Œ์„ฑ ๋…ธํŠธ ์•ฑ์ž…๋‹ˆ๋‹ค. OpenRouter ๊ธฐ๋ฐ˜ AI ๋ฏธํŒ… ๊ธฐ๋ก, FluidAudio ๊ธฐ๋ฐ˜ ๋กœ์ปฌ ํ™”์ž ๋ถ„์„, Mac โ†” iPhone ์ž๋™ ๋™๊ธฐํ™”, ์‚ฌ์šฉ์ž ์†Œ์œ  Cloudflare Worker/D1/R2 ์ €์žฅ์†Œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋…น์Œ๊ณผ ์žฌ์ƒ์€ ๋กœ์ปฌ์—์„œ ๋™์ž‘ํ•˜๊ณ , AI ์ƒ์„ฑยท๋™๊ธฐํ™”ยทํ™”์ž ๋ถ„์„์€ ์„ค์ •์—์„œ ์„ ํƒํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

macOS 26+ ยท iOS 17+ ยท Apple Silicon Mac ยท Swift 6 App Store ๋ฐฐํฌ ์—†์ด Xcode๋กœ ๊ฐœ์ธ Mac๊ณผ iPhone/iPad์— ์„ค์น˜ํ•˜๋Š” ๊ตฌ์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฒ„์ „์€ **Mac 1.6.0 (๋นŒ๋“œ 17), iOS 1.6.1 (๋นŒ๋“œ 18)**์ž…๋‹ˆ๋‹ค. ๋งฅ๋ฝ ๊ธฐ๋ฐ˜ ์ „์‚ฌ ์ •๋ฆฌ์™€ ์›๋ฌธ ๋น„๊ต๋ฅผ ์ง€์›ํ•˜๊ณ , ๋ณด์™„ ์˜ˆ์‹œ๋ฅผ ๊ฐœ์ธ์ •๋ณด ์—†๋Š” ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๋ฐ ๊ฒ€์ฆ ๊ธฐ๋ก

์ฃผ์š” ๊ธฐ๋Šฅ

ํšŒ์˜ ๋…น์Œ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ธฐ๋Šฅ Mac iPhone / iPad
๋งˆ์ดํฌ ๋…น์Œยท์ผ์‹œ์ •์ง€ยท์žฌ๊ฐœ โœ“ โœ“
์‹œ์Šคํ…œ ์˜ค๋””์˜ค ๋…น์Œ โœ“ โ€”
๋งˆ์ดํฌ + ์‹œ์Šคํ…œ ์˜ค๋””์˜ค ๋™์‹œ ๋…น์Œ โœ“ โ€”
์ €์žฅ๋œ ๋…น์Œ ์žฌ์ƒยทํƒ์ƒ‰ โœ“ โœ“
์ œ๋ชฉ ๊ฒ€์ƒ‰ยท์ด๋ฆ„ ๋ณ€๊ฒฝยท์ฆ๊ฒจ์ฐพ๊ธฐ โœ“ โœ“
๋…น์Œ ํด๋”ยทํด๋”๋ณ„ ๋ณด๊ธฐยท๊ธฐ๊ธฐ ๊ฐ„ ํด๋” ๋™๊ธฐํ™” โœ“ โœ“
์ตœ๊ทผ ์‚ญ์ œํ•œ ํ•ญ๋ชฉยท๋ณต์› โœ“ โœ“
AI ํšŒ์˜๋กยท์ „์‚ฌ๋ฌธยทํšŒ์˜ ๋ถ„์„ โœ“ โœ“
Cloudflare ๋™๊ธฐํ™” โœ“ โœ“
๋ฉ”๋‰ด ๋ง‰๋Œ€ ๋…น์Œยทํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค โœ“ โ€”

Mac์—์„œ๋Š” ๋ฉ”์ธ ์ฐฝ์„ ๋‹ซ์•„๋„ ๋ฉ”๋‰ด ๋ง‰๋Œ€์—์„œ ๋…น์Œ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ํ”Œ๋žซํผ์€ ๊ฐ™์€ ์•ฑ ์ด๋ฆ„๊ณผ ์•ฑ ์•„์ด์ฝ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

iPhone์˜ ๋…น์Œ ๋ฐ”๋Š” ์‹œ๊ฐ„ยท๋ชฉ์†Œ๋ฆฌ ์ƒํƒœ์™€ ์ผ์‹œ์ •์ง€ยท์™„๋ฃŒ ๋ฒ„ํŠผ์„ ๋‘ ์˜์—ญ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ํ™”๋ฉด์ด๋‚˜ ํฐ ๊ธ€์ž ์„ค์ •์—์„œ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์„ธ๋กœ๋กœ ์ „ํ™˜ํ•ด ๋ฒ„ํŠผ ์ œ๋ชฉ์ด ์ž˜๋ฆฌ์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋…น์Œ ๋ฐ” ๊ฐœ์„  ๊ธฐ๋ก

๋…น์Œ ํด๋”

์™ผ์ชฝ ๋ชฉ๋ก์˜ **ํด๋” +**์—์„œ ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ , ๋…น์Œ์˜ ๋ฉ”๋‰ด์—์„œ ํด๋”๋กœ ์ด๋™์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. iPhone์—์„œ๋„ ๋…น์Œ ๋ชฉ๋ก์˜ ํด๋” ์˜์—ญ๊ณผ ๊ธธ๊ฒŒ ๋ˆ„๋ฅด๊ธฐ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋”๋ณ„ ๋…น์Œ ์ˆ˜, ์ด๋ฆ„ ๋ณ€๊ฒฝ, ํด๋” ์‚ญ์ œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋นˆ ํด๋”๋„ ๋‘ ๊ธฐ๊ธฐ์— ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

ํด๋”๋ฅผ ๋งŒ๋“ค์–ด๋„ ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” ๋…น์Œ ๋ชฉ๋ก์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Mac์—์„œ๋Š” ์ƒ๋‹จ ๋ชจ๋“  ๋…น์Œ ํ•ญ๋ชฉ์œผ๋กœ ์–ธ์ œ๋“  ์ „์ฒด ๋ชฉ๋ก์— ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ํด๋” ์™ผ์ชฝ ํ™”์‚ดํ‘œ๋ฅผ ๋ˆŒ๋Ÿฌ ๋‚ด๋ถ€ ๋…น์Œ์„ ํŽผ์น˜๊ณ  ์ ‘์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…น์Œ์„ ํด๋”๋กœ ๋Œ์–ด๋†“์•„ ์ด๋™ํ•˜๊ณ , ํด๋” ์ž์ฒด๋Š” ๋‹ค๋ฅธ ํด๋” ์œ„ยท์•„๋ž˜์˜ ์‚ฝ์ž…์„ ์— ๋†“์•„ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ํด๋” ๋ฐ–์œผ๋กœ ๊บผ๋‚ผ ๋•Œ๋Š” ๋ชฉ๋ก์˜ ์—ฌ๊ธฐ๋กœ ๋Œ์–ด๋†“์•„ ํด๋” ๋ฐ–์œผ๋กœ ์ด๋™ ์˜์—ญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•œ ํด๋” ์ˆœ์„œ๋Š” iPhone์—๋„ ๋™๊ธฐํ™”๋˜๋ฉฐ, iPhone์˜ ํ•„ํ„ฐ ๋ฉ”๋‰ด์—์„œ๋„ ์ „์ฒด ๋ชฉ๋ก๊ณผ ํด๋”๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋”๋ฅผ ์„ ํƒํ•˜๊ณ  ์ƒˆ ๋…น์Œ์„ ์‹œ์ž‘ํ•˜๋ฉด ํ•ด๋‹น ํด๋”์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋…น์Œ ์ค‘ ๋‹ค๋ฅธ ๋ชฉ๋ก์„ ์—ด์–ด๋„ ์‹œ์ž‘ํ•  ๋•Œ ์„ ํƒํ•œ ํด๋”๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํด๋”๋ฅผ ์‚ญ์ œํ•ด๋„ ๋…น์Œ์€ ์‚ญ์ œํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ชจ๋“  ๋…น์Œ์—์„œ ๊ณ„์† ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋”๋Š” ํ•œ ๋‹จ๊ณ„๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

OpenRouter AI ๋ฏธํŒ… ๊ธฐ๋ก

  • ๋…น์Œ ์˜ค๋””์˜ค๋ฅผ ์ „์‚ฌํ•˜๊ณ  ํšŒ์˜ ๋‚ด์šฉ์„ Markdown ํšŒ์˜๋ก์œผ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์˜๋ก / ์ „์‚ฌ๋ฌธ / AI ํšŒ์˜ ๋ถ„์„ ํ™”๋ฉด์„ ์ „ํ™˜ํ•ด ๊ธด ํšŒ์˜๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์˜๋ก์„ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์„ฑ ์ง„ํ–‰ ์ƒํƒœ์™€ ์ทจ์†Œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ์ผ, ๋…น์Œ ๊ธธ์ด, ์‚ฌ์šฉ ๋ชจ๋ธ๊ณผ ์ œ๊ณต์ž๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๋น„์šฉ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์˜๋ก ๋ชจ๋ธ๊ณผ ์Œ์„ฑ ์ธ์‹ ๋ชจ๋ธ์„ ๊ฐ๊ฐ ๊ฒ€์ƒ‰ยท์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถœ๋ ฅ ์–ธ์–ด๋Š” ํ•œ๊ตญ์–ด / ์˜์–ด / ์›๋ฌธ ์–ธ์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ ๋…น์Œ์ด ๋๋‚œ ๋’ค AI ํšŒ์˜๋ก์„ ์ž๋™ ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ์˜ค๋””์˜ค ๋ฒ„์ „๊ณผ ์ „์‚ฌ ๋ชจ๋ธ๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•  ๋•Œ๋Š” ์™„๋ฃŒ๋œ ์ „์‚ฌ๋ฌธ์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

AI ์ƒ์„ฑ์„ ์‹คํ–‰ํ•˜๋ฉด ๋…น์Œ ์˜ค๋””์˜ค์™€ ์ „์‚ฌ๋ฌธ์ด OpenRouter ๋ฐ ์„ ํƒํ•œ ๋ชจ๋ธ ์ œ๊ณต์ž์—๊ฒŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ด์šฉ ์š”๊ธˆ์€ ์„ ํƒํ•œ ๋ชจ๋ธ๊ณผ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ OpenRouter ๊ณ„์ •์— ๋ถ€๊ณผ๋ฉ๋‹ˆ๋‹ค. ํ™”๋ฉด์˜ ๋น„์šฉ์€ ์ œ๊ณต์ž๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์ด๋ฉฐ, ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mac๊ณผ iPhone์—์„œ ๋™์ผํ•œ AI ๊ธฐ๋Šฅ๊ณผ ๊ณต์œ  ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ๋™๊ธฐํ™”๋œ ํšŒ์˜๋ก์„ ์ฝ๋Š” ๋ฐ๋Š” OpenRouter API ํ‚ค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ AI ์ƒ์„ฑ์„ ์‹คํ–‰ํ•  ๊ธฐ๊ธฐ์—๋งŒ ํ‚ค๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์— ํ‚ค๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋ฉด ํ‚ค๊ฐ€ ์—†๋Š” ๊ธฐ๊ธฐ์˜ AI ์„ค์ •์— ์•ˆ๋‚ด์™€ ์ž…๋ ฅ ๋ฒ„ํŠผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•ด๋„ ๊ณต์œ ๋œ ๋ชจ๋ธยท์–ธ์–ดยท์ž๋™ ์ƒ์„ฑ ์„ค์ •์€ ์œ ์ง€๋˜๋ฉฐ, ํ‚ค๊ฐ€ ์—†๋Š” ๊ธฐ๊ธฐ์—์„œ๋Š” AI ์ƒ์„ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํšŒ์˜ ๋ถ„์„๊ณผ ๋ฐœํ™”์ž๋ณ„ ์ „์‚ฌ

AI-NoteTaker๋Š” ๊ธฐ์กด Markdown ํšŒ์˜๋ก์— ๋”ํ•ด ํšŒ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณ„๋„ ๋ฌธ์„œ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ์›๋ณธ ์ „์‚ฌ์™€ ๋…น์Œ ์‹œ๊ฐ„์„ ๋ณด์กดํ•œ ์ƒํƒœ์—์„œ ํ™”๋ฉด ํ‘œ์‹œ์™€ ๊ฒ€์ƒ‰ยท์žฌ์ƒ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐœํ™”์ž๋ณ„ ์ „์‚ฌ๋ฌธ: ์ „์‚ฌ๋ฌธ์„ ์‹œ๊ฐ„ ๊ตฌ๊ฐ„๋ณ„ ๋ฐœํ™”๋กœ ๋‚˜๋ˆ„๊ณ , ํ™”์ž ๋ผ๋ฒจ๊ณผ ๋ฐœํ™” ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์›๋ณธ ๊ทผ๊ฑฐ ์žฌ์ƒ: ๋ฐœํ™”, ๊ฒฐ์ •, ์งˆ๋ฌธ, ์•ฝ์†, ์š”์ฒญ์—์„œ ํ•ด๋‹น ๋…น์Œ ๊ตฌ๊ฐ„์„ ๋ฐ”๋กœ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด ๋ฐœํ™” ๋ณด๊ธฐ: ๋“ฑ๋ก๋œ ๋ชฉ์†Œ๋ฆฌ์™€ ์‚ฌ์šฉ์ž ์ˆ˜์ • ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์†Œ์œ ์ž ๋ฐœํ™”๋ฅผ ์ถ”์ •ํ•˜๊ณ , ๋‚ด ๋ฐœํ™”๋งŒ ๋ชจ์•„ ๋ณด๊ฑฐ๋‚˜ ์—ฐ์† ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์•ฝ์†๊ณผ ์š”์ฒญ: ๋‚ด๊ฐ€ ํ•œ ์•ฝ์†๊ณผ ๋‚˜์—๊ฒŒ ์š”์ฒญ๋œ ์ผ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์™„๋ฃŒยท์ œ์™ธ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€: ์งˆ๋ฌธ, ๋‹ต๋ณ€, ๋‹ต๋ณ€ ์—†์Œ ๋˜๋Š” ๋ถˆํ™•์‹คํ•œ ํ•ญ๋ชฉ์„ ๊ทผ๊ฑฐ ๋ฐœํ™”์™€ ํ•จ๊ป˜ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • ๊ฒฐ์ • ํ๋ฆ„: ์ œ์•ˆ, ์šฐ๋ ค, ๋ณด๋ฅ˜, ์ˆ˜์ •, ์ตœ์ข… ๊ฒฐ์ •์„ ์‹œ๊ฐ„ ํ๋ฆ„์œผ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ๋ธŒ๋ฆฌํ•‘: ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์˜ ์ด์ „ ํšŒ์˜์—์„œ ๋ฏธ์™„๋ฃŒ ์•ฝ์†, ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ, ์ฃผ์š” ๊ฒฐ์ •์„ ๋‹ค์Œ ํšŒ์˜ ์ค€๋น„ ์ž๋ฃŒ๋กœ ๋ชจ์๋‹ˆ๋‹ค.
  • ํ™”์žยทํ”„๋กœ์ ํŠธ ์ˆ˜์ •: ํ™”์ž ์ด๋ฆ„, ๋ณธ์ธ ํ‘œ์‹œ, ๊ฐœ๋ณ„ ๋ฐœํ™”์˜ ํ™”์ž, ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฉ์–ด ์‚ฌ์ „๊ณผ ํ‘œ์‹œ ๋ณด์ •: ์‚ฌ๋žŒยทํšŒ์‚ฌยทํ”„๋กœ์ ํŠธยท์•ฝ์–ดยท์ผ๋ฐ˜ ์šฉ์–ด๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ์ „์‚ฌ๋ฌธ ์˜†์— โ€œ๋“ค๋ฆฐ ํ‘œํ˜„ โ†’ ์„ ํ˜ธ ํ‘œ๊ธฐโ€ ์ฃผ์„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ์ „์‚ฌ ํ…์ŠคํŠธ ์ž์ฒด๋Š” ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ™”์ž ๋ถ„์„์€ FluidAudio 0.15.6์˜ Core ML speaker diarization ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์€ FluidInference/speaker-diarization-coreml์—์„œ ์ œ๊ณต๋˜๋Š” pyannote_segmentation.mlmodelc์™€ wespeaker_v2.mlmodelc ๋ชจ๋ธ์„ ์ค€๋น„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์ด ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ชจ๋ธ์„ ๋ฏธ๋ฆฌ ๋‚ด๋ ค๋ฐ›์•„ ์•ฑ์˜ ๋ชจ๋ธ ์ €์žฅ ์œ„์น˜์— ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์•ฑ ์ง€์› ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ AI-NoteTaker/VoiceModels ์•„๋ž˜์— ์ €์žฅ๋˜๋ฉฐ, ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ๋’ค์—๋Š” ํ™”์ž ๋ถ„์„์— ์ธํ„ฐ๋„ท์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ์—ฌ์ž ๋ฒˆํ˜ธ์™€ AI ๋ณด์™„

AI ํšŒ์˜๋ก โ†’ ์ „์‚ฌ๋ฌธ์—์„œ ์ฐธ์—ฌ์ž 1: ๋‚ด์šฉ์ฒ˜๋Ÿผ ๋ˆ„๊ฐ€ ๋งํ–ˆ๋Š”์ง€ ๋ฒˆํ˜ธ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ํ™”์ž๋Š” ๊ฐ™์€ ๋ฒˆํ˜ธ๋ฅผ ์œ ์ง€ํ•˜๊ณ , ๋ถˆ๋ถ„๋ช…ํ•œ ๋ชฉ์†Œ๋ฆฌ๋Š” ์ฐธ์—ฌ์ž ๋ฏธํ™•์ธ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ผ๋ฐ˜ ์ „์‚ฌ๋ฌธ์—๋Š” ์ฐธ์—ฌ์ž ๊ตฌ๋ถ„์„ ๋ˆŒ๋Ÿฌ ๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž„์Šคํƒฌํ”„ ์ „์‚ฌ์™€ FluidAudio ๋ถ„์„์„ ์ด์šฉํ•˜๋ฉฐ, ๋ถ„์„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด ์›๋ž˜ ์ „์‚ฌ๋ฌธ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ „์‚ฌ ๋ชจ๋ธ์ด ๊ธธ์ด 0์ธ ๋‹จ์–ด ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•ด๋„ ์ „์ฒด ์ฐธ์—ฌ์ž ๊ตฌ๋ถ„์„ ์‹คํŒจ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋Š” ๋ณด์กดํ•˜๊ณ  ๋ถˆ๋ถ„๋ช…ํ•œ ๋ถ€๋ถ„์˜ ํ™”์ž๋Š” ๋ฏธํ™•์ธ์œผ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ๋…น์Œ ๋์˜ ์‹œ๊ฐ„ ํŒจ๋”ฉ์€ ์‹ค์ œ ๋…น์Œ ๋ฒ”์œ„๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ ์ƒ์„ธ ์ „์‚ฌ๊ฐ€ ์žˆ์œผ๋ฉด ์žฌ์‚ฌ์šฉํ•˜๋ฉฐ, ์ค€๋น„ยท์ „์‚ฌ ๊ตฌ๊ฐ„ ์ˆ˜ยท๋กœ์ปฌ ํ™”์ž ๊ตฌ๋ถ„ ๋‹จ๊ณ„๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

GPT Transcribe์ฒ˜๋Ÿผ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ ์›๋ž˜ ์ „์‚ฌ์—๋Š” ์„ ํƒํ•œ ๋ชจ๋ธ์„ ์œ ์ง€ํ•˜๊ณ , ์ฐธ์—ฌ์ž ๊ตฌ๋ถ„์„ ๋ˆŒ๋ €์„ ๋•Œ๋งŒ Whisper๋กœ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ „์‚ฌ๋ฌธ ํ™”๋ฉด์— ์‹ค์ œ ์ฐธ์—ฌ์ž ์ „์‚ฌ ๋ชจ๋ธ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž ์š”์ฒญ์˜ ์ฒซ ๊ตฌ๊ฐ„์—์„œ 400 ์˜ค๋ฅ˜ ๋˜๋Š” ์‹œ๊ฐ„ ์ •๋ณด ๋ˆ„๋ฝ์ด ๋ฐœ์ƒํ•˜๋ฉด Whisper๋กœ ํ•œ ๋ฒˆ ์žฌ์‹œ๋„ํ•˜๋ฉฐ, ์ธ์ฆยทํฌ๋ ˆ๋”งยท์†๋„ ์ œํ•œ ์˜ค๋ฅ˜๋Š” ์žฌ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž ๊ตฌ๋ถ„์ด ์‹คํŒจํ•ด๋„ ๊ธฐ์กด ํšŒ์˜๋ก๊ณผ ์›๋ž˜ ์ „์‚ฌ๋ฌธ์€ ์œ ์ง€ํ•˜๊ณ  ๋ณ„๋„ ์•ˆ๋‚ด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํšŒ์˜๋ก์˜ AI ๋ณด์™„์— ์ผ์ • ์˜ค๋ฅ˜๋‚˜ ๋น ์ง„ ๋งฅ๋ฝ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด โ€œ7์›” ์ถœ์‹œ๋Š” ํ™•์ • ์ผ์ •์ด ์•„๋‹ˆ๋ผ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‚ฐ ๊ฒ€ํ† ๋ฅผ ๋งˆ์นœ ๋’ค ์ตœ์ข… ์ผ์ •์„ ์ •ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค๋Š” ๋งฅ๋ฝ์„ ๋ฐ˜์˜ํ•ด ์ฃผ์„ธ์š”โ€๋ผ๊ณ  ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์™„์•ˆ ์ƒ์„ฑ โ†’ ๋ฏธ๋ฆฌ๋ณด๊ธฐ โ†’ ์ ์šฉ ์ˆœ์„œ๋กœ ๋ฐ˜์˜ํ•˜๊ณ , ๋ฒ„๋ฆฌ๊ธฐยท์ทจ์†Œยท์‹คํŒจ ์‹œ ๊ธฐ์กด ํšŒ์˜๋ก์€ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์™„ ๊ณผ์ •์—์„œ ์›๋ž˜ ์ „์‚ฌ๋ฌธ์€ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

AI ์„ค์ • โ†’ ํšŒ์˜๋ก ๋ณด์™„ ๋ชจ๋ธ์—์„œ ์ „์šฉ ๋ชจ๋ธ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ ํšŒ์˜๋ก ๋ชจ๋ธ๊ณผ ๋™์ผ์€ ํ˜„์žฌ ํšŒ์˜๋ก ๋ชจ๋ธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋ณด์™„ ๋ชจ๋ธ ์„ค์ •๊ณผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๋Š” ์—ฐ๊ฒฐ๋œ ๊ธฐ๊ธฐ์— ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•๊ณผ ๊ฒ€์ฆ ๊ธฐ๋ก

๋งฅ๋ฝ ๊ธฐ๋ฐ˜ ์ „์‚ฌ ์ •๋ฆฌ

์ƒˆ ํšŒ์˜๋ก์„ ๋งŒ๋“ค๊ธฐ ์ „์— AI๊ฐ€ ์•ž๋’ค ๋Œ€ํ™”๋ฅผ ์ฐธ๊ณ ํ•ด ์žก์Œ์„ฑ ๋ฌธ๊ตฌยท๋น„์Œ์„ฑ ํ‘œ๊ธฐยท๋ฐ˜๋ณต ์˜ค์ธ์‹์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ๋…น์Œ๊ณผ ์ „์‚ฌ๋Š” ๋ณด๊ด€ํ•˜๋ฉฐ, AI ์ •๋ฆฌ๋ณธ / ์›๋ฌธ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž ์ „์‚ฌ์—์„œ๋Š” ๊ธฐ์กด ๋ฒˆํ˜ธ์™€ ์‹œ๊ฐ„์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • โ†’ AI ํšŒ์˜๋ก โ†’ ๋งฅ๋ฝ ๊ธฐ๋ฐ˜ ์ „์‚ฌ ์ •๋ฆฌ์—์„œ ์ผœ๊ณ  ๋Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ ์ผœ์ง์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ํšŒ์˜๋ก ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€ ๋ชจ๋ธ ์‚ฌ์šฉ๋ฃŒ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ฆฌ ๊ณผ์ •์˜ ์˜ค๋ฅ˜ยท๊ณผ๋„ํ•œ ์‚ญ์ œยท์ˆ˜์น˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋ฉด ์›๋ฌธ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

๊ธฐ์กด ํšŒ์˜๋ก์—์„œ๋Š” ์ „์‚ฌ ์ •๋ฆฌ๋กœ ์ •๋ฆฌ๋ณธ๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋””์˜ค ์žฌ์ „์‚ฌ์™€ ๊ธฐ์กด Markdown ๋ณ€๊ฒฝ์€ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํšŒ์˜๋ก๊นŒ์ง€ ๊ฐฑ์‹ ํ•˜๋ ค๋ฉด ๋‹ค์‹œ ์ƒ์„ฑ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ •๋ฆฌ๋ณธ๊ณผ ์ž๋™ ์ •๋ฆฌ ์„ค์ •์€ ๊ธฐ๊ธฐ ๊ฐ„ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํ•„๊ณผ ๋‚ด ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก

์„ค์ •์˜ ํ”„๋กœํ•„ ์˜์—ญ์—์„œ ํ‘œ์‹œ ์ด๋ฆ„, ๋ณ„์นญ, ์—ญํ• , ์šฉ์–ด ์‚ฌ์ „์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ํ…์ŠคํŠธ ํ”„๋กœํ•„์€ ํšŒ์˜ ๋ถ„์„ ํ”„๋กฌํ”„ํŠธ์™€ ํ™”๋ฉด ํ‘œ์‹œ ๋ณด์ •์— ์‚ฌ์šฉ๋˜๋ฉฐ, Cloudflare ๋™๊ธฐํ™”๋ฅผ ์ผ  ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ๋กœ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.

๋‚ด ๋ชฉ์†Œ๋ฆฌ ๋…น์Œ / ๋‹ค์‹œ ๋…น์Œ์„ ๋ˆ„๋ฅด๋ฉด ์•ˆ๋‚ด ๋ชจ๋‹ฌ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์˜ˆ๋ฌธ๊ณผ ๋…น์Œ ์š”๋ น์„ ํ™•์ธํ•œ ๋’ค ๋…น์Œ ์‹œ์ž‘์„ ๋ˆ„๋ฅด๊ณ  ํ‰์†Œ ํšŒ์˜ ๋•Œ์˜ ๋ชฉ์†Œ๋ฆฌ๋กœ ์ฝ์–ด์ฃผ์„ธ์š”. ๋…น์Œ ์‹œ๊ฐ„๊ณผ ์ง„ํ–‰๋ฅ ์ด ํ‘œ์‹œ๋˜๋ฉฐ, ์ตœ์†Œ 10์ดˆ๋ถ€ํ„ฐ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ  30์ดˆ์— ์ž๋™ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ๋‹ซ์œผ๋ฉด ๋“ฑ๋ก์„ ์ค‘๋‹จํ•˜๊ณ  ๊ธฐ์กด ๋ชฉ์†Œ๋ฆฌ ํ”„๋กœํ•„์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋ฉด ๊ฐ™์€ ํ™”๋ฉด์—์„œ ๋‹ค์‹œ ๋…น์Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…น์Œ ํ™”๋ฉด์—์„œ ๋งˆ์ดํฌ ์ž…๋ ฅ ๋ง‰๋Œ€์™€ ์ž…๋ ฅ ๊ฐ์ง€ ์‹œ๊ฐ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ๋ชฉ์†Œ๋ฆฌ๋Š” ์ œํ•œ๋œ ์Œ๋Ÿ‰ ๋ณด์ • ํ›„ ์‹ค์ œ ๋ง์†Œ๋ฆฌ ๊ตฌ๊ฐ„์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋ฉฐ, ๋ฌด์Œยท์žก์Œ์„ ๋“ฑ๋กํ•˜์ง€ ์•Š๋„๋ก ๋ง์†Œ๋ฆฌ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก ๊ฒ€์ฆ ๊ธฐ๋ก

๋‚ด ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก์€ ๊ฐ ๊ธฐ๊ธฐ ์•ˆ์—์„œ๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ์ƒ˜ํ”Œ์˜ ์›๋ณธ ์˜ค๋””์˜ค๋ฅผ ๋‚ด๋ณด๋‚ด์ง€ ์•Š๊ณ , ํ™”์ž ๋น„๊ต์— ํ•„์š”ํ•œ ๋กœ์ปฌ ํ”„๋กœํ•„๋งŒ ๊ธฐ๊ธฐ ์ €์žฅ์†Œ์— ๋‘ก๋‹ˆ๋‹ค. ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ๊ธฐ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก์€ โ€œ์ด ๋ฐœํ™”๊ฐ€ ์•ฑ ์†Œ์œ ์ž์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹คโ€๋Š” ํ‘œ์‹œ๋ฅผ ๋•์Šต๋‹ˆ๋‹ค. ๋ถˆํ™•์‹คํ•œ ๊ตฌ๊ฐ„์€ ๋ถˆํ™•์‹คํ•œ ์ƒํƒœ๋กœ ํ‘œ์‹œํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mac โ†” iPhone ์ž๋™ ๋™๊ธฐํ™”

๋‘ ๊ธฐ๊ธฐ์— ๊ฐ™์€ Cloudflare Worker ์ฃผ์†Œ์™€ ๋™๊ธฐํ™” ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ž๋™์œผ๋กœ ๋งž์ถฅ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ๋™๊ธฐํ™”
๋…น์Œ ์˜ค๋””์˜ค ์ง€์›
์ œ๋ชฉยท๋‚ ์งœยท์ฆ๊ฒจ์ฐพ๊ธฐยท์‚ญ์ œ ์ƒํƒœ ์ง€์›
๋…น์Œ ํด๋”ยท์ด๋ฆ„ยท์ˆœ์„œยท์‚ญ์ œ ์ƒํƒœยท๋…น์Œ์˜ ํด๋” ์—ฐ๊ฒฐ ์ง€์›
์™„์„ฑ๋œ AI ํšŒ์˜๋ก, ๋ณด์™„ ๊ฒฐ๊ณผ์™€ ์ „์ฒด ์ „์‚ฌ๋ฌธยท์ฐธ์—ฌ์ž ์ •๋ณดยทAI ์ •๋ฆฌ๋ณธ ์ง€์›
ํšŒ์˜ ๋ถ„์„ ๋ฌธ์„œ, ๋ฐœํ™”์ž๋ณ„ ์ „์‚ฌ, ์•ฝ์†ยท์š”์ฒญยท์งˆ๋ฌธยท๊ฒฐ์ • ์ง€์›
ํ™”์ž ์ด๋ฆ„ยท๋ณธ์ธ ํ‘œ์‹œยทํ”„๋กœ์ ํŠธยท์—…๋ฌด ์ƒํƒœ ์ˆ˜์ • ์ด๋ ฅ ์ง€์›
ํ…์ŠคํŠธ ํ”„๋กœํ•„, ๋ณ„์นญ, ์—ญํ• , ์šฉ์–ด ์‚ฌ์ „, ์ž๋™ ํšŒ์˜ ๋ถ„์„ ์„ค์ • ์ง€์›
AI ๋ชจ๋ธยท๋ณด์™„ ๋ชจ๋ธยท์ „์‚ฌ ๋ชจ๋ธยท์ถœ๋ ฅ ์–ธ์–ดยท์ž๋™ ์ƒ์„ฑยท์ „์‚ฌ ์ •๋ฆฌ ์„ค์ • ์ง€์›
OpenRouter API ํ‚ค ๊ธฐ๊ธฐ๋ณ„ Keychain ๋ณด๊ด€
๋™๊ธฐํ™” ํ‚ค ๊ธฐ๊ธฐ๋ณ„ Keychain ๋ณด๊ด€
๋‚ด ๋ชฉ์†Œ๋ฆฌ ํ”„๋กœํ•„ยทํ™”์ž ์ž„๋ฒ ๋”ฉ ๊ธฐ๊ธฐ๋ณ„ ๋ณด๊ด€
์ƒ์„ฑ ๋„์ค‘์˜ ๋ถ€๋ถ„ ์ „์‚ฌ ์บ์‹œ ๊ธฐ๊ธฐ๋ณ„ ๋ณด๊ด€

์•ฑ์„ ์—ด๊ฑฐ๋‚˜ ํ™œ์„ฑํ™”ํ•  ๋•Œ์™€ ๋กœ์ปฌ ๋ณ€๊ฒฝ์„ ์™„๋ฃŒํ–ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์ด ์‹คํ–‰ ์ค‘์ธ ๋™์•ˆ์—๋Š” ์•ฝ 30์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์ƒ๋Œ€ ๊ธฐ๊ธฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋Š” ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„ํ•˜๋ฉฐ, ๋ฐ˜๋ณต ์‹คํŒจ ์‹œ ๊ฐ„๊ฒฉ์„ ์ตœ๋Œ€ 5๋ถ„๊นŒ์ง€ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. Mac์€ ์ฐฝ์„ ๋‹ซ์•„๋„ ์•ฑ์ด ์‹คํ–‰ ์ค‘์ด๋ฉด ๋™๊ธฐํ™”๋ฅผ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. iPhone์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฐฑ์‹ ์„ ์˜ˆ์•ฝํ•˜๊ณ  ์•ฑ์„ ๋‹ค์‹œ ์—ด๋ฉด ์ฆ‰์‹œ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์—†์–ด๋„ ์ €์žฅ๋œ ๋…น์Œ๊ณผ ํšŒ์˜๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™๊ธฐํ™”๋Š” Mac๊ณผ iPhone์—์„œ ์ƒ์„ฑํ•œ ๋…น์Œ๊ณผ ํšŒ์˜ ์ž๋ฃŒ๋ฅผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ชจ์œผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋‘ ์žฅ์น˜๊ฐ€ ๋™์‹œ์— ๋…น์Œํ•œ ์˜ค๋””์˜ค๋ฅผ ํ•˜๋‚˜์˜ โ€œ๋ผ์ด๋ธŒ ํšŒ์˜โ€๋กœ ํ•ฉ์น˜๊ฑฐ๋‚˜ ํƒ€์ž„๋ผ์ธ์„ ์ž๋™ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ

1. ํ”„๋กœ์ ํŠธ ์ค€๋น„

ํ•„์š”ํ•œ ๋„๊ตฌ๋Š” Xcode 26 ์ด์ƒ, XcodeGen 2.46 ์ด์ƒ, ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ ์„œ๋ช…์— ์‚ฌ์šฉํ•  Apple Account์ž…๋‹ˆ๋‹ค. Cloudflare๋ฅผ ์ง์ ‘ ๋ฐฐํฌํ•  ๋•Œ๋งŒ Node.js์™€ Wrangler๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

git clone https://github.com/Seonwoo82/AI-NoteTaker.git
cd AI-NoteTaker
test -f Config/Local.xcconfig || cp Config/Local.xcconfig.example Config/Local.xcconfig

Config/Local.xcconfig์˜ DEVELOPMENT_TEAM์„ ๋ณธ์ธ์˜ Apple ๊ฐœ๋ฐœ ํŒ€ ID๋กœ ๋ฐ”๊พธ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋กœ์ปฌ ์„œ๋ช… ํŒŒ์ผ์€ Git์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

make gen

2. Mac์— ์„ค์น˜

NoteTaker.xcodeproj๋ฅผ ์—ด์–ด NoteTaker ์Šคํ‚ด์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

make build
make run

# ์„œ๋ช…๋œ Release ๋นŒ๋“œ
make build-release

๋นŒ๋“œ๋œ ์•ฑ์€ build/DerivedData/Build/Products/Debug/AI-NoteTaker.app์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํฌ ๋˜๋Š” ์‹œ์Šคํ…œ ์˜ค๋””์˜ค ๊ถŒํ•œ์€ ํ•ด๋‹น ๋…น์Œ ๋ชจ๋“œ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๊ฐœ๋ฐœ ์„ค์น˜๋ณธ์„ ๊ต์ฒดํ•  ๋•Œ๋Š” ์•ฑ์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๊ฐ™์€ ๋ฒˆ๋“ค ID๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ๋กœ์ปฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ Keychain ์„ค์ •์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

3. iPhone์— ๊ฐœ์ธ ์„ค์น˜

  1. iPhone์„ Mac์— ์—ฐ๊ฒฐํ•˜๊ณ  ๊ธฐ๊ธฐ ์‹ ๋ขฐ ๋ฐ ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  2. iOS/NoteTakerIOS.xcodeproj๋ฅผ ์—ด๊ณ  NoteTakerIOS ์Šคํ‚ด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณธ์ธ์˜ ์„œ๋ช… ํŒ€๊ณผ ์—ฐ๊ฒฐ๋œ iPhone์„ ์„ ํƒํ•œ ๋’ค Run์œผ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

App Store๋‚˜ TestFlight์— ์ถœ์‹œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์šฉ ํ”„๋กœ๋น„์ €๋‹ ํ”„๋กœํŒŒ์ผ์ด ๋งŒ๋ฃŒ๋˜๋ฉด Xcode์—์„œ ๋‹ค์‹œ ์„œ๋ช…ยท์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋Š” ์•ฑ์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์—…๋ฐ์ดํŠธํ•ด ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ํŒ€์—์„œ ๊ธฐ๋ณธ ๋ฒˆ๋“ค ID๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ํ•ด๋‹น ํƒ€๊นƒ์˜ PRODUCT_BUNDLE_IDENTIFIER๋ฅผ ๋ณธ์ธ ์†Œ์œ ์˜ ๊ณ ์œ  ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ๊ธฐ๊ธฐ์šฉ Release ๋นŒ๋“œ๋Š” ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

make build-ios
make build-ios-release

AI ํšŒ์˜๋ก ์„ค์ •

  1. ์•ฑ์˜ ์„ค์ • โ†’ AI ํšŒ์˜๋ก์„ ์—ฝ๋‹ˆ๋‹ค.
  2. OpenRouter API ํ‚ค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋Š” ํ•ด๋‹น ๊ธฐ๊ธฐ์˜ Keychain์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
  3. ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜๊ณ  ํšŒ์˜๋ก ๋ชจ๋ธ๊ณผ ์Œ์„ฑ ์ธ์‹ ๋ชจ๋ธ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ์ถœ๋ ฅ ์–ธ์–ด์™€ ๋…น์Œ ํ›„ ํšŒ์˜๋ก ์ž๋™ ์ƒ์„ฑ ์—ฌ๋ถ€๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. ์ถ”๊ฐ€ ํšŒ์˜ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœํ•„ ๊ธฐ๋ฐ˜ ๋ถ„์„ ์˜ต์…˜์„ ์ผญ๋‹ˆ๋‹ค.
  6. ๋…น์Œ ์ƒ์„ธ์˜ AI ํšŒ์˜๋ก๊ณผ ํšŒ์˜ ๋ถ„์„์—์„œ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ €์žฅ๋œ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ธด ํšŒ์˜์˜ ์ตœ์ข… ํšŒ์˜๋ก๊ณผ ํšŒ์˜ ๋ถ„์„์€ ์ตœ๋Œ€ 131,072 ์ถœ๋ ฅ ํ† ํฐ, ์ค‘๊ฐ„ ์š”์•ฝ์€ ์ตœ๋Œ€ 32,768ํ† ํฐ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ์•Œ๋ ค์ค€ ์ถœ๋ ฅ ํ•œ๋„์™€ ์ „์ฒด ๋ฌธ๋งฅ ํฌ๊ธฐ์— ๋งž์ถฐ ์ž๋™์œผ๋กœ ์ค„์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์‚ฐ์—๋Š” ์ถ”๋ก  ํ† ํฐ๋„ ํฌํ•จ๋˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ ์ด ๊ธธ์ด๊นŒ์ง€ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ธด ๋‹ต๋ณ€์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„๋„ ๋Š˜๋ ธ์Šต๋‹ˆ๋‹ค. ์„ค๊ณ„์™€ ๊ฒ€์ฆ ๊ธฐ๋ก

API ํ‚ค ๊ต์ฒดยท์‚ญ์ œ๋‚˜ ์•ฑ ์ข…๋ฃŒ ์‹œ ์ง„ํ–‰ ์ค‘์ธ AI ์ž‘์—…์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ์š”์ฒญ์˜ ๋น„์šฉ์€ ์ทจ์†Œ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. AI ๊ฒฐ๊ณผ๋Š” ์ „์‚ฌ๋ฌธ๊ณผ ์›๋ณธ ๋ฐœํ™” ๊ทผ๊ฑฐ๋ฅผ ํ•จ๊ป˜ ๊ฒ€ํ† ํ•˜์„ธ์š”.

Cloudflare ์—ฐ๋™

Cloudflare ๊ตฌ์„ฑ์€ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •์— ์ง์ ‘ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. AI-NoteTaker๊ฐ€ ์šด์˜ํ•˜๋Š” ๊ณต์šฉ ๋™๊ธฐํ™” ์„œ๋ฒ„๋Š” ์—†์Šต๋‹ˆ๋‹ค.

flowchart LR
    Mac[Mac ์•ฑ] <-->|HTTPS + ๋™๊ธฐํ™” ํ‚ค| Worker[Cloudflare Worker]
    Phone[iPhone ์•ฑ] <-->|HTTPS + ๋™๊ธฐํ™” ํ‚ค| Worker
    Worker <--> D1[(D1 ยท ๋…ธํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๊ณต์œ  ์„ค์ •)]
    Worker <--> R2[(๋น„๊ณต๊ฐœ R2 ยท ์˜ค๋””์˜ค์™€ ์™„์„ฑ ๋ฌธ์„œ)]
    Mac -->|AI ์ƒ์„ฑ ์š”์ฒญ| AI[OpenRouter ยท ์„ ํƒํ•œ ๋ชจ๋ธ]
    Phone -->|AI ์ƒ์„ฑ ์š”์ฒญ| AI
    Mac -->|๋กœ์ปฌ ํ™”์ž ๋ถ„์„| LocalMac[FluidAudio Core ML]
    Phone -->|๋กœ์ปฌ ํ™”์ž ๋ถ„์„| LocalPhone[FluidAudio Core ML]
Loading
  1. Cloudflare/์—์„œ Worker, D1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋น„๊ณต๊ฐœ R2 ๋ฒ„ํ‚ท์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
  2. wrangler.toml์— ๋ณธ์ธ์˜ D1 ID๋ฅผ ๋„ฃ๊ณ  ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ธด ์ž„์˜ ๋ฌธ์ž์—ด์„ Worker์˜ SYNC_TOKEN secret์œผ๋กœ ์ €์žฅํ•œ ๋’ค ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
  4. Mac๊ณผ iPhone์˜ ์„ค์ • โ†’ ๋™๊ธฐํ™”์— ๊ฐ™์€ Worker HTTPS ์ฃผ์†Œ์™€ ๋™๊ธฐํ™” ํ‚ค๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  5. ๋™๊ธฐํ™”๋ฅผ ์ผœ๊ณ  ์—ฐ๊ฒฐ ํ™•์ธ ๋ฐ ์ˆ˜๋™ ๋™๊ธฐํ™”๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ํ‚ค๋Š” Cloudflare ๊ณ„์ • API ํ† ํฐ์ด๋‚˜ OpenRouter API ํ‚ค์™€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค. Cloudflare ๊ณ„์ • ์ž๊ฒฉ ์ฆ๋ช…์„ ์•ฑ์— ์ž…๋ ฅํ•˜์ง€ ๋งˆ์„ธ์š”. ์ž์„ธํ•œ ๋ช…๋ น, ์ธ์ฆ, ๋ฐ์ดํ„ฐ ํ˜•์‹์€ Cloudflare ๋ฐฐํฌ ๋ฐ API ๊ฐ€์ด๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถฉ๋Œ์€ ์ˆ˜์ • ์‹œ๊ฐ๊ณผ ๋ณ€๊ฒฝ ID, ์™„๋ฃŒ ํšŒ์˜๋ก ์ถฉ๋Œ์€ ์ƒ์„ฑ ์‹œ๊ฐ๊ณผ ๋ฌธ์„œ ํ•ด์‹œ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. AI ์„ค์ •๊ณผ ํ…์ŠคํŠธ ํ”„๋กœํ•„์€ ๋ณ„๋„์˜ ์ˆ˜์ • ์‹œ๊ฐยท๋ณ€๊ฒฝ ID๋กœ ํ•ฉ์น˜๋ฉฐ, ์ƒˆ ๊ธฐ๊ธฐ์˜ ๊ธฐ๋ณธ๊ฐ’์ด ์ด๋ฏธ ๊ณต์œ ๋œ ์„ค์ •์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํšŒ์˜ ๋ถ„์„ ๋ฌธ์„œ์™€ ์ˆ˜๋™ ์ˆ˜์ • ์ด๋ ฅ์€ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๋…น์Œ IDยท์˜ค๋””์˜ค ๋ฒ„์ „ยท๋ฐœํ™” ID๋งŒ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ธฐ ์‹œ๊ฐ์€ ์ž๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ญ์ œ ์ƒํƒœ๋Š” ๋™๊ธฐํ™”ํ•˜๋ฉฐ, ํด๋ผ์šฐ๋“œ์˜ ๋…น์Œ ํŒŒ์ผ๊ณผ ์‚ญ์ œ ๊ธฐ๋ก์€ ์ž๋™ ์˜๊ตฌ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ๊ฐœ์ธ์ •๋ณด

๊ธฐ๋ณธ ๋…น์Œ๊ณผ ์žฌ์ƒ์—๋Š” ์„œ๋ฒ„ ๊ณ„์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AI ์ƒ์„ฑ๊ณผ Cloudflare ๋™๊ธฐํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ OpenRouter ํ‚ค์™€ ๋™๊ธฐํ™” ํ‚ค๋Š” ๊ธฐ๊ธฐ์˜ Keychain์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. iOS ๋™๊ธฐํ™” ํ‚ค๋Š” ์ตœ์ดˆ ์ž ๊ธˆ ํ•ด์ œ ํ›„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋„ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ๊ธฐ๊ธฐ์—๋งŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Mac์˜ ๊ธฐ์กด ์ €์žฅ ์œ„์น˜๋Š” ์ด๋ฆ„ ๋ณ€๊ฒฝ ํ›„์—๋„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

~/Library/Application Support/NoteTaker/Recordings/<recording-id>/
  audio.m4a                 # ๋…น์Œ
  meta.json                 # ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
  meeting-notes.json        # ์™„์„ฑ๋œ ํšŒ์˜๋ก๊ณผ ์ „์ฒด ์ „์‚ฌ๋ฌธ
  meeting-intelligence.json # ๋ฐœํ™”์ž๋ณ„ ์ „์‚ฌ์™€ ๋ถ„์„ ๋ฌธ์„œ
  ai-transcript.json        # ์ƒ์„ฑ ๋„์ค‘ ์ „์‚ฌ ๊ตฌ๊ฐ„ ์บ์‹œ

ํด๋” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฃจํŠธ์˜ recording-folders.json์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ํ™”์ž ๋ชจ๋ธ๊ณผ ๋‚ด ๋ชฉ์†Œ๋ฆฌ ํ”„๋กœํ•„์€ ์•ฑ ์ง€์› ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋ณ„๋„ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. API ํ‚ค, ๋™๊ธฐํ™” ํ‚ค, ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก ๋ฐ์ดํ„ฐ, ํ™”์ž ์ž„๋ฒ ๋”ฉ์€ Cloudflare ํ”„๋กœํ•„ DTO์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. iOS์—์„œ๋Š” ๊ฐ™์€ ๋…ผ๋ฆฌ๋ฅผ ์•ฑ ์ „์šฉ ๋ฐ์ดํ„ฐ ์ปจํ…Œ์ด๋„ˆ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด NoteTaker ์„ค์น˜๋ณธ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์•ฑ ๋ฒˆ๋“ค ID์™€ ํ‚ค์ฒด์ธ ์‹๋ณ„์ž๋ฅผ ์œ ์ง€ํ•˜๋ฏ€๋กœ ์ €์žฅํ•œ ๋…น์Œ๊ณผ ์„ค์ •์„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Markdown ์™ธ๋ถ€ ์ด๋ฏธ์ง€ยทHTML์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋งํฌ๋ฅผ ์ž๋™์œผ๋กœ ์—ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์ €์žฅ์†Œ์—๋Š” ์‹ค์ œ ๋…น์ŒยทํšŒ์˜๋กยทAPI ํ‚คยท๊ฐœ์ธ ์„œ๋ช… ์„ค์ •์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ œํ•œ

  • iPhone์—์„œ๋Š” ๋งˆ์ดํฌ ๋…น์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•ฑ์˜ ํ†ตํ™”ยท์‹œ์Šคํ…œ ์˜ค๋””์˜ค๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • iOS์—์„œ AI ์ƒ์„ฑ์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๋•Œ๋Š” ์•ฑ์„ ์—ด์–ด ๋‘์„ธ์š”. ๋™๊ธฐํ™”๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฐฑ์‹ ๋„ ์š”์ฒญํ•˜์ง€๋งŒ, ์‹ค์ œ ์‹คํ–‰ ์‹œ์ ์€ iOS๊ฐ€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์„ ๊ฐ•์ œ ์ข…๋ฃŒํ–ˆ๊ฑฐ๋‚˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•ฑ ์ƒˆ๋กœ ๊ณ ์นจ์ด ๊บผ์ ธ ์žˆ์œผ๋ฉด ์•ฑ์„ ๋‹ค์‹œ ์—ด์–ด์•ผ ๊ฐฑ์‹ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž ๊ธด ์ƒํƒœ์˜ ๋™๊ธฐํ™”๋Š” ์žฌ๋ถ€ํŒ… ํ›„ ํ•œ ๋ฒˆ ์ด์ƒ ์ž ๊ธˆ ํ•ด์ œํ•œ ๊ธฐ๊ธฐ์—์„œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋™๊ธฐํ™” ํ•œ๋„๋Š” ์˜ค๋””์˜ค ํŒŒ์ผ๋‹น 95 MiB, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ 64 KiB, ์™„์„ฑ๋œ ํšŒ์˜๋ก JSON 2 MiB, ํšŒ์˜ ๋ถ„์„ JSON 4 MiB์ž…๋‹ˆ๋‹ค. ์ดˆ๊ณผํ•œ ํŒŒ์ผ์€ ๋กœ์ปฌ์— ๋‚จ๊ณ  ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ AI ์ „์‚ฌ๋Š” ๋…น์Œ๋‹น ์ตœ๋Œ€ 6์‹œ๊ฐ„, ์ „์‚ฌ ํ…์ŠคํŠธ ์•ฝ 1 MB, ๋ชจ๋ธ ํ˜ธ์ถœ 240ํšŒ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์š”๊ธˆ ํ•œ๋„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ํ™”์ž ๊ตฌ๋ถ„๊ณผ ๋‚ด ๋ชฉ์†Œ๋ฆฌ ํ‘œ์‹œ๋Š” ๋…น์Œ ํ’ˆ์งˆ, ๊ฒน์นจ ๋ฐœํ™”, ๋ฐฐ๊ฒฝ ์†Œ์Œ, ๋ชจ๋ธ ์ค€๋น„ ์ƒํƒœ์— ๋”ฐ๋ผ ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒฐ๋ก ์€ ์›๋ณธ ๋ฐœํ™”์™€ ์‚ฌ์šฉ์ž ์ˆ˜์ •์œผ๋กœ ํ™•์ธํ•˜์„ธ์š”.
  • ์˜จ๋””๋ฐ”์ด์Šค AI ์ „์‚ฌ, ์ „์‚ฌ๋ฌธ ๊ฒ€์ƒ‰, ํŠธ๋ฆฌ๋ฐ, ์žฌ์ƒ ์†๋„ ์กฐ์ ˆ, ๋ฌด์Œ ๊ฑด๋„ˆ๋›ฐ๊ธฐ, ์Œ์„ฑ ํ–ฅ์ƒ์€ ํ˜„์žฌ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์šฉ ์„ค์น˜์˜ ์„œ๋ช… ๋งŒ๋ฃŒ, iOS ์ž ๊ธˆยท๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ œ์•ฝ, ๋งˆ์ดํฌยท์‹œ์Šคํ…œ ์˜ค๋””์˜ค ๊ถŒํ•œ ๋ฐ ์˜ค๋””์˜ค ์žฅ์น˜ ๋ณ€๊ฒฝ์€ ์‹ค์ œ ๊ธฐ๊ธฐ ํ™˜๊ฒฝ์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • Mac 1.6.0 ๋นŒ๋“œ 17๊ณผ iPhone 1.6.1 ๋นŒ๋“œ 18 ์„ค์น˜ยท์‹คํ–‰์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ iPhone ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก์€ ์‚ฌ์šฉ์ž ํ™•์ธ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๊ฐœ์ธ ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก ๋ฐ์ดํ„ฐ๋Š” ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋Œ€์‹  ๋…น์Œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก ๊ฒ€์ฆ ๊ธฐ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒ€์ฆ ๋ฐ ๋ฐฐํฌ ํ˜„ํ™ฉ

ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ๋ฐ˜์˜ํ•˜๋Š” ๋ฒ„์ „์€ **Mac 1.6.0 (17), iOS 1.6.1 (18)**์ž…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ์ƒํƒœ ๊ฒฐ๊ณผ
Mac ์ „์ฒด ํ…Œ์ŠคํŠธ ํ†ต๊ณผ 463๊ฐœ ํ†ต๊ณผ
iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์ „์ฒด ํ…Œ์ŠคํŠธ ํ†ต๊ณผ 332๊ฐœ ํ†ต๊ณผ
Cloudflare Worker ํ…Œ์ŠคํŠธ ํ†ต๊ณผ 60๊ฐœ ํ†ต๊ณผ
ํด๋” ํ™”๋ฉด ํ†ต๊ณผ ํ•œ๊ตญ์–ด ์ •์  ๋ Œ๋”: ํด๋” ๋‚ด๋ถ€ยท์ƒ์„ฑ ํ›„ ์ „์ฒด ๋ชฉ๋กยท25๊ฐœ ํด๋”๊ฐ€ ์žˆ๋Š” ์ž‘์€ ์ฐฝ
FluidAudio 0.15.6 ๋งํฌ ๋นŒ๋“œ ํ†ต๊ณผ Mac๊ณผ iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์‹ค์ œ ์˜์กด์„ฑ ๊ฒฝ๋กœ ํ™•์ธ
๊ณต๊ฐœ 30.9์ดˆ 2ํ™”์ž fixture ํ†ต๊ณผ 2๊ฐœ ํ™”์ž ID ๊ฒ€์ถœ
held-out voice ๋น„๊ต ํ†ต๊ณผ owner cosine ์•ฝ 0.843, other ์•ฝ 0.211
๋ผ์ด๋ธŒ owner/other ํ‘œ์‹œ ํ†ต๊ณผ Mac๊ณผ iOS ์–‘์ชฝ ํ™•์ธ
์†์ƒ๋œ ๋ชจ๋ธ ์บ์‹œ ๋ณต๊ตฌ์™€ cached-only restore ํ†ต๊ณผ Mac ๊ฒ€์ฆ ํ†ต๊ณผ
1.6.0 ๋นŒ๋“œ 17 Mac Release ์™„๋ฃŒ ๋ฐฑ์—…ยท์„œ๋ช…ยท์„ค์น˜ยท์‹คํ–‰, ์‹ค์ œ ์ „์‚ฌ ์ •๋ฆฌ ๋ฒ„ํŠผ๊ณผ ์ผ๋ฐ˜ ์˜ˆ์‹œ ํ™•์ธ
1.6.1 ๋นŒ๋“œ 18 iOS Release ์™„๋ฃŒ Release ๋นŒ๋“œยท์„œ๋ช…ยท๊ธฐ๊ธฐ ์„ค์น˜ ๋ฒ„์ „ยท์‹คํ–‰ ํ™•์ธ, ๋…น์Œ ๋ฐ” 10๊ฐœ ์ƒํƒœ/ํฌ๊ธฐ ์ •์  ๋ Œ๋”
Cloudflare Worker ๋ฐฐํฌ ์™„๋ฃŒ ์ „์‚ฌ ์ •๋ฆฌ๋ณธยท์„ค์ • ๋ฐ ๊ตฌ๋ฒ„์ „ ํ˜ธํ™˜ ์ฒ˜๋ฆฌ ๋ฐฐํฌ, ์ธ์ฆ๋œ ๋…ธํŠธยทAI ์„ค์ • ์กฐํšŒ 200
iPhone ๋ชจ๋ธ ํŒŒ์ผ ์™„๋ฃŒ ๊ณต๊ฐœ ๋ชจ๋ธ ํŒŒ์ผ 13๊ฐœ๊ฐ€ 1.3.2 ์—…๋ฐ์ดํŠธ ํ›„ ๋ณด์กด๋จ์„ ํ™•์ธ
๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก ์•ˆ์ •์„ฑ ํ†ต๊ณผ ์˜ค๋””์˜ค ์ฝœ๋ฐฑ, ์—ฐ์† ์ž…๋ ฅ ์‹œ๊ฐ„ ์˜ค์ฐจ, ์ทจ์†Œยท์žฌ๋“ฑ๋ก ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ
iPhone ์„ค์น˜ ์™„๋ฃŒ 1.6.1 ๋นŒ๋“œ 18 ์„ค์น˜ ๋ฐ ์‹คํ–‰ ํ™•์ธ
์‹ค์ œ iPhone ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก ํ™•์ธ ๋Œ€๊ธฐ ์‚ฌ์šฉ์ž ๋ชฉ์†Œ๋ฆฌ๋กœ ๋…น์Œยท์ €์žฅ ํ™•์ธ ํ•„์š”

ํ™”์ž ๋ถ„์„ ์ˆ˜์น˜๋Š” ๊ณต๊ฐœ fixture์™€ ์ œํ•œ๋œ ๊ฒ€์ฆ ์ƒ˜ํ”Œ์˜ ๋™์ž‘ ํ™•์ธ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ์•ฑ์˜ ๊ฐœ์ธ ๋ชฉ์†Œ๋ฆฌ ๋“ฑ๋ก, ์‹ค์ œ ์‚ฌ์šฉ์ž ๋ชฉ์†Œ๋ฆฌ ์ธ์‹, ์‹ค์ œ ๋งˆ์ดํฌ ๋…น์Œ์€ ์‹ค๊ธฐ๊ธฐ ์žฌํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ํšŒ์˜์—์„œ๋Š” ๋ฐœํ™” ๊ฒน์นจ, ์†Œ์Œ, ๋งˆ์ดํฌ ์œ„์น˜, ์–ธ์–ด์™€ ํšŒ์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ๊ณผ ๊ฒ€์ฆ

๋‘ ์•ฑ์„ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ์—์„œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. Mac ์•ฑ์€ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ, iOS ์•ฑ์€ iOS/ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ Xcode ์Šคํ‚ด๊ณผ Swift ๋ชจ๋“ˆ ์ด๋ฆ„์€ ๊ธฐ์กด ์ด๋ฆ„์„ ์œ ์ง€ํ•˜๋ฉฐ, ์„ค์น˜๋˜๋Š” ์•ฑ ์ด๋ฆ„์€ AI-NoteTaker์ž…๋‹ˆ๋‹ค.

make gen
make test-audio          # AudioPipeline ํŒจํ‚ค์ง€
make test                # Mac ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
make test-ios            # iOS ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ์ •์  ํ™”๋ฉด ๋ Œ๋”
node --test Cloudflare/tests/worker.test.mjs

๊ธฐ๋ณธ iOS ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์€ iPhone 17 Pro ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์„ค์น˜๋œ ๊ธฐ์ข…์ด ๋‹ค๋ฅด๋ฉด make test-ios IOS_TEST_DESTINATION='platform=iOS Simulator,name=<๊ธฐ์ข…>'์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋ณ‘๋ ฌ ์ˆ˜๋Š” ๊ธฐ๋ณธ 2์ด๋ฉฐ JOBS๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AI ํ…Œ์ŠคํŠธ๋Š” ๊ฐ€์งœ ์ œ๊ณต์ž ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์‹ค์ œ OpenRouter ํ˜ธ์ถœ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™๊ธฐํ™” ํ…Œ์ŠคํŠธ๋Š” ๋ฌธ์„œ ์ถฉ๋Œยทํ•ด์‹œยทํฌ๊ธฐยท๋ถ€๋ถ„ ์‹คํŒจ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ , Worker ํ…Œ์ŠคํŠธ๋Š” ๋ผ์šฐํŒ…๊ณผ ์‹ค์ œ SQLite ์ฟผ๋ฆฌ ๋™์ž‘์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ make uitest์™€ make uitest-ios๋Š” ํ™”๋ฉด์„ ์กฐ์ž‘ํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ๊ตฌ๋ถ„ํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

NoteTaker/               Mac ์•ฑ, AI ํšŒ์˜๋ก, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋™๊ธฐํ™”
NoteTakerTests/          Mac ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
NoteTakerUITests/        Mac UI ํ…Œ์ŠคํŠธ
iOS/NoteTaker/           iOS ์•ฑ, AI ํšŒ์˜๋ก, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋™๊ธฐํ™”
iOS/NoteTakerIOSTests/   iOS ์•ฑ ํ˜ธ์ŠคํŠธยท์ •์  ํ™”๋ฉด ํ…Œ์ŠคํŠธ
iOS/NoteTakerTests/      iOS์— ์ด์‹ํ•œ AIยท์˜ค๋””์˜คยท๋™๊ธฐํ™” ํ…Œ์ŠคํŠธ
Packages/AudioPipeline/  Mac ์บก์ฒ˜ยท๋ฏน์‹ฑยท์žฌ์ƒ ๋ฐ ๊ณตํ†ต ๋…น์Œ ๋ชจ๋“œ
Cloudflare/              Worker, D1 ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, API ํ…Œ์ŠคํŠธ
Config/                  ๊ณต๊ฐœ์šฉ ์„œ๋ช… ์„ค์ • ์˜ˆ์‹œ
project.yml              Mac XcodeGen ์ •์˜
iOS/project.yml          iOS XcodeGen ์ •์˜

Mac๊ณผ iOS์˜ ํ”Œ๋žซํผ๋ณ„ ํ™”๋ฉดยท๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐ๊ฐ์˜ ํƒ€๊นƒ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. AI ๋ฌธ์„œ ํ˜•์‹๊ณผ ๋™๊ธฐํ™” ํ”„๋กœํ† ์ฝœ์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋Š” ๋‘ ํƒ€๊นƒ๊ณผ Worker์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•˜์„ธ์š”.

์ž๋™ ๋™๊ธฐํ™”์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™์ž‘์€ Apple์˜ Background Tasks์™€ earliestBeginDate ์‹คํ–‰ ์ •์ฑ…์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

About

Native macOS and iOS voice notes with OpenRouter AI meeting minutes and Cloudflare sync.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages