๋ฐ์ํ
๐ฏ ์ ์ด ํ๋ก์ ํธ๋ฅผ ์์ํ๋์?
์ฌ๋ด ์
๋ฌด๋ฅผ ํ๋ค ๋ณด๋ฉด ํ๋ฃจ์๋ ์์ญ ํต์ ์๋ ๋ฉ์ผ์ด ์์์ง๋๋ค. ์์คํ
์๋ฆผ, ๋ณด๊ณ ์, ๊ณต์ง์ฌํญ ๋ฑ... ์ค์ํ ๋ฉ์ผ์ ๋์น์ง ์์ผ๋ ค๋ฉด ๋งค๋ฒ ํ์ธํด์ผ ํ์ง๋ง, ๋ชจ๋ ๋ฉ์ผ์ ์ผ์ผ์ด ์ฝ๊ธฐ์ ์๊ฐ์ด ๋๋ฌด ์๊น์ต๋๋ค.
"๋ฉ์ผ์ ์๋์ผ๋ก ์ฝ๊ณ ์์ฝํด์ฃผ๋ AI ์ด์์คํดํธ๊ฐ ์๋ค๋ฉด ์ด๋จ๊น?"
์ด๋ฐ ์๊ฐ์์ ์์ํ ํ๋ก์ ํธ๊ฐ ๋ฐ๋ก Message Assistant์
๋๋ค.
๐ธ ํ๋ก์ ํธ ์๊ฐ
Message Assistant๋ ๋ค์ด๋ฒ ๋ฉ์ผ์ ์๋์ผ๋ก ์ฝ์ด์์ Google Gemini AI๋ก ์์ฝํด์ฃผ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค. ๋ง์น ๋ฉ์ ์ ์ฒ๋ผ ์ง๊ด์ ์ธ UI๋ก ๋ฉ์ผ์ ํ์ธํ๊ณ , AI๊ฐ ํต์ฌ ๋ด์ฉ๋ง ์ถ๋ ค์ ๋ณด์ฌ์ค๋๋ค.
โจ ์ฃผ์ ๊ธฐ๋ฅ
1. ๐ง ๋ค์ด๋ฒ ๋ฉ์ผ ์๋ ์ฐ๋
IMAP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ค์ด๋ฒ ๋ฉ์ผ ์๋ฒ์ ์ง์ ์ฐ๊ฒฐ
์ค์๊ฐ์ผ๋ก ๋ฉ์ผ์ ๊ฐ์ ธ์์ ํ์
2๋จ๊ณ ์ธ์ฆ์ ์ง์ํ์ฌ ๋ณด์์ฑ ํ๋ณด
2. ๐ค AI ๊ธฐ๋ฐ ๋ฉ์ผ ์์ฝ
Google Gemini 1.5 Flash ๋ชจ๋ธ ์ฌ์ฉ
๊ฐ ๋ฉ์ผ์ ํต์ฌ ๋ด์ฉ์ 3-4์ค๋ก ๊ฐ๊ฒฐํ๊ฒ ์์ฝ
๋ฐ์ ์, ์ ๋ชฉ, ๋ณธ๋ฌธ์ ๋ชจ๋ ๋ถ์ํ์ฌ ์ค์ ์ ๋ณด ์ถ์ถ
3. ๐ฌ ์ฑํ
๋ฐฉ ํ์์ ์ง๊ด์ ์ธ UI
๋ฐ์ ์๋ณ๋ก ์๋์ผ๋ก ์ฑํ
๋ฐฉ ์์ฑ
๋ฉ์ ์ ์ฒ๋ผ ํธํ๊ฒ ๋ฉ์ผ ํ์ธ
๋คํฌ ๋ชจ๋ ๊ธฐ๋ฐ์ ์ธ๋ จ๋ ๋์์ธ
4. ๐ ์ ๋ฉ์ผ ์๋ฆผ
์๋ก์ด ๋ฉ์ผ์ด ๋์ฐฉํ๋ฉด ์๋ฆผ์ ์ฌ์
์๋ฆผ on/off ํ ๊ธ ๊ธฐ๋ฅ
์๊ฐ์ ์๋ฆผ ํ์ (๋ฒจ ์์ด์ฝ ์์ ๋ณ๊ฒฝ)
5. โ๏ธ ์ฌ์ฉ์ ์ค์
๊ฐ์ ธ์ฌ ๋ฉ์ผ ๊ฐ์ ์ค์ (10/20/50/100๊ฐ)
ํ์ํ ๋งํผ๋ง ๋ฉ์ผ์ ๋ก๋ํ์ฌ ์ฑ๋ฅ ์ต์ ํ
๐ ๏ธ ๊ธฐ์ ์คํ
Frontend
React + Vite: ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ Hot Module Replacement
Tailwind CSS: ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฐ์ ํจ์จ์ ์ธ ์คํ์ผ๋ง
Lucide React: ์๋ฆ๋ค์ด ์์ด์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Backend
Express.js: ๊ฐ๋จํ๊ณ ๊ฐ๋ ฅํ Node.js ์น ํ๋ ์์ํฌ
imap-simple: IMAP ํ๋กํ ์ฝ๋ก ๋ฉ์ผ ์๋ฒ ์ฐ๊ฒฐ
mailparser: ๋ฉ์ผ ํ์ฑ ๋ฐ ๋ณธ๋ฌธ ์ถ์ถ
AI
Google Gemini API: ์ต์ ์์ฑํ AI ๋ชจ๋ธ
@google/generative-ai: ๊ณต์ Node.js SDK
๐จ ์ฃผ์ ํ๋ฉด ์ค๋ช
๋ฉ์ธ ํ๋ฉด
์ผ์ชฝ ์ฌ์ด๋๋ฐ: ๋ฐ์ ์๋ณ ์ฑํ
๋ฐฉ ๋ชฉ๋ก
๊ฐ ์ฑํ
๋ฐฉ์๋ ๋ฐ์ ์ ์ด๋ฆ๊ณผ ์ต๊ทผ ๋ฉ์ผ ๊ฐ์ ํ์
ํด๋ฆญํ๋ฉด ํด๋น ๋ฐ์ ์์ ๋ฉ์ผ ๋ชฉ๋ก ํ์
์ค๋ฅธ์ชฝ ์ฑํ
์์ญ: ์ ํํ ์ฑํ
๋ฐฉ์ ๋ฉ์ผ ๋ด์ฉ
์๋ณธ ๋ฉ์ผ ๋ด์ฉ๊ณผ AI ์์ฝ์ด ํจ๊ป ํ์
์๊ฐ์์ผ๋ก ์ ๋ ฌ๋์ด ์ต์ ๋ฉ์ผ์ด ์๋์ ํ์
์๋จ ํค๋:
์๋ก๊ณ ์นจ ๋ฒํผ์ผ๋ก ๋ฉ์ผ ๋ค์ ๋ถ๋ฌ์ค๊ธฐ
์๋ฆผ ํ ๊ธ ๋ฒํผ
์ค์ ๋ฒํผ
์ค์ ๋ชจ๋ฌ
๋ฉ์ผ ๊ฐ์ ธ์ค๊ธฐ ๊ฐ์ ์ ํ
์ค์ ์ ์ฅ ๋ฐ ์ฆ์ ์ ์ฉ
๐ก ํฅํ ์ถ๊ฐํ๋ฉด ์ข์ ๊ธฐ๋ฅ๋ค
ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด์ ์ฌ๋ฌ ์์ด๋์ด๊ฐ ๋ ์ฌ๋์ต๋๋ค. ๋
์ ์ฌ๋ฌ๋ถ์ ์๊ฒฌ๋ ๋ฃ๊ณ ์ถ์ต๋๋ค!
1. ๐ท๏ธ ๋ฉ์ผ ์๋ ๋ถ๋ฅ ๋ฐ ๋ผ๋ฒจ๋ง
AI๊ฐ ๋ฉ์ผ ๋ด์ฉ์ ๋ถ์ํ์ฌ ์๋์ผ๋ก ์นดํ
๊ณ ๋ฆฌ ๋ถ๋ฅ
"๊ธด๊ธ", "์
๋ฌด", "๊ณต์ง", "์คํธ" ๋ฑ์ ๋ผ๋ฒจ ์๋ ๋ถ์ฌ
์ค์๋์ ๋ฐ๋ฅธ ์ฐ์ ์์ ํ์
2. ๐ ๋ฉ์ผ ํต๊ณ ๋์๋ณด๋
์ผ๋ณ/์ฃผ๋ณ ๋ฉ์ผ ์์ ํต๊ณ
๋ฐ์ ์๋ณ ๋ฉ์ผ ๋น๋ ์ฐจํธ
๊ฐ์ฅ ๋ง์ด ๋ฐ๋ ๋ฉ์ผ ์ ํ ๋ถ์
3. ๐ ์ค๋งํธ ๊ฒ์ ๊ธฐ๋ฅ
ํค์๋ ๊ฒ์๋ฟ๋ง ์๋๋ผ ์์ฐ์ด ์ง์ ์ง์
"์ง๋์ฃผ ๊น๊ณผ์ฅ๋์ด ๋ณด๋ธ ์์ฐ ๊ด๋ จ ๋ฉ์ผ" ๊ฐ์ ์ง๋ฌธ์ผ๋ก ๊ฒ์
AI๊ฐ ๋ฌธ๋งฅ์ ์ดํดํ์ฌ ๊ด๋ จ ๋ฉ์ผ ์ฐพ๊ธฐ
4. ๐ ์๋ ์๋ต ์ ์
AI๊ฐ ๋ฉ์ผ ๋ด์ฉ์ ๋ถ์ํ์ฌ ์ ์ ํ ๋ต์ฅ ์ด์ ์์ฑ
์ฌ๋ฌ ๊ฐ์ง ํค(๊ณต์์ /์น๊ทผํ/๊ฐ๊ฒฐํ)์ผ๋ก ์๋ต ์์ฑ
์ํด๋ฆญ์ผ๋ก ๋ต์ฅ ์ ์ก
5. ๐ ๋ค๋ฅธ ๋ฉ์ผ ์๋น์ค ์ง์
Gmail, Outlook, Daum ๋ฑ ๋ค์ํ ๋ฉ์ผ ์๋น์ค ์ฐ๋
์ฌ๋ฌ ๊ณ์ ์ ํ๋์ ์ธํฐํ์ด์ค์์ ๊ด๋ฆฌ
ํตํฉ ๋ฐ์ํธ์งํจ ๊ธฐ๋ฅ
6. ๐ฑ ๋ชจ๋ฐ์ผ ์ฑ ๋ฒ์
React Native๋ก iOS/Android ์ฑ ๊ฐ๋ฐ
ํธ์ ์๋ฆผ์ผ๋ก ์ค์๊ฐ ๋ฉ์ผ ํ์ธ
์คํ๋ผ์ธ์์๋ ์ด์ ๋ฉ์ผ ์ด๋ ๊ฐ๋ฅ
7. ๐ค ํ ํ์
๊ธฐ๋ฅ
์ค์ํ ๋ฉ์ผ์ ํ์๊ณผ ๊ณต์
๋ฉ์ผ์ ๋ํ ๋๊ธ ๋ฐ ํ ๋ก ๊ธฐ๋ฅ
์
๋ฌด ํ ๋น ๋ฐ ์งํ ์ํฉ ์ถ์
8. ๐ฏ ์ค๋งํธ ํํฐ๋ง
์ฝ์ง ์์ ๋ฉ์ผ๋ง ๋ณด๊ธฐ
ํน์ ๊ธฐ๊ฐ ๋ด ๋ฉ์ผ๋ง ํํฐ๋ง
์ฒจ๋ถํ์ผ์ด ์๋ ๋ฉ์ผ๋ง ๋ชจ์๋ณด๊ธฐ
9. ๐ ์ฒจ๋ถํ์ผ ๊ด๋ฆฌ
์ฒจ๋ถํ์ผ ์๋ ๋ค์ด๋ก๋ ๋ฐ ๋ถ๋ฅ
ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์ฐ๋ (Google Drive, Dropbox)
์ฒจ๋ถํ์ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ
10. ๐ ๋ณด์ ๊ฐํ
์ข
๋จ๊ฐ ์ํธํ (E2E Encryption)
์์ฒด ์ธ์ฆ (์ง๋ฌธ, ์ผ๊ตด ์ธ์)
์๋ ๋ก๊ทธ์์ ๋ฐ ์ธ์
๊ด๋ฆฌ
๐ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐฐ์ด ์
1. IMAP ํ๋กํ ์ฝ์ ์ดํด
์ฒ์์๋ ๋ฉ์ผ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๊ฐ๋จํ ์ค ์์์ง๋ง, IMAP ํ๋กํ ์ฝ์ ์ ๋๋ก ์ดํดํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. ํนํ ๋ค์ด๋ฒ์ 2๋จ๊ณ ์ธ์ฆ์ ์ฐํํ๊ธฐ ์ํด ์ฑ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ด ํต์ฌ์ด์์ต๋๋ค.
2. AI ํ๋กฌํํธ ์์ง๋์ด๋ง
Gemini API์ ์ด๋ค ํ๋กฌํํธ๋ฅผ ์ฃผ๋๋์ ๋ฐ๋ผ ์์ฝ์ ํ์ง์ด ํฌ๊ฒ ๋ฌ๋ผ์ก์ต๋๋ค. ์ฌ๋ฌ ๋ฒ์ ์ํ์ฐฉ์ค ๋์ "ํต์ฌ ๋ด์ฉ์ 3-4์ค๋ก ์์ฝํ๋, ๋ฐ์ ์์ ์ฃผ์ ์ก์
์์ดํ
์ ํฌํจํ๋ผ"๋ ํ๋กฌํํธ๊ฐ ๊ฐ์ฅ ํจ๊ณผ์ ์ด์์ต๋๋ค.
3. React ์ํ ๊ด๋ฆฌ
์ฑํ
๋ฐฉ์ ์ ํํ ๋๋ง๋ค ๋ฉ์ผ์ ๋ค์ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์์ race condition ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. useEffect์ cleanup ํจ์๋ฅผ ํ์ฉํ์ฌ ์ด์ ์์ฒญ์ ์ทจ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
4. ๋ณด์์ ์ค์์ฑ
API ํค์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฝ๋์ ํ๋์ฝ๋ฉํ์ง ์๊ณ ํ๊ฒฝ๋ณ์๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์ค์์ฑ์ ๊นจ๋ฌ์์ต๋๋ค.
.gitignore
๋ฅผ ์ ๋๋ก ์ค์ ํ์ง ์์๋ค๋ฉด ํฐ ๋ฌธ์ ๊ฐ ๋ ๋ปํ์ต๋๋ค.
๐ ํ๋ก์ ํธ ๊ตฌ์กฐ
message-assistant/
โโโ src/
โ โโโ components/
โ โ โโโ ChatArea.jsx # ๋ฉ์ผ ํ์ ์์ญ
โ โ โโโ Sidebar.jsx # ์ฑํ
๋ฐฉ ๋ชฉ๋ก
โ โ โโโ SettingsModal.jsx # ์ค์ ๋ชจ๋ฌ
โ โ โโโ Layout.jsx # ์ ์ฒด ๋ ์ด์์
โ โโโ services/
โ โ โโโ gemini.js # Gemini API ์ฐ๋
โ โโโ App.jsx # ๋ฉ์ธ ์ฑ
โโโ server.js # Express ๋ฐฑ์๋
โโโ .env # ํ๊ฒฝ ๋ณ์ (git ์ ์ธ)
โโโ README.md # ํ๋ก์ ํธ ์ค๋ช
๐ ์์ํ๋ ๋ฐฉ๋ฒ
ํ๋ก์ ํธ๋ฅผ ์ง์ ์คํํด๋ณด๊ณ ์ถ์ผ์ ๊ฐ์? GitHub์์ ์์ค์ฝ๋๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค!
GitHub ์ ์ฅ์: https://github.com/sdm6410/message-assistant
๋น ๋ฅธ ์์
# ์ ์ฅ์ ํด๋ก
git clone https://github.com/sdm6410/message-assistant.git
cd message-assistant
# ์์กด์ฑ ์ค์น
npm install
# ํ๊ฒฝ ๋ณ์ ์ค์
cp .env.example .env
# .env ํ์ผ์ ์ด์ด์ API ํค์ ๋ฉ์ผ ์ ๋ณด ์
๋ ฅ
# ๋ฐฑ์๋ ์๋ฒ ์คํ (ํฐ๋ฏธ๋ 1)
node server.js
# ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์๋ฒ ์คํ (ํฐ๋ฏธ๋ 2)
npm run dev
์์ธํ ์ค์ ๋ฐฉ๋ฒ์ README.md๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
๐ญ ๋ง์น๋ฉฐ
์ด ํ๋ก์ ํธ๋ ๋จ์ํ ๋ฉ์ผ์ ์ฝ์ด์ฃผ๋ ๋๊ตฌ๋ฅผ ๋์ด์, AI๊ฐ ์ด๋ป๊ฒ ์ฐ๋ฆฌ์ ์ผ์ ์
๋ฌด๋ฅผ ๊ฐ์ ํ ์ ์๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์คํ์ด์์ต๋๋ค.
์์ง ๋ถ์กฑํ ์ ๋ ๋ง๊ณ , ์ถ๊ฐํ๊ณ ์ถ์ ๊ธฐ๋ฅ๋ ๋ง์ง๋ง, ์ค์ ๋ก ์ฌ์ฉํ๋ฉด์ ์
๋ฌด ํจ์จ์ด ํฌ๊ฒ ํฅ์๋๋ ๊ฒ์ ์ฒด๊ฐํ๊ณ ์์ต๋๋ค.
์ฌ๋ฌ๋ถ๋ ๋น์ทํ ๋ถํธํจ์ ๊ฒช๊ณ ๊ณ์ ๊ฐ์? ์ด๋ค ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด ์ข์๊น์? ๋๊ธ๋ก ์๊ฒฌ์ ๋๋ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค! ๐
GitHub: https://github.com/sdm6410/message-assistant๋ฐ์ํ
'๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Steam๊ฒ์]๋๋ถ๋ ๋์ฒด๋์๋ค 6x6 ์ฝ๋ (0) | 2025.11.15 |
|---|---|
| ๐ MCP(Memory Context Personalization)๋? (0) | 2025.04.16 |
| ๐ ์ด์ฐฝ์ญ ใ๊ทธ๋ฅ ํด, ์ ๋นํใ ๋ ํ๊ฐ ์ด์ ๋ฆฌ (0) | 2025.04.13 |
| ๋น์๊ณ์๋ น ๋ป (0) | 2024.12.04 |
| [๋ ํ๊ฐ] ์๋ ์ด ์จ๋ค #2 (0) | 2024.11.29 |