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์ ํํฐ ๋ฉ๋ด์์๋ ์ ์ฒด ๋ชฉ๋ก๊ณผ ํด๋๋ฅผ ๋ช ํํ๊ฒ ์ ํํ ์ ์์ต๋๋ค.
ํด๋๋ฅผ ์ ํํ๊ณ ์ ๋ น์์ ์์ํ๋ฉด ํด๋น ํด๋์ ์ ์ฅํฉ๋๋ค. ๋ น์ ์ค ๋ค๋ฅธ ๋ชฉ๋ก์ ์ด์ด๋ ์์ํ ๋ ์ ํํ ํด๋๋ฅผ ์ ์งํฉ๋๋ค. ํด๋๋ฅผ ์ญ์ ํด๋ ๋ น์์ ์ญ์ ํ์ง ์์ผ๋ฉฐ ๋ชจ๋ ๋ น์์์ ๊ณ์ ๋ณผ ์ ์์ต๋๋ค. ํด๋๋ ํ ๋จ๊ณ๋ง ์ง์ํฉ๋๋ค.
- ๋ น์ ์ค๋์ค๋ฅผ ์ ์ฌํ๊ณ ํ์ ๋ด์ฉ์ 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 ํ์๋ก โ ์ ์ฌ๋ฌธ์์ ์ฐธ์ฌ์ 1: ๋ด์ฉ์ฒ๋ผ ๋๊ฐ ๋งํ๋์ง ๋ฒํธ๋ก ํ์ธํฉ๋๋ค. ๊ฐ์ ํ์๋ ๊ฐ์ ๋ฒํธ๋ฅผ ์ ์งํ๊ณ , ๋ถ๋ถ๋ช
ํ ๋ชฉ์๋ฆฌ๋ ์ฐธ์ฌ์ ๋ฏธํ์ธ์ผ๋ก ํ์ํฉ๋๋ค. ๊ธฐ์กด ์ผ๋ฐ ์ ์ฌ๋ฌธ์๋ ์ฐธ์ฌ์ ๊ตฌ๋ถ์ ๋๋ฌ ๋ฒํธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ์์คํฌํ ์ ์ฌ์ FluidAudio ๋ถ์์ ์ด์ฉํ๋ฉฐ, ๋ถ์์ด ๋ถ๊ฐ๋ฅํ๋ฉด ์๋ ์ ์ฌ๋ฌธ์ ์ ์งํฉ๋๋ค.
์ ์ฌ ๋ชจ๋ธ์ด ๊ธธ์ด 0์ธ ๋จ์ด ์๊ฐ์ ๋ฐํํด๋ ์ ์ฒด ์ฐธ์ฌ์ ๊ตฌ๋ถ์ ์คํจ์ํค์ง ์์ต๋๋ค. ํ ์คํธ๋ ๋ณด์กดํ๊ณ ๋ถ๋ถ๋ช ํ ๋ถ๋ถ์ ํ์๋ ๋ฏธํ์ธ์ผ๋ก ๋จ๊น๋๋ค. ๋ น์ ๋์ ์๊ฐ ํจ๋ฉ์ ์ค์ ๋ น์ ๋ฒ์๋ก ์ ํํฉ๋๋ค. ์ ์ฅ๋ ์์ธ ์ ์ฌ๊ฐ ์์ผ๋ฉด ์ฌ์ฌ์ฉํ๋ฉฐ, ์ค๋นยท์ ์ฌ ๊ตฌ๊ฐ ์ยท๋ก์ปฌ ํ์ ๊ตฌ๋ถ ๋จ๊ณ๋ฅผ ํ์ํฉ๋๋ค.
GPT Transcribe์ฒ๋ผ ์๊ฐ ์ ๋ณด๋ฅผ ์ง์ํ์ง ์๋ ๋ชจ๋ธ์ ์ ํํ ๊ฒฝ์ฐ ์๋ ์ ์ฌ์๋ ์ ํํ ๋ชจ๋ธ์ ์ ์งํ๊ณ , ์ฐธ์ฌ์ ๊ตฌ๋ถ์ ๋๋ ์ ๋๋ง Whisper๋ก ์๊ฐ ์ ๋ณด๋ฅผ ์ค๋นํฉ๋๋ค. ์ ์ฌ๋ฌธ ํ๋ฉด์ ์ค์ ์ฐธ์ฌ์ ์ ์ฌ ๋ชจ๋ธ์ ํ์ํฉ๋๋ค. ์ฐธ์ฌ์ ์์ฒญ์ ์ฒซ ๊ตฌ๊ฐ์์ 400 ์ค๋ฅ ๋๋ ์๊ฐ ์ ๋ณด ๋๋ฝ์ด ๋ฐ์ํ๋ฉด Whisper๋ก ํ ๋ฒ ์ฌ์๋ํ๋ฉฐ, ์ธ์ฆยทํฌ๋ ๋งยท์๋ ์ ํ ์ค๋ฅ๋ ์ฌ์๋ํ์ง ์์ต๋๋ค. ์ฐธ์ฌ์ ๊ตฌ๋ถ์ด ์คํจํด๋ ๊ธฐ์กด ํ์๋ก๊ณผ ์๋ ์ ์ฌ๋ฌธ์ ์ ์งํ๊ณ ๋ณ๋ ์๋ด๋ฅผ ํ์ํฉ๋๋ค.
ํ์๋ก์ AI ๋ณด์์ ์ผ์ ์ค๋ฅ๋ ๋น ์ง ๋งฅ๋ฝ์ ์ ๋ ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด โ7์ ์ถ์๋ ํ์ ์ผ์ ์ด ์๋๋ผ ๋ชฉํ์ ๋๋ค. ์์ฐ ๊ฒํ ๋ฅผ ๋ง์น ๋ค ์ต์ข ์ผ์ ์ ์ ํ๊ธฐ๋ก ํ๋ค๋ ๋งฅ๋ฝ์ ๋ฐ์ํด ์ฃผ์ธ์โ๋ผ๊ณ ์์ฒญํ ์ ์์ต๋๋ค. ๋ณด์์ ์์ฑ โ ๋ฏธ๋ฆฌ๋ณด๊ธฐ โ ์ ์ฉ ์์๋ก ๋ฐ์ํ๊ณ , ๋ฒ๋ฆฌ๊ธฐยท์ทจ์ยท์คํจ ์ ๊ธฐ์กด ํ์๋ก์ ์ ์งํฉ๋๋ค. ๋ณด์ ๊ณผ์ ์์ ์๋ ์ ์ฌ๋ฌธ์ ๋ฐ๊พธ์ง ์์ต๋๋ค.
AI ์ค์ โ ํ์๋ก ๋ณด์ ๋ชจ๋ธ์์ ์ ์ฉ ๋ชจ๋ธ์ ์ ํํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ ํ์๋ก ๋ชจ๋ธ๊ณผ ๋์ผ์ ํ์ฌ ํ์๋ก ๋ชจ๋ธ์ ๋ฐ๋ฆ ๋๋ค. ๋ณด์ ๋ชจ๋ธ ์ค์ ๊ณผ ์ ์ฉํ ๊ฒฐ๊ณผ๋ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ์ ๋๊ธฐํ๋ฉ๋๋ค. ์ฌ์ฉ๋ฒ๊ณผ ๊ฒ์ฆ ๊ธฐ๋ก
์ ํ์๋ก์ ๋ง๋ค๊ธฐ ์ ์ AI๊ฐ ์๋ค ๋ํ๋ฅผ ์ฐธ๊ณ ํด ์ก์์ฑ ๋ฌธ๊ตฌยท๋น์์ฑ ํ๊ธฐยท๋ฐ๋ณต ์ค์ธ์์ ์ ๋ฆฌํฉ๋๋ค. ์๋ณธ ๋ น์๊ณผ ์ ์ฌ๋ ๋ณด๊ดํ๋ฉฐ, AI ์ ๋ฆฌ๋ณธ / ์๋ฌธ์ผ๋ก ๋น๊ตํ ์ ์์ต๋๋ค. ์ฐธ์ฌ์ ์ ์ฌ์์๋ ๊ธฐ์กด ๋ฒํธ์ ์๊ฐ์ ์ ์งํฉ๋๋ค.
์ค์ โ AI ํ์๋ก โ ๋งฅ๋ฝ ๊ธฐ๋ฐ ์ ์ฌ ์ ๋ฆฌ์์ ์ผ๊ณ ๋ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ ์ผ์ง์ ๋๋ค. ํ์ฌ ํ์๋ก ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฏ๋ก ์ถ๊ฐ ๋ชจ๋ธ ์ฌ์ฉ๋ฃ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ ๋ฆฌ ๊ณผ์ ์ ์ค๋ฅยท๊ณผ๋ํ ์ญ์ ยท์์น ๋ณ๊ฒฝ์ ๊ฐ์งํ๋ฉด ์๋ฌธ์ผ๋ก ๋์๊ฐ๋๋ค.
๊ธฐ์กด ํ์๋ก์์๋ ์ ์ฌ ์ ๋ฆฌ๋ก ์ ๋ฆฌ๋ณธ๋ง ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ค๋์ค ์ฌ์ ์ฌ์ ๊ธฐ์กด Markdown ๋ณ๊ฒฝ์ ํ์ง ์์ต๋๋ค. ํ์๋ก๊น์ง ๊ฐฑ์ ํ๋ ค๋ฉด ๋ค์ ์์ฑ์ ์ฌ์ฉํ์ธ์. ์ ๋ฆฌ๋ณธ๊ณผ ์๋ ์ ๋ฆฌ ์ค์ ์ ๊ธฐ๊ธฐ ๊ฐ ๋๊ธฐํ๋ฉ๋๋ค.
์ค์ ์ ํ๋กํ ์์ญ์์ ํ์ ์ด๋ฆ, ๋ณ์นญ, ์ญํ , ์ฉ์ด ์ฌ์ ์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ํ ์คํธ ํ๋กํ์ ํ์ ๋ถ์ ํ๋กฌํํธ์ ํ๋ฉด ํ์ ๋ณด์ ์ ์ฌ์ฉ๋๋ฉฐ, Cloudflare ๋๊ธฐํ๋ฅผ ์ผ ๊ฒฝ์ฐ ๋ค๋ฅธ ๊ธฐ๊ธฐ๋ก ๊ณต์ ๋ฉ๋๋ค.
๋ด ๋ชฉ์๋ฆฌ ๋ น์ / ๋ค์ ๋ น์์ ๋๋ฅด๋ฉด ์๋ด ๋ชจ๋ฌ์ด ์ด๋ฆฝ๋๋ค. ์๋ฌธ๊ณผ ๋ น์ ์๋ น์ ํ์ธํ ๋ค ๋ น์ ์์์ ๋๋ฅด๊ณ ํ์ ํ์ ๋์ ๋ชฉ์๋ฆฌ๋ก ์ฝ์ด์ฃผ์ธ์. ๋ น์ ์๊ฐ๊ณผ ์งํ๋ฅ ์ด ํ์๋๋ฉฐ, ์ต์ 10์ด๋ถํฐ ์ ์ฅํ ์ ์๊ณ 30์ด์ ์๋ ์ข ๋ฃํฉ๋๋ค. ์ทจ์ํ๊ฑฐ๋ ๋ซ์ผ๋ฉด ๋ฑ๋ก์ ์ค๋จํ๊ณ ๊ธฐ์กด ๋ชฉ์๋ฆฌ ํ๋กํ์ ์ ์งํฉ๋๋ค. ์คํจํ๋ฉด ๊ฐ์ ํ๋ฉด์์ ๋ค์ ๋ น์ํ ์ ์์ต๋๋ค.
๋ น์ ํ๋ฉด์์ ๋ง์ดํฌ ์ ๋ ฅ ๋ง๋์ ์ ๋ ฅ ๊ฐ์ง ์๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค. ์์ ๋ชฉ์๋ฆฌ๋ ์ ํ๋ ์๋ ๋ณด์ ํ ์ค์ ๋ง์๋ฆฌ ๊ตฌ๊ฐ์ผ๋ก ๊ฒ์ฌํ๋ฉฐ, ๋ฌด์ยท์ก์์ ๋ฑ๋กํ์ง ์๋๋ก ๋ง์๋ฆฌ๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๋ชฉ์๋ฆฌ ๋ฑ๋ก ๊ฒ์ฆ ๊ธฐ๋ก
๋ด ๋ชฉ์๋ฆฌ ๋ฑ๋ก์ ๊ฐ ๊ธฐ๊ธฐ ์์์๋ง ์ ์ฅ๋ฉ๋๋ค. ๋ฑ๋ก ์ํ์ ์๋ณธ ์ค๋์ค๋ฅผ ๋ด๋ณด๋ด์ง ์๊ณ , ํ์ ๋น๊ต์ ํ์ํ ๋ก์ปฌ ํ๋กํ๋ง ๊ธฐ๊ธฐ ์ ์ฅ์์ ๋ก๋๋ค. ์ญ์ ํ๋ฉด ํด๋น ๊ธฐ๊ธฐ์์ ์ ๊ฑฐ๋ฉ๋๋ค. ๋ชฉ์๋ฆฌ ๋ฑ๋ก์ โ์ด ๋ฐํ๊ฐ ์ฑ ์์ ์์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋คโ๋ ํ์๋ฅผ ๋์ต๋๋ค. ๋ถํ์คํ ๊ตฌ๊ฐ์ ๋ถํ์คํ ์ํ๋ก ํ์ํ๊ณ , ์ฌ์ฉ์๊ฐ ์ง์ ์์ ํ ์ ์์ต๋๋ค.
๋ ๊ธฐ๊ธฐ์ ๊ฐ์ Cloudflare Worker ์ฃผ์์ ๋๊ธฐํ ํค๋ฅผ ์ ๋ ฅํ๋ฉด ๋ค์ ํญ๋ชฉ์ ์๋์ผ๋ก ๋ง์ถฅ๋๋ค.
| ํญ๋ชฉ | ๋๊ธฐํ |
|---|---|
| ๋ น์ ์ค๋์ค | ์ง์ |
| ์ ๋ชฉยท๋ ์งยท์ฆ๊ฒจ์ฐพ๊ธฐยท์ญ์ ์ํ | ์ง์ |
| ๋ น์ ํด๋ยท์ด๋ฆยท์์ยท์ญ์ ์ํยท๋ น์์ ํด๋ ์ฐ๊ฒฐ | ์ง์ |
| ์์ฑ๋ AI ํ์๋ก, ๋ณด์ ๊ฒฐ๊ณผ์ ์ ์ฒด ์ ์ฌ๋ฌธยท์ฐธ์ฌ์ ์ ๋ณดยทAI ์ ๋ฆฌ๋ณธ | ์ง์ |
| ํ์ ๋ถ์ ๋ฌธ์, ๋ฐํ์๋ณ ์ ์ฌ, ์ฝ์ยท์์ฒญยท์ง๋ฌธยท๊ฒฐ์ | ์ง์ |
| ํ์ ์ด๋ฆยท๋ณธ์ธ ํ์ยทํ๋ก์ ํธยท์ ๋ฌด ์ํ ์์ ์ด๋ ฅ | ์ง์ |
| ํ ์คํธ ํ๋กํ, ๋ณ์นญ, ์ญํ , ์ฉ์ด ์ฌ์ , ์๋ ํ์ ๋ถ์ ์ค์ | ์ง์ |
| AI ๋ชจ๋ธยท๋ณด์ ๋ชจ๋ธยท์ ์ฌ ๋ชจ๋ธยท์ถ๋ ฅ ์ธ์ดยท์๋ ์์ฑยท์ ์ฌ ์ ๋ฆฌ ์ค์ | ์ง์ |
| OpenRouter API ํค | ๊ธฐ๊ธฐ๋ณ Keychain ๋ณด๊ด |
| ๋๊ธฐํ ํค | ๊ธฐ๊ธฐ๋ณ Keychain ๋ณด๊ด |
| ๋ด ๋ชฉ์๋ฆฌ ํ๋กํยทํ์ ์๋ฒ ๋ฉ | ๊ธฐ๊ธฐ๋ณ ๋ณด๊ด |
| ์์ฑ ๋์ค์ ๋ถ๋ถ ์ ์ฌ ์บ์ | ๊ธฐ๊ธฐ๋ณ ๋ณด๊ด |
์ฑ์ ์ด๊ฑฐ๋ ํ์ฑํํ ๋์ ๋ก์ปฌ ๋ณ๊ฒฝ์ ์๋ฃํ์ ๋ ์๋์ผ๋ก ๋๊ธฐํํฉ๋๋ค. ์ฑ์ด ์คํ ์ค์ธ ๋์์๋ ์ฝ 30์ด ๊ฐ๊ฒฉ์ผ๋ก ์๋ ๊ธฐ๊ธฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํฉ๋๋ค. ๋คํธ์ํฌ ์ค๋ฅ๋ ์๋์ผ๋ก ์ฌ์๋ํ๋ฉฐ, ๋ฐ๋ณต ์คํจ ์ ๊ฐ๊ฒฉ์ ์ต๋ 5๋ถ๊น์ง ๋๋ฆฝ๋๋ค. Mac์ ์ฐฝ์ ๋ซ์๋ ์ฑ์ด ์คํ ์ค์ด๋ฉด ๋๊ธฐํ๋ฅผ ๊ณ์ํฉ๋๋ค. iPhone์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฐฑ์ ์ ์์ฝํ๊ณ ์ฑ์ ๋ค์ ์ด๋ฉด ์ฆ์ ๊ฐฑ์ ํฉ๋๋ค. ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์์ด๋ ์ ์ฅ๋ ๋ น์๊ณผ ํ์๋ก์ ๋ณผ ์ ์์ต๋๋ค.
๋๊ธฐํ๋ Mac๊ณผ iPhone์์ ์์ฑํ ๋ น์๊ณผ ํ์ ์๋ฃ๋ฅผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ์ผ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ ์ฅ์น๊ฐ ๋์์ ๋ น์ํ ์ค๋์ค๋ฅผ ํ๋์ โ๋ผ์ด๋ธ ํ์โ๋ก ํฉ์น๊ฑฐ๋ ํ์๋ผ์ธ์ ์๋ ๋ณํฉํ์ง ์์ต๋๋ค.
ํ์ํ ๋๊ตฌ๋ 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.xcconfigConfig/Local.xcconfig์ DEVELOPMENT_TEAM์ ๋ณธ์ธ์ Apple ๊ฐ๋ฐ ํ ID๋ก ๋ฐ๊พธ๊ณ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๋ก์ปฌ ์๋ช
ํ์ผ์ Git์์ ์ ์ธ๋ฉ๋๋ค.
make genNoteTaker.xcodeproj๋ฅผ ์ด์ด NoteTaker ์คํด์ ์คํํ๊ฑฐ๋ ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค.
make build
make run
# ์๋ช
๋ Release ๋น๋
make build-release๋น๋๋ ์ฑ์ build/DerivedData/Build/Products/Debug/AI-NoteTaker.app์ ์์ต๋๋ค. ๋ง์ดํฌ ๋๋ ์์คํ
์ค๋์ค ๊ถํ์ ํด๋น ๋
น์ ๋ชจ๋๋ฅผ ์ฒ์ ์ฌ์ฉํ ๋ ํ์ฉํฉ๋๋ค. ๊ธฐ์กด ๊ฐ๋ฐ ์ค์น๋ณธ์ ๊ต์ฒดํ ๋๋ ์ฑ์ ์ญ์ ํ์ง ์๊ณ ๊ฐ์ ๋ฒ๋ค ID๋ก ๋ค์ ์คํํ๋ฉด ๋ก์ปฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Keychain ์ค์ ์ ์ ์งํฉ๋๋ค.
- iPhone์ Mac์ ์ฐ๊ฒฐํ๊ณ ๊ธฐ๊ธฐ ์ ๋ขฐ ๋ฐ ๊ฐ๋ฐ์ ๋ชจ๋๋ฅผ ํ์ฑํํฉ๋๋ค.
iOS/NoteTakerIOS.xcodeproj๋ฅผ ์ด๊ณ NoteTakerIOS ์คํด์ ์ ํํฉ๋๋ค.- ๋ณธ์ธ์ ์๋ช ํ๊ณผ ์ฐ๊ฒฐ๋ iPhone์ ์ ํํ ๋ค Run์ผ๋ก ์ค์นํฉ๋๋ค.
App Store๋ TestFlight์ ์ถ์ํ ํ์๊ฐ ์์ต๋๋ค. ๊ฐ๋ฐ์ฉ ํ๋ก๋น์ ๋ ํ๋กํ์ผ์ด ๋ง๋ฃ๋๋ฉด Xcode์์ ๋ค์ ์๋ช
ยท์ค์นํฉ๋๋ค. ๊ธฐ์กด ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ ์ฑ์ ์ญ์ ํ์ง ์๊ณ ์
๋ฐ์ดํธํด ์ ์งํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ ํ์์ ๊ธฐ๋ณธ ๋ฒ๋ค ID๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด ํด๋น ํ๊น์ PRODUCT_BUNDLE_IDENTIFIER๋ฅผ ๋ณธ์ธ ์์ ์ ๊ณ ์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
์๋ฎฌ๋ ์ดํฐ์ ๊ธฐ๊ธฐ์ฉ Release ๋น๋๋ ๋ค์ ๋ช ๋ น์ผ๋ก ํ์ธํฉ๋๋ค.
make build-ios
make build-ios-release- ์ฑ์ ์ค์ โ AI ํ์๋ก์ ์ฝ๋๋ค.
- OpenRouter API ํค๋ฅผ ์ ์ฅํฉ๋๋ค. ํค๋ ํด๋น ๊ธฐ๊ธฐ์ Keychain์ ๋ณด๊ดํฉ๋๋ค.
- ์ฐ๊ฒฐ์ ํ์ธํ๊ณ ํ์๋ก ๋ชจ๋ธ๊ณผ ์์ฑ ์ธ์ ๋ชจ๋ธ์ ์ ํํฉ๋๋ค.
- ์ถ๋ ฅ ์ธ์ด์ ๋ น์ ํ ํ์๋ก ์๋ ์์ฑ ์ฌ๋ถ๋ฅผ ์ ํฉ๋๋ค.
- ์ถ๊ฐ ํ์ ๋ถ์์ ์ฌ์ฉํ๋ ค๋ฉด ํ๋กํ ๊ธฐ๋ฐ ๋ถ์ ์ต์ ์ ์ผญ๋๋ค.
- ๋ น์ ์์ธ์ AI ํ์๋ก๊ณผ ํ์ ๋ถ์์์ ์์ฑํ๊ฑฐ๋ ์ ์ฅ๋ ๋ฌธ์๋ฅผ ํ์ธํฉ๋๋ค.
๊ธด ํ์์ ์ต์ข ํ์๋ก๊ณผ ํ์ ๋ถ์์ ์ต๋ 131,072 ์ถ๋ ฅ ํ ํฐ, ์ค๊ฐ ์์ฝ์ ์ต๋ 32,768ํ ํฐ์ ์์ฒญํฉ๋๋ค. ๋ชจ๋ธ์ด ์๋ ค์ค ์ถ๋ ฅ ํ๋์ ์ ์ฒด ๋ฌธ๋งฅ ํฌ๊ธฐ์ ๋ง์ถฐ ์๋์ผ๋ก ์ค์ ๋๋ค. ์ด ์์ฐ์๋ ์ถ๋ก ํ ํฐ๋ ํฌํจ๋๋ฉฐ, ๋ฐ๋์ ์ด ๊ธธ์ด๊น์ง ์์ฑํ๋ ๊ฒ์ ์๋๋๋ค. ๊ธด ๋ต๋ณ์ ๋๊ธฐ ์๊ฐ๋ ๋๋ ธ์ต๋๋ค. ์ค๊ณ์ ๊ฒ์ฆ ๊ธฐ๋ก
API ํค ๊ต์ฒดยท์ญ์ ๋ ์ฑ ์ข ๋ฃ ์ ์งํ ์ค์ธ AI ์์ ์ ์ทจ์ํฉ๋๋ค. ์ด๋ฏธ ์ฒ๋ฆฌ๋ ์์ฒญ์ ๋น์ฉ์ ์ทจ์๋ก ๋๋๋ฆด ์ ์์ต๋๋ค. AI ๊ฒฐ๊ณผ๋ ์ ์ฌ๋ฌธ๊ณผ ์๋ณธ ๋ฐํ ๊ทผ๊ฑฐ๋ฅผ ํจ๊ป ๊ฒํ ํ์ธ์.
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]
Cloudflare/์์ Worker, D1 ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋น๊ณต๊ฐ R2 ๋ฒํท์ ์ค๋นํฉ๋๋ค.wrangler.toml์ ๋ณธ์ธ์ D1 ID๋ฅผ ๋ฃ๊ณ ๋ชจ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ฉํฉ๋๋ค.- ๊ธด ์์ ๋ฌธ์์ด์ Worker์
SYNC_TOKENsecret์ผ๋ก ์ ์ฅํ ๋ค ๋ฐฐํฌํฉ๋๋ค. - Mac๊ณผ iPhone์ ์ค์ โ ๋๊ธฐํ์ ๊ฐ์ Worker HTTPS ์ฃผ์์ ๋๊ธฐํ ํค๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ๋๊ธฐํ๋ฅผ ์ผ๊ณ ์ฐ๊ฒฐ ํ์ธ ๋ฐ ์๋ ๋๊ธฐํ๋ฅผ ์คํํฉ๋๋ค.
๋๊ธฐํ ํค๋ 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 ์คํ ์ ์ฑ ์ ๋ฐ๋ฆ ๋๋ค.