ํด๊ทผ๋ณด๊ณ , 1:1 ์๋ด, ํ๋ก์ ํธ ์งํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ํ์ ํ์ฅ์ด ์กฐ์ง ์ํ๋ฅผ ํ์ ํ๊ณ , ๋งค์ผ ์คํ ์ฐ์ ์์๋ฅผ ๋ฐ๊ณ , ๊ถ๊ธํ ๊ฒ์ ์ง์ ์ง๋ฌธํ ์ ์๋ ๊ฒฝ์์ง์ ์์ด์ ํธ์ ๋๋ค.
work-insight/
โโโ backend/ # FastAPI ๋ฐฑ์๋
โ โโโ app/
โ โ โโโ models/ # SQLAlchemy ORM ๋ชจ๋ธ
โ โ โโโ schemas/ # Pydantic ์คํค๋ง
โ โ โโโ api/ # API ๋ผ์ฐํฐ
โ โ โ โโโ reports.py # ํด๊ทผ๋ณด๊ณ API
โ โ โ โโโ oneone.py # 1:1 ์๋ด API
โ โ โ โโโ dashboard.py # ๋์๋ณด๋ API
โ โ โ โโโ copilot.py # Copilot ์ง์ API
โ โ โ โโโ email_storage.py # SharePoint ์ ์ฅ / Graph ์นํ
API
โ โ โโโ services/ # ๋น์ฆ๋์ค ๋ก์ง
โ โ โ โโโ microsoft_graph.py # Graph API ํ ํฐ ๋ฐ HTTP ํด๋ผ์ด์ธํธ
โ โ โ โโโ sharepoint_email_storage.py # SharePoint ๋ฆฌ์คํธ ์ ์ฅ ์๋น์ค
โ โ โ โโโ graph_email_ingestion.py # Graph ๊ตฌ๋
์์ฑ ๋ฐ ์นํ
์ฒ๋ฆฌ
โ โ โ โโโ email_service.py # ์ด๋ฉ์ผ ์ ํธ๋ฆฌํฐ
โ โ โโโ analysis/ # AI/๋ถ์ ์์ง
โ โ โ โโโ analyzer.py # ReportAnalyzer, RiskSignalDetector, BriefingGenerator
โ โ โ โโโ copilot.py # CopilotEngine (์ค์ผ์คํธ๋ ์ดํฐ ์ฐ๋ ํฌํจ)
โ โ โโโ utils/ # ๊ณตํต ์ ํธ๋ฆฌํฐ
โ โ โโโ main.py # FastAPI ์ฑ ์ง์
์
โ โโโ config.py # ์ค์ ํ์ผ
โโโ frontend/ # ์ ์ ์น UI (HTML + Vanilla JS)
โโโ docs/ # ๋ฌธ์
โโโ requirements.txt # Python ํจํค์ง ์์กด์ฑ
โโโ README.md
- ํ์์ด ๋งค์ผ ์์ฑํ๋ ํด๊ทผ๋ณด๊ณ ๊ด๋ฆฌ
- ์๋ ๋ถ๋ฅ ๋ฐ ๋ถ์ (ํ๋ก์ ํธ ํ๊น , ์ด์ ์ถ์ถ, ๊ฐ์ ๋ถ์)
- ํ์ฅ-ํ์ ์๋ด ๊ธฐ๋ก ๊ด๋ฆฌ
- ์ก์ ์์ดํ ์ถ์
- ๋ฏผ๊ฐ์ ๋ณด ์ ๊ทผ ์ ์ด
- ํ์ฅ์ฉ: ํ์๋ณ ์ ๋ฌด ํํฉ, ๋ฏธ์๋ฃ ๋์ , ๋ฐ๋ณต ์ด์
- ๋ํ์ฉ: ์ ์ฌ ํ๋ก์ ํธ ์งํ, ์ง์ฐ ์ํ, ์กฐ์ง ํผ๋ก๋
- ์์ฐ์ด ์ง์ ์ฒ๋ฆฌ
- Azure AI Orchestration Agent ์ฐ๋ (๋ก์ปฌ fallback ํฌํจ)
- ๊ทผ๊ฑฐ ํฌํจ ๋ต๋ณ ์์ฑ
- ์๋ ์์ฑ ๋ฐ ์ด๋ฉ์ผ ๋ฐ์ก
- ๋์๋ณ ๋ง์ถค ์ฝํ ์ธ
- ์ดํ ๋ฆฌ์คํฌ, ๋ฒ์์, ๊ฐ๋ฑ ์ ํธ ๊ฐ์ง
- ์กฐ๊ธฐ ๊ฒฝ๊ณ ๋ฐ ์ถ์ฒ ์ก์
- Microsoft Graph ๊ตฌ๋ (webhook)์ผ๋ก ์์ ์ด๋ฉ์ผ ์๋ ์บก์ฒ
- SharePoint
RawWorkReports๋ฆฌ์คํธ์ ์ด๋ฉ์ผ ๋ด์ฉ ์ ์ฅ - ์ ์ฅ ํ๋:
Title,Sender,ReportContent,ReceivedTime,AISummary
pip install -r requirements.txt๋ฃจํธ์ .env (๋๋ .env.sharepoint) ํ์ผ ์์ฑ ํ ์๋ ํ๊ฒฝ ๋ณ์ ์ค์ ์น์
์ฐธ๊ณ .
cd backend
copy ..\<envํ์ผ> .env
python -m uvicorn app.main:app --port 8000API ๋ฌธ์: http://localhost:8000/docs
cd frontend
python -m http.server 3000ํ๋ก ํธ์๋๋ ํ์ฌ ๋ชฉ์ ๋ฐ์ดํฐ๋ก ๋์ํฉ๋๋ค. ๋ฐฑ์๋ ์ค์ ์ฐ๋์ ์ํด์๋
frontend/js/api.js์ fetch ๊ฒฝ๋ก๋ฅผ ํ์ฑํํ์ธ์.
POST /api/reports/- ํด๊ทผ๋ณด๊ณ ์์ฑGET /api/reports/my/- ๋ด ๋ณด๊ณ ๋ชฉ๋กGET /api/reports/{report_id}- ๋ณด๊ณ ์กฐํGET /api/reports/stats/risk- ๋ฆฌ์คํฌ ํต๊ณ
POST /api/oneone/- ์๋ด ๊ธฐ๋กGET /api/oneone/{record_id}- ์๋ด ์กฐํPOST /api/oneone/{oneone_id}/action-items- ์ก์ ์์ดํ ์์ฑPATCH /api/oneone/action-items/{item_id}/complete- ์ก์ ์๋ฃ ์ฒ๋ฆฌ
GET /api/dashboard/overview- ์ ์ฌ ๊ฐ์GET /api/dashboard/team/{team_id}- ํ ๋์๋ณด๋GET /api/dashboard/org/- ์ ์ฌ ๋์๋ณด๋
POST /api/copilot/query- ์์ฐ์ด ์ง์ (Azure AI Orchestrator ์ฐ์ ํธ์ถ)GET /api/copilot/suggestions- ์ถ์ฒ ์ง๋ฌธGET /api/copilot/history- ์ง์ ํ์คํ ๋ฆฌPOST /api/copilot/feedback- ๋ต๋ณ ํผ๋๋ฐฑ
GET /api/email-storage/sharepoint/status- SharePoint ์ฐ๊ฒฐ ์ํ ํ์ธPOST /api/email-storage/sharepoint/store- ์ด๋ฉ์ผ ์๋ ์ ์ฅPOST /api/email-storage/graph/subscriptions- Graph ๋ฉ์ผ ๊ตฌ๋ ์์ฑPOST /api/email-storage/graph/webhook- Graph ์นํ ์์ ์ฒ๋ฆฌ
RAG ์ฒ๋ฆฌ ๊ณผ์ ์์ ๊ฒ์/๋ถ์ ๋จ๊ณ๋ฅผ ์ฌํํ๊ธฐ ์ํด checkpoint๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ง์๋ณ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ผ ์กฐ๊ฑด์ผ๋ก ์ฌ์คํ
- ๋ถ์ ๊ฒฐ๊ณผ ํ๊ท(regression) ํ์ธ
- ์ด์ ์ด์ ๋ฐ์ ์ ํน์ ์์ ์ํ ๋ณต์
- ์ง์ ์๋ฌธ๊ณผ ์๋ ๋ถ๋ฅ ๊ฒฐ๊ณผ
- ๊ฒ์๋ ๋ฌธ์ ID ๋ชฉ๋ก๊ณผ ์ ์
- ๊ทผ๊ฑฐ(evidence) ์์ฝ ๊ฒฐ๊ณผ
- ํ์ ์ง๋ฌธ ์์ฑ ๊ฒฐ๊ณผ
- ์ง์ ์ฒ๋ฆฌ ์๋ฃ ์ checkpoint๋ฅผ ์์ฑ
- ๋์ผ ์ง์ ์ฌ์คํ ์ checkpoint์ ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ต
- ์ฐจ์ด๊ฐ ํฐ ๊ฒฝ์ฐ ๋ก๊ทธ์ ๊ฒฝ๊ณ ๋ฅผ ๋จ๊ฒจ ํ์ง ์ ํ๋ฅผ ์ถ์
- ๋ฐฐํฌ ๋จ์(์: release tag)๋ก checkpoint ์ค๋ ์ท ๋ณด๊ด
- ๋ฏผ๊ฐ์ ๋ณด๊ฐ ํฌํจ๋ ์๋ฌธ/๊ทผ๊ฑฐ๋ ๋ง์คํน ํ ์ ์ฅ
- ์ฅ์ ๋ถ์์ฉ checkpoint๋ ๋ณด๊ด ๊ธฐ๊ฐ ์ ์ฑ (์: 30์ผ)์ ์ ์ฉ
- โ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋ชจ๋ธ
- โ ํด๊ทผ๋ณด๊ณ ์ ๋ ฅ/์กฐํ
- โ 1:1 ์๋ด ๊ด๋ฆฌ
- โ ๊ธฐ๋ณธ ๋์๋ณด๋
- โ RAG ๊ธฐ๋ฐ Copilot
- โ ๋ฆฌ์คํฌ ์ ํธ ํ์ง
- โ Microsoft Graph ํด๋ผ์ด์ธํธ (ํ ํฐ + HTTP)
- โ SharePoint ์ด๋ฉ์ผ ์ ์ฅ ์๋น์ค
- โ Graph ์นํ ์์ ๋ฐ ๋ฉ์ผ ์๋ ์ ์ฅ
- โ Azure AI Orchestration Agent ์ฐ๋ (fallback ํฌํจ)
- ๐ ์์นจ ๋ธ๋ฆฌํ ๋ฐ์ก
- ์ธ์ฆยท๊ถํ ๋์ (ํ๋์ฝ๋ฉ๋ user_id ์ ๊ฑฐ)
- ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์ โ ์ค์ DB ์ ํ
- Graph ์นํ ๊ตฌ๋ ์๋ ๊ฐฑ์
- ๊ณ ๊ธ ๋ถ์ ๋ฐ ํธ๋ ๋
- ๋ฉํฐ์ธ์ด ์ง์
backend/.env ํ์ผ ์์ฑ:
# Microsoft Graph / Azure AD
MICROSOFT_TENANT_ID=
MICROSOFT_CLIENT_ID=
MICROSOFT_CLIENT_SECRET=
# SharePoint
SHAREPOINT_SITE_ID=
SHAREPOINT_LIST_ID=
# Graph ์นํ
GRAPH_MAILBOX_USER_ID=
GRAPH_NOTIFICATION_URL=
GRAPH_SUBSCRIPTION_CLIENT_STATE=
GRAPH_SUBSCRIPTION_RESOURCE=
GRAPH_SUBSCRIPTION_EXPIRATION_MINUTES=4230
# Azure AI Orchestration Agent
ORCHESTRATION_USER_ENDPOINT=
ORCHESTRATION_API_KEY=
ORCHESTRATION_TIMEOUT_SECONDS=20
.envํ์ผ์.gitignore์ ํฌํจ๋์ด ์์ต๋๋ค. ์ํฌ๋ฆฟ ๊ฐ์ ์ ๋ ์ปค๋ฐํ์ง ๋ง์ธ์.
WorkInsight์ ๊ธฐํ ๋ฐฉํฅ๊ณผ ๊ตฌ์กฐ๋ฅผ 20์ฅ ์ฌ๋ผ์ด๋๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
- ๋ณด๊ณ ๋ ์์ง๋ง ํด์์ด ์๋ค โ ์กฐ์ง์๋ ํด๊ทผ๋ณด๊ณ ยทํ์ยท๋ฉ์ ์ ๋ฑ ์ ๋ณด๊ฐ ์ถฉ๋ถํ ์์ง๋ง, ๋ํยทํ์ฅ์ด ์ํ๋ ๊ฒ์ "์ง๊ธ ์ด๋๊ฐ ๋งํ๊ณ ์ด๋์ ๊ฐ์ ํด์ผ ํ๋๊ฐ"๋ค.
- ๊ด๋ฆฌ์๋ ๋ ๋ฆ๊ฒ ์๋ค โ ํผ๋ก๋ ๋์ , ํ์ ๋ณ๋ชฉ, ์ง์ฐ ์ ํธ๋ ํ ์คํธ์ ๋จผ์ ๋ํ๋์ง๋ง ๊ตฌ์กฐํ๋์ง ์์ ๋ฆ๊ฒ ์ธ์ง๋๋ค.
- ํ๋ก์ ํธ ๋ฆฌ์คํฌ โ ์ฌ๋ ๋ฆฌ์คํฌ๋ ์ฐ๊ฒฐ๋ผ ์๋ค โ ์ผ์ ์ง์ฐ์ ๊ณผ๋ถํยท์์ฌ๊ฒฐ์ ์ง์ฐยทํ์ ๊ฐ๋ฑ์์ ๋น๋กฏ๋๋ค.
| ๊ธฐ๋ฅ | ํต์ฌ ๋ฉ์์ง |
|---|---|
| ํด๊ทผ๋ณด๊ณ ๊ตฌ์กฐํ | ์๋ฃ/์งํ/๋ฏธ์๋ฃ/์ง์ ์์ฒญ์ ์๋ ๋ถ๋ฅํด ๋ด์ผ์ ํ๋จ ์ ๋ณด๋ก ์ ํ |
| 1:1 ์๋ด ์คํํ | ๋ถ๋งยท์ฑ์ฅ ๋์ฆยทํ์ ๋ฌธ์ ๋ฅผ ๊ตฌ์กฐํํด ์ก์ ์์ดํ ์ผ๋ก ์ฐ๊ฒฐ |
| ์ค์ ๋ธ๋ฆฌํ | ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ํยทํ์ฅยทํ์๋ณ ๋ง์ถค ์ฐ์ ์์๋ก ์๋ ์์ฑ |
| ๋ฆฌ์คํฌ ์ ํธ ํ์ง | ํด์ฌ ์์ธก์ด ์๋ ํผ๋ก๋ยท๊ฐ๋ฑยท๋ฒ์์ ์กฐ๊ธฐ ์ผ์ด ์ ํธ ๊ฐ์ง |
| RAG ๊ธฐ๋ฐ ๊ฒฝ์ ์ง์ | "์ด๋ฒ ์ฃผ ๊ฐ์ฅ ์ํํ ํ๋ก์ ํธ๋?" ๊ฐ์ ์ง๋ฌธ์ ๊ทผ๊ฑฐ ๊ธฐ๋ฐ ๋ต๋ณ |
- ์ ๋ ฅ ๋ถ๋ด ์ต์ํ โ ํด๊ทผ๋ณด๊ณ , 1:1, ๋ฉ์ผ, Teams, SharePoint ๋ฑ ๊ธฐ์กด ๋ฐ์ดํฐ ํ๋ฆ ์ฌํ์ฉ
- ์ธํฐํ์ด์ค: Teams ์ง์ + ์ด๋ฉ์ผ ๋ธ๋ฆฌํ + ๋์๋ณด๋ ์์ธ ์กฐํ
- Orchestrator Agent: ์ง๋ฌธ ์๋ ๋ถ๋ฅ โ ๊ถํ ํ์ธ โ ์ ๋ฌธ ์์ด์ ํธ ์กฐํฉ โ ํตํฉ ๋ต๋ณ
- ์ ๋ฌธ ์์ด์ ํธ ๋ถ๋ฆฌ: Daily Report / One-on-One / Project Insight / Morning Brief / Risk Signal / Mail Agent
- Azure ๊ธฐ๋ฐ: Entra ID, Azure OpenAI, Azure AI Search, App Service, Key Vault ์กฐํฉ์ผ๋ก ๋ณด์ยท๊ถํยทM365 ์ฐ๋ ์ถฉ์กฑ
- SharePointยท๋ฉ์ผ ์ฐ๊ฒฐ: ๊ถํ ๊ธฐ๋ฐ ๊ฒ์ + ๋ฏผ๊ฐ์ ๋ณด ํต์ ์ ์ ๋ก RAG ์ง์ ์์ค ํ์ฅ
- ํด์ โ ์คํ ์ฐ๊ฒฐ: ๋ฆฌ์คํฌ ๊ฐ์ง ์ ์กฐ์น ์ ์, ๋ธ๋ฆฌํ์ ์ฐ์ ์์ ํฌํจ, ์ง์ ๋ต๋ณ์ ๊ทผ๊ฑฐ + ํ๋ ์ ์ ๋์ ์ ๊ณต
- MVP ์ฐ์ ์์: ํด๊ทผ๋ณด๊ณ ์์ง โ ๋์๋ณด๋ โ ์ค์ ๋ธ๋ฆฌํ โ ๊ธฐ๋ณธ ๋ฆฌ์คํฌ โ ์ง์์๋ต ์์ผ๋ก ๊ฒ์ฆ
- ์ฑ๊ณต ์กฐ๊ฑด: ๊ธฐ์ ์คํ๋ณด๋ค ์ ๋ ฅ UXยท๊ถํ ์ค๊ณยท์ค๋ช ๊ฐ๋ฅํ ๋ต๋ณยท๊ฐ์ฌ ๊ฐ๋ฅ์ฑ์ด ์ฐ์
- ์ฅ๊ธฐ ๋น์ : ํ๋ก์ ํธ ์ด์ยท์กฐ์ง ๊ฑด๊ฐ๋ยท์์ฌ๊ฒฐ์ ์ง์๊น์ง ํตํฉํ๋ ํ์ฌ ์ด์ OS
ํต์ฌ ๊ฐ์น: ๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ๋ ๋น ๋ฅด๊ณ ์ ํํ ๊ฒฝ์ ํ๋จ



