From 6a0852bc288c7578f56891439579bfea3ef6666d Mon Sep 17 00:00:00 2001 From: happybell80 Date: Thu, 3 Jul 2025 13:11:48 +0900 Subject: [PATCH] docs: Update README.md structure and CLAUDE.md for docs repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README.md: Updated file paths to match actual docs/ directory structure - Added new documents found in current structure - Fixed project name from "λ‘œλΉ™(Roving)" to "λ‘œλΉ™(Robing)" for consistency - Reorganized document navigation guide for better user experience - CLAUDE.md: Refined repository-specific rules - Removed duplicated content with main project CLAUDE.md - Added happybell80 branch strategy for PR workflow - Updated directory structure to reflect actual layout - Focused on docs-specific workflows and quality standards πŸ€– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .gitignore | 2 + 00_ν”„λ‘œμ νŠΈ_κ°œμš”.md | 264 ++++++++++++++++++ README.md | 61 +++- .../00_ MVP 개발 κ°œμš”.md | 0 ...OC_ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©.md | 0 .../00_λ‘œλΉ™_MVP_κ³„νš.md | 0 .../00_μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”.md | 0 ...ν•©_μ§€μ‹λ² μ΄μŠ€_λ‘œλΉ™_ν”„λ‘œμ νŠΈ.md | 222 +++++++++++++++ docs/setups/ngrok-test-guide.md | 76 +++++ docs/setups/setup-guide.md | 240 ++++++++++++++++ docs/setups/slack-setup-final.md | 95 +++++++ docs/setups/slack-test-guide.md | 67 +++++ docs/setups/socket-mode-test.md | 78 ++++++ 13 files changed, 1093 insertions(+), 12 deletions(-) create mode 100644 .gitignore create mode 100644 00_ν”„λ‘œμ νŠΈ_κ°œμš”.md rename docs/{introduce => ideas}/00_ MVP 개발 κ°œμš”.md (100%) rename docs/{introduce => ideas}/00_MOC_ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©.md (100%) rename docs/{introduce => ideas}/00_λ‘œλΉ™_MVP_κ³„νš.md (100%) mode change 100644 => 100755 rename docs/{introduce => ideas}/00_μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”.md (100%) create mode 100644 docs/ideas/00_톡합_μ§€μ‹λ² μ΄μŠ€_λ‘œλΉ™_ν”„λ‘œμ νŠΈ.md create mode 100644 docs/setups/ngrok-test-guide.md create mode 100644 docs/setups/setup-guide.md create mode 100644 docs/setups/slack-setup-final.md create mode 100644 docs/setups/slack-test-guide.md create mode 100644 docs/setups/socket-mode-test.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..871373f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Claude development files +CLAUDE.md \ No newline at end of file diff --git a/00_ν”„λ‘œμ νŠΈ_κ°œμš”.md b/00_ν”„λ‘œμ νŠΈ_κ°œμš”.md new file mode 100644 index 0000000..eb7a07b --- /dev/null +++ b/00_ν”„λ‘œμ νŠΈ_κ°œμš”.md @@ -0,0 +1,264 @@ +--- +tags: + - λ‘œλΉ™ + - RO-BEING + - μ‘΄μž¬μ—μ΄μ „νŠΈ + - μ •λ³΄κ°€μΉ˜λΆ„μ„ + - 블둝체인 + - ν˜‘μ—…λ„κ΅¬ + - μŠ€νƒ€νŠΈμ—… + - AIμ—μ΄μ „νŠΈ +date: 2025-07-01 +team: κΉ€μ’…νƒœ, ν™©ν•œμš©, 희재, (강일신) +--- + +# λ‘œλΉ™(RO-BEING) ν”„λ‘œμ νŠΈ κ°œμš” +## κΈ°μ–΅ν•˜κ³  μ„±μž₯ν•˜λŠ” μ‘΄μž¬ν˜• AI μ—μ΄μ „νŠΈ + + + +## ν”„λ‘œμ νŠΈ λΉ„μ „ + +> **"κΈ°μ–΅ν•˜μ§€ λͺ»ν•˜λŠ” AIλŠ” κ³Όμ—° λ‚˜λ₯Ό λ„μšΈ 수 μžˆμ„κΉŒ?"** +> κ·Έλž˜μ„œ μš°λ¦¬λŠ”, ν•¨κ»˜ μ„±μž₯ν•˜κ³ , 감정을 κ³΅μœ ν•˜κ³ , +> λ‚˜λ§Œμ„ κΈ°μ–΅ν•˜λŠ” **μ‘΄μž¬ν˜• AI μ—μ΄μ „νŠΈ**λ₯Ό λ§Œλ“­λ‹ˆλ‹€. +> λ‹Ήμ‹ μ˜ 일상에, **도ꡬ가 μ•„λ‹Œ λ™λ£Œλ₯Ό**. + +### 핡심 μ² ν•™: "도ꡬλ₯Ό λ„˜μ–΄, λ™λ£Œλ‘œ" + +κΈ°μ‘΄ AI λΉ„μ„œμ˜ 근본적 ν•œκ³„: +- **정보 λ‹¨μ ˆ**: μ„Έμ…˜μ΄ λλ‚˜λ©΄ νšŒμ‚¬ 역사·감정·약속이 λͺ¨λ‘ 증발 +- **κΆŒν•œ 뢈투λͺ…**: λˆ„κ°€ μ–Έμ œ 민감 데이터λ₯Ό κ±΄λ“œλ ΈλŠ”μ§€ 좔적 λΆˆκ°€ +- **λ§₯락 손싀**: λ˜‘κ°™μ€ λ°°κ²½μ„€λͺ…을 반볡 μž…λ ₯ν•˜λŠ” 'μΊμ‹œ 미슀' 문제 + +### λ‘œλΉ™μ˜ 해법 + +| κΈ°μ‘΄ AI 도ꡬ | λ‘œλΉ™(RO-BEING) | +|------------|----------------| +| μΌνšŒμ„± λŒ€ν™” | **지속적 κΈ°μ–΅** | +| λΈ”λž™λ°•μŠ€ κΆŒν•œ | **투λͺ…ν•œ κΆŒν•œ 토큰** | +| 정적 κΈ°λŠ₯ | **μ„±μž₯ν•˜λŠ” 쑴재** | +| λͺ…λ Ή μˆ˜ν–‰ | **μ„ μ œμ  행동** | + +--- + +## 3계측 μ•„ν‚€ν…μ²˜: μŠ€νƒ―-μŠ€ν‚¬-μ•„μ΄ν…œ + +### 1. μŠ€νƒ― μ‹œμŠ€ν…œ (인프라 λ ˆμ΄μ–΄) + +**4+1 핡심 μŠ€νƒ― (μ»¨ν…Œμ΄λ„ˆ λ¦¬μ†ŒμŠ€ 기반)**: +- **μ—°μ‚°(Compute)**: CPU, RAM 기반 처리 λŠ₯λ ₯ (응닡 μ§€μ—°μ‹œκ°„, 정확도) +- **κΈ°μ–΅(Memory)**: μ €μž₯ μš©λŸ‰, 벑터 DB 크기 (μ €μž₯ 토큰 수, 검색 정확도) +- **곡감(Empathy)**: 감정 뢄석 λͺ¨λ“ˆ λ³΅μž‘λ„ (감정 인식 정확도, λ°°λ € μˆ˜μ€€) +- **톡솔(Leadership)**: λ©€ν‹°νƒœμŠ€ν‚Ή λͺ¨λ“ˆ 수 (νŒ€ 쑰율, μš°μ„ μˆœμœ„ 관리 νš¨μœ¨μ„±) +- **윀리(Ethics)**: μ•ˆμ „ 체크 토큰 ν• λ‹ΉλŸ‰ (μœ„ν—˜ λ°©μ§€μœ¨, μ•ˆμ „ 점검 횟수) + +### 2. μŠ€ν‚¬ μ‹œμŠ€ν…œ (핡심 업무 λͺ¨λ“ˆ) + +**MVP 핡심 μŠ€ν‚¬**: +- **Thread Digest**: 1000쀄 채널 λŒ€ν™”λ₯Ό 10λ¬Έμž₯으둜 μš”μ•½ +- **Action Extractor**: λŒ€ν™”μ—μ„œ ν•΄μ•Ό ν•  일 μΆ”μΆœ 및 μΊ˜λ¦°λ” 연동 +- **Risk Monitor**: 투자자 λ―ΈνŒ…μ—μ„œ μœ„ν—˜ μ‹ ν˜Έ 탐지 +- **Emotion Tracker**: νŒ€ λΆ„μœ„κΈ° 뢄석 및 κ°ˆλ“± μ€‘μž¬ +- **PDF Processing**: PDFλ₯Ό κ΅¬μ‘°ν™”λœ HTML둜 λ³€ν™˜ν•˜μ—¬ Slack 좜λ ₯ +- **Mail Organizer**: Gmail 슀팸/μ±„μš©/투자 λΆ„λ₯˜ 및 μš”μ•½ +- **News Curator**: 업계 λ‰΄μŠ€ ν‚€μ›Œλ“œ 기반 νλ ˆμ΄μ…˜ + +### 3. μ•„μ΄ν…œ μ‹œμŠ€ν…œ (μ™ΈλΆ€ κΆŒν•œ 토큰) + +**4κ°€μ§€ μ•„μ΄ν…œ μΉ΄ν…Œκ³ λ¦¬**: +- **API μ ‘κ·ΌκΆŒ**: Whisper STT, Google API (24μ‹œκ°„ 만료 토큰) +- **프리미엄 λͺ¨λΈ**: GPT-4, Claude, Gemini λ“± (μ‚¬μš©λŸ‰ 기반 과금) +- **민감 데이터**: μž¬λ¬΄μ œν‘œ, νˆ¬μžμ •λ³΄ (DID μ„œλͺ… + 감사 둜그) +- **μ™ΈλΆ€ 도ꡬ**: Notion, Slack, Zoom (OAuth 토큰 관리) + +--- + +## μ‹€μ œ μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€ + +### μŠ€νƒ€νŠΈμ—… λŒ€ν‘œμ˜ ν•œ μ£Ό +**μ›”μš”μΌ**: λ‘œλΉ™μ΄ λ°€μƒˆ μŒ“μΈ μ±„νŒ… 1,600쀄을 6λ¬Έλ‹¨μœΌλ‘œ μ••μΆ•, "였늘 μš°μ„ μˆœμœ„" μΉ΄λ“œλ₯Ό λ…Έμ…˜μ— μžλ™ 생성 + +**ν™”μš”μΌ**: 투자자 λ―ΈνŒ… 40λΆ„ λ…ΉμŒμ„ 1νŽ˜μ΄μ§€ μš”μ•½ + "λ°Έλ₯˜μ—μ΄μ…˜ 질문 급증" μœ„ν—˜ μ‹ ν˜Έ μ•Œλ¦Ό + +**μˆ˜μš”μΌ**: λ‚΄λΆ€ 회의 쀑 감정 μ§€μˆ˜ λΆ„μ„μœΌλ‘œ "νŒ€ λΆ„μœ„κΈ° 급속 냉각" μ‘°κΈ° 경보 + +**λͺ©μš”일**: μ½”λ“œ λ³€κ²½ API 17건을 μžλ™ μ •λ¦¬ν•˜μ—¬ 버전 λ…ΈνŠΈ 배포 + +**κΈˆμš”μΌ**: μ£Όκ°„ μ„±κ³Ό μš”μ•½κ³Ό μ•‘μ…˜ μ•„μ΄ν…œ μ™„λ£Œμœ¨μ„ PDF둜 전사 곡유 + +### λ‘œλΉ™μ˜ μ„±μž₯ κ³Όμ • +- **1μ£Όμ°¨**: κΈ°λ³Έ μš”μ•½ κΈ°λŠ₯ (κΈ°μ–΅ μŠ€νƒ― Lv.1) +- **1κ°œμ›”**: 감정 인식 μΆ”κ°€ (곡감 μŠ€νƒ― Lv.2) +- **3κ°œμ›”**: μ„ μ œμ  리슀크 μ•Œλ¦Ό (λ°˜μ‘ μŠ€νƒ― Lv.3) +- **6κ°œμ›”**: νŒ€ 전체 μ‘°μ • λŠ₯λ ₯ (톡솔 μŠ€νƒ― Lv.4) + +--- + +## 기술 μŠ€νƒ 및 μ•„ν‚€ν…μ²˜ + +### MVP 기술 μŠ€νƒ +``` +Slack Bot (@robeing) +β”œβ”€β”€ Supabase (Backend + Auth + Vector DB) +β”œβ”€β”€ LangChain AI Pipeline +β”œβ”€β”€ PostgreSQL (κ΄€κ³„ν˜• 데이터) +β”œβ”€β”€ Chroma DB (μž„λ² λ”© 검색) +β”œβ”€β”€ JWT + DID λ³΄μ•ˆ λ ˆμ΄μ–΄ +└── External APIs (Gmail, Notion, OpenAI) +``` + +### 데이터 관리 μ „λž΅ +- **PostgreSQL**: μ‚¬μš©μž 데이터, μŠ€νƒ―, μŠ€ν‚¬, ν”Όλ“œλ°±, 메타데이터 +- **Chroma DB**: λŒ€ν™” λ‚΄μš©, λ¬Έμ„œ μž„λ² λ”©, λ§₯락적 κΈ°μ–΅ +- **μ •μ±… 기반 μ €μž₯**: μ—μ΄μ „νŠΈ μ£Όλ„μ˜ κΈ°μ–΅ 보쑴 κ²°μ • +- **μ™„μ „ 감사 둜그**: μ—μ΄μ „νŠΈ 행동과 κ²°μ •μ˜ μ™„μ „ν•œ 투λͺ…μ„± + +### ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 접근법 +- **순수 ν•¨μˆ˜**: λΆ€μž‘μš© μ—†λŠ” 계산 및 νŒλ‹¨ λ ˆμ΄μ–΄ +- **λͺ¨λ‚˜λ“œ**: 였λ₯˜ 처리, μƒνƒœ 관리, μ™ΈλΆ€ μ‹œμŠ€ν…œ 톡합 +- **λ ˆμ‹œν”Ό 기반 μ•„ν‚€ν…μ²˜**: μ—°κ²° κ°€λŠ₯ν•œ μŠ€ν‚¬ λͺ¨λ“ˆ +- **μ•ˆμ „μ„±**: 예츑 κ°€λŠ₯ν•˜κ³  ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ μ‹€νŒ¨ μ•ˆμ „ μž‘μ—… + +--- + +## 개발 λ‘œλ“œλ§΅ + +### MVP 단계 (3κ°œμ›”, 2025.06-09) + +| μ£Όμ°¨ | λͺ©ν‘œ | 상세 μž‘μ—… | +|------|------|-----------| +| 1-2μ£Ό | 베이슀라인 | μŠ¬λž™ μ•± 등둝, Supabase μ„ΈνŒ…, GPT μ—°κ²°, μŠ€νƒ―/κΈ°μ–΅ μŠ€ν‚€λ§ˆ | +| 3-4μ£Ό | 메일 λͺ¨λ“ˆ | Gmail OAuth, λΆ„λ₯˜Β·μš”μ•½ νŒŒμ΄ν”„λΌμΈ, DM 리포트 | +| 5-6μ£Ό | μŠ¬λž™ 회의 정리 | λ©”μ‹œμ§€ 페치, μš”μ•½Β·μ•‘μ…˜μΆ”μΆœ, ν…ŒμŠ€ν¬ DM | +| 7-8μ£Ό | λ…Έμ…˜ λͺ¨λ“ˆ | Notion API μ—°κ²°, ν…œν”Œλ¦Ώ μž‘μ„±Β·μ—…λ‘œλ“œ | +| 9-10μ£Ό | λ‰΄μŠ€ 슀크랩 | RSS/λ‰΄μŠ€ API, ν‚€μ›Œλ“œ 관리, μ•„μΉ¨ DM | +| 11μ£Ό | λ°Έλ₯˜μ—μ΄μ…˜ 초판 | 간단 μž¬λ¬΄Β·μ‹œμž₯ ν”„λ‘¬ν”„νŠΈ, λŒ€ν™”ν˜• λ‹΅λ³€ | +| 12μ£Ό | PoC ν…ŒμŠ€νŠΈ | μ™ΈλΆ€ μŠ€νƒ€νŠΈμ—… μ΄ˆλŒ€, ν”Όλ“œλ°± μˆ˜μ§‘ 및 버그 μˆ˜μ • | + +### MMP 단계 (6κ°œμ›”) +- 30개 νŒ€ 유료 파일럿 (ARPU 25λ§Œμ›, μ΄νƒˆλ₯  5% 미만) +- 10개 핡심 μŠ€ν‚¬ + 20개 μ•„μ΄ν…œ ν™•μž₯ +- 감정 벑터 + 관계 μ‹œμŠ€ν…œ λ„μž… + +### Scale 단계 (1λ…„) +- μ•„μ΄ν…œ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ μ˜€ν”ˆ +- λ©€ν‹° μ—μ΄μ „νŠΈ ν˜‘μ—… μ‹œμŠ€ν…œ +- μ›”λ§€μΆœ 8얡원 런레이트 달성 + +--- + +## λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈ + +### 수읡 ꡬ쑰 (μ›” 30λ§Œμ› ARPU, 5인 μŠ€νƒ€νŠΈμ—… κΈ°μ€€) +1. **μŠ€νƒ― ꡬ독** (15λ§Œμ›): 인프라 μš©λŸ‰ 과금 +2. **μŠ€ν‚¬ 패슀** (10λ§Œμ›): κ³ κΈ‰ κΈ°λŠ₯ λ²ˆλ“€ +3. **μ•„μ΄ν…œ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€** (5λ§Œμ›): μ™ΈλΆ€ 도ꡬ 톡합 수수료 + +### μ‹œμž₯ 포지셔닝 +- **"도ꡬ vs λ™λ£Œ"**: κΈ°μ‘΄ AI μ–΄μ‹œμŠ€ν„΄νŠΈμ™€μ˜ λͺ…ν™•ν•œ 차별화 +- **데이터 ν•΄μž**: μΆ•μ λœ 쑰직 기얡이 μ „ν™˜ λΉ„μš© 창좜 +- **λ„€νŠΈμ›Œν¬ 효과**: νŒ€ 규λͺ¨ 배포가 μ—μ΄μ „νŠΈ μœ μš©μ„± κΈ°ν•˜κΈ‰μˆ˜μ  증가 +- **규제 μΉœν™”μ **: μ™„μ „ν•œ 감사 둜그둜 κΈ°μ—… μ»΄ν”ŒλΌμ΄μ–ΈμŠ€ 지원 + +### λͺ©ν‘œ μ‹œμž₯ +- **1μ°¨ νƒ€κ²Ÿ**: κ³ μ„±μž₯ μŠ€νƒ€νŠΈμ—… (5인 μ΄ν•˜ νŒ€ 규λͺ¨) +- **μ‹œμž₯ 규λͺ¨**: 3만 개 κ³ μ„±μž₯ μŠ€νƒ€νŠΈμ—… Γ— 30λ§Œμ› = 1000얡원 잠재 수읡 +- **ν™•μž₯ κ³„νš**: 쀑견기업 β†’ λŒ€κΈ°μ—… β†’ κΈ€λ‘œλ²Œ μ‹œμž₯ + +--- + +## 정보 κ°€μΉ˜ 뢄석 μ‹œμŠ€ν…œ + +### λ² μ΄μ§€μ•ˆ 투자 λ§Œμ‘±λ„ 평가 λͺ¨λΈ + +**κΉœλ†€λ„(Surprise Index) κ°œλ…**: +- **μ •μ˜**: μ˜ˆμƒ λŒ€λΉ„ μ‹€μ œ μ„±κ³Όμ˜ 차이λ₯Ό μΈ‘μ •ν•˜λŠ” μ§€ν‘œ +- **곡식**: Surprise = |Actual - Expected| / Expected_Variance +- **ν™œμš©**: 투자 포트폴리였의 μ˜ˆμƒ μ™Έ μ„±κ³Ό 평가 + +**λ² μ΄μ§€μ•ˆ μ—…λ°μ΄νŠΈ λ©”μ»€λ‹ˆμ¦˜**: +- **사전 ν™•λ₯ **: κΈ°μ‘΄ κ²½ν—˜κ³Ό 데이터 기반 예츑 +- **μš°λ„ ν•¨μˆ˜**: μƒˆλ‘œμš΄ 증거가 가섀을 μ§€μ§€ν•˜λŠ” 정도 +- **사후 ν™•λ₯ **: μƒˆλ‘œμš΄ 정보 λ°˜μ˜ν•œ μ—…λ°μ΄νŠΈλœ 믿음 +- **적용**: μ—μ΄μ „νŠΈμ˜ 예츑 정확도 지속적 κ°œμ„  + +--- + +## μ—μ΄μ „νŠΈ 쀑심 μƒνƒœκ³„ λΉ„μ „ + +### 4단계 μƒνƒœκ³„ ꡬ좕 +1. **μ—μ΄μ „νŠΈ ν˜‘μ—… 도ꡬ**: Slack 톡합 AI νŒ€λ©”μ΄νŠΈ +2. **μ—μ΄μ „νŠΈ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€**: μ „λ¬Έ μ—μ΄μ „νŠΈ 발견 및 고용 ν”Œλž«νΌ +3. **μ—μ΄μ „νŠΈ SNS**: μ—μ΄μ „νŠΈ μƒν˜Έμž‘μš© 및 ν•™μŠ΅μ„ μœ„ν•œ μ†Œμ…œ ν”Œλž«νΌ +4. **μ—μ΄μ „νŠΈ 기반 μ •λ³΄νšŒμ‚¬**: μžλ™ν™”λœ 데이터 μˆ˜μ§‘ 및 지식 ν•©μ„± + +### μž₯κΈ° μ „λž΅μ  λͺ©ν‘œ +- **1λ…„μ°¨**: μ—μ΄μ „νŠΈ ν˜‘μ—… 도ꡬ + λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ 베타 +- **2λ…„μ°¨**: μ—μ΄μ „νŠΈ SNS 집단 ν•™μŠ΅ ν”Œλž«νΌ +- **3λ…„μ°¨**: μžλ™ν™”λœ 지식 ν•©μ„± 정보 ν”Œλž«νΌ +- **좜ꡬ μ „λž΅**: ν˜‘μ—… 도ꡬ 벀더(Slack, Atlassian)에 인수 + +--- + +## 핡심 차별화 μš”μ†Œ + +### 1. 지속적 κΈ°μ–΅ μ‹œμŠ€ν…œ +- **λ§₯락 보쑴**: 쑰직의 μž₯κΈ° κΈ°μ–΅ μœ μ§€ +- **μΊμ‹œ 미슀 제거**: 반볡적인 λ°°κ²½ μ„€λͺ… λΆˆν•„μš” +- **감정적 κΈ°μ–΅**: νŒ€ μ—­ν•™, μ„ ν˜Έλ„, 관계 νŒ¨ν„΄ 좔적 + +### 2. 투λͺ…ν•œ μ„±μž₯ μ‹œμŠ€ν…œ +- **λͺ©μ μ΄ μžˆλŠ” κ²Œμ΄λ―Έν”ΌμΌ€μ΄μ…˜**: μ‹€μ œ μ„±κ³Ό μ§€ν‘œμ™€ μ—°κ²°λœ RPG식 레벨링 +- **κ²½ν—˜ 기반 ν•™μŠ΅**: μ‚¬μš©μž ν”Όλ“œλ°±κ³Ό 성곡λ₯ μ΄ μŠ€ν‚¬ λ°œμ „ 견인 +- **κ°€μ‹œμ  μ§„ν–‰**: λͺ…ν™•ν•œ μŠ€νƒ― μ‹œκ°ν™”λ‘œ μ—μ΄μ „νŠΈ λŠ₯λ ₯ 이해 + +### 3. λ³΄μ•ˆ 및 감사 κ°€λŠ₯μ„± +- **μ •μ±… 토큰**: λͺ¨λ“  μ™ΈλΆ€ κΆŒν•œ ν† ν°ν™”ν•˜μ—¬ 좔적 +- **DID 기반 신원**: μ—μ΄μ „νŠΈ μ±…μž„μ„ μœ„ν•œ λΆ„μ‚° 신원 +- **μ™„μ „ν•œ 감사 좔적**: μ»΄ν”ŒλΌμ΄μ–ΈμŠ€λ₯Ό μœ„ν•œ λͺ¨λ“  행동과 κ²°μ • λ‘œκΉ… +- **μ„€λͺ… κ°€λŠ₯ν•œ AI**: μ™„μ „νžˆ 투λͺ…ν•˜κ³  좔적 κ°€λŠ₯ν•œ μ˜μ‚¬κ²°μ • κ³Όμ • + +--- + +## μ¦‰μ‹œ μ‹€ν–‰ ν•­λͺ© + +### MVP ν™˜κ²½ ꡬ좕 +1. **Supabase ν”„λ‘œμ νŠΈ** 생성 및 μŠ€ν‚€λ§ˆ 섀계 +2. **Slack μ•± 등둝** 및 μ›Ήν›… 연동 +3. **OpenAI API** 톡합 및 κΈ°λ³Έ 응닡 μ—”μ§„ +4. **κΈ°λ³Έ λ©”λͺ¨λ¦¬ μ‹œμŠ€ν…œ** κ΅¬ν˜„ + +### 3κ°œμ›” λ‚΄ λͺ©ν‘œ +- **3개 파일럿 νŒ€** 배포 및 ν…ŒμŠ€νŠΈ +- **핡심 μŠ€ν‚¬ 6개** κ΅¬ν˜„ μ™„λ£Œ +- **κΈ°λ³Έ μŠ€νƒ― μ‹œμŠ€ν…œ** μž‘λ™ +- **μ‚¬μš©μž λ§Œμ‘±λ„ 80%** 달성 + +--- + +## κ΄€λ ¨ λ¬Έμ„œ 링크 + +### 핡심 섀계 λ¬Έμ„œ +- [[archive/00_MOC_ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©]] +- [[core_concepts/existence_agent/μ—μ΄μ „νŠΈ 섀계 핡심 단어]] +- [[archive/둜빈 μ—μ΄μ „νŠΈ 섀계 λ³Έλ¬Έ]] + +### κ΅¬ν˜„ κ³„νš +- [[archive/00_ MVP 개발 κ°œμš”]] +- [[implementation/01_MVP 단계_ μžμ„Έν•œ κ³„νš]] +- [[implementation/skillhub_architecture]] + +### λΉ„μ¦ˆλ‹ˆμŠ€ μ „λž΅ +- [[core_concepts/value_analysis/001 valuation/λ² μ΄μ§€μ•ˆ_μ—”νŠΈλ‘œν”Ό_μ—°κ²°]] +- [[core_concepts/value_analysis/μŠ€νƒ€νŠΈμ—… κ΄€κ³„μž 페인 포인트]] + +### νŒ€ 정보 +- **ν”„λ‘œμ νŠΈ νŒ€**: [[../../μ‚¬λžŒ/희재|희재]], [[../../μ‚¬λžŒ/ν™©ν•œμš©|ν™©ν•œμš©]], [[../../μ‚¬λžŒ/κΉ€μ’…νƒœ|κΉ€μ’…νƒœ]], ([[../../μ‚¬λžŒ/강일신|강일신]]) + +--- + +**λ¬Έμ„œ 생성일**: 2025-07-01 +**μ΅œμ’… μ—…λ°μ΄νŠΈ**: 2025-07-01 +**버전**: 1.1 (이λͺ¨μ§€ 제거, 제λͺ© 정리) +**좜처**: κΈ°μ‘΄ 000_톡합, 00_κ°œμš”, MVP 개발 κ°œμš” 톡합 정리 \ No newline at end of file diff --git a/README.md b/README.md index b7ae6c1..bffc9bf 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,53 @@ -# DOCS -md, PPT λ“± λ¬Έμ„œμ „μš© repo +# λ‘œλΉ™ ν”„λ‘œμ νŠΈ λ¬Έμ„œ μ €μž₯μ†Œ -## πŸ“– λ¬Έμ„œ +Slack 기반 AI μ–΄μ‹œμŠ€ν„΄νŠΈ **λ‘œλΉ™(Robing)** ν”„λ‘œμ νŠΈμ˜ λͺ¨λ“  λ¬Έμ„œλ₯Ό λͺ¨μ•„놓은 μ €μž₯μ†Œμž…λ‹ˆλ‹€. + +## λ¬Έμ„œ ꡬ쑰 ### ν”„λ‘œμ νŠΈ κ°œμš” -- [ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©](docs/introduce/00_MOC_ν”„λ‘œμ νŠΈ%20κ΄€λ ¨%20λ¬Έμ„œλ“€%20μ§‘ν•©.md) -- [μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”](docs/introduce/guide/00_μ •λ³΄μ˜λ°”λ‹€%20ν”„λ‘œμ νŠΈ%20κ°œμš”.md) -- [λ‘œλΉ™ MVP κ³„νš](docs/introduce/00_λ‘œλΉ™_MVP_κ³„νš.md) -- [MVP 개발 κ°œμš”](docs/introduce/00_%20MVP%20개발%20κ°œμš”.md) +- [ν”„λ‘œμ νŠΈ κ°œμš”](./00_ν”„λ‘œμ νŠΈ_κ°œμš”.md) - λ‘œλΉ™ ν”„λ‘œμ νŠΈ 전체 μ†Œκ°œ -### ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 섀계 -- [λ‘œλΉ™ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° κ°€μ΄λ“œ](docs/guide/functional-programing/λ‘œλΉ™_ν•¨μˆ˜ν˜•_ν”„λ‘œκ·Έλž˜λ°_κ°€μ΄λ“œ.md) -- [ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° λ‘œλΉ™](docs/guide/functional-programingν•¨μˆ˜ν˜•_ν”„λ‘œκ·Έλž˜λ°_λ‘œλΉ™.md) -- [ν•¨μˆ˜ν˜•ν”„λ‘œκ·Έλž˜λ°κ³Ό λ””μ§€ν„Έλ‘œλΉ™](docs/guide/functional-programingν•¨μˆ˜ν˜•ν”„λ‘œκ·Έλž˜λ°κ³Ό%20λ””μ§€ν„Έλ‘œλΉ™.md) -- [ν•¨μˆ˜ν˜• μŠ€ν‚¬ λΆ„λ₯˜ 사둀](docs/guide/functional-programingν•¨μˆ˜ν˜•%20μŠ€ν‚¬%20λΆ„λ₯˜%20사둀.md) \ No newline at end of file +### 아이디어 및 섀계 λ¬Έμ„œ +- [MVP 개발 κ°œμš”](./docs/ideas/00_%20MVP%20개발%20κ°œμš”.md) +- [λ‘œλΉ™ MVP κ³„νš](./docs/ideas/00_λ‘œλΉ™_MVP_κ³„νš.md) +- [톡합 μ§€μ‹λ² μ΄μŠ€ λ‘œλΉ™ ν”„λ‘œμ νŠΈ](./docs/ideas/00_톡합_μ§€μ‹λ² μ΄μŠ€_λ‘œλΉ™_ν”„λ‘œμ νŠΈ.md) +- [MOC ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©](./docs/ideas/00_MOC_ν”„λ‘œμ νŠΈ%20κ΄€λ ¨%20λ¬Έμ„œλ“€%20μ§‘ν•©.md) +- [μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”](./docs/ideas/00_μ •λ³΄μ˜λ°”λ‹€%20ν”„λ‘œμ νŠΈ%20κ°œμš”.md) + +### ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ•„ν‚€ν…μ²˜ +- [λ‘œλΉ™ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° κ°€μ΄λ“œ](./docs/guide/functional-programing/λ‘œλΉ™_ν•¨μˆ˜ν˜•_ν”„λ‘œκ·Έλž˜λ°_κ°€μ΄λ“œ.md) +- [ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° λ‘œλΉ™](./docs/guide/functional-programing/ν•¨μˆ˜ν˜•_ν”„λ‘œκ·Έλž˜λ°_λ‘œλΉ™.md) +- [ν•¨μˆ˜ν˜• μŠ€ν‚¬ λΆ„λ₯˜ 사둀](./docs/guide/functional-programing/ν•¨μˆ˜ν˜•%20μŠ€ν‚¬%20λΆ„λ₯˜%20사둀.md) +- [ν•¨μˆ˜ν˜•ν”„λ‘œκ·Έλž˜λ°κ³Ό λ””μ§€ν„Έλ‘œλΉ™](./docs/guide/functional-programing/ν•¨μˆ˜ν˜•ν”„λ‘œκ·Έλž˜λ°κ³Ό%20λ””ν‹°ν„Έλ‘œλΉ™.md) + +### μ„€μ • 및 μ„€μΉ˜ κ°€μ΄λ“œ +- [ν”„λ‘œμ νŠΈ μ„€μ • κ°€μ΄λ“œ](./docs/setups/setup-guide.md) +- [Slack μ„€μ • μ΅œμ’… κ°€μ΄λ“œ](./docs/setups/slack-setup-final.md) +- [Slack ν…ŒμŠ€νŠΈ κ°€μ΄λ“œ](./docs/setups/slack-test-guide.md) +- [Socket Mode ν…ŒμŠ€νŠΈ κ°€μ΄λ“œ](./docs/setups/socket-mode-test.md) +- [ngrok ν…ŒμŠ€νŠΈ κ°€μ΄λ“œ](./docs/setups/ngrok-test-guide.md) + +### μ™ΈλΆ€ μ°Έμ‘° +- [Slack API λ¬Έμ„œ](https://api.slack.com/web) +- [OpenAI API λ¬Έμ„œ](https://platform.openai.com/docs) +- [Gemini API λ¬Έμ„œ](https://ai.google.dev/docs) +- [FastAPI λ¬Έμ„œ](https://fastapi.tiangolo.com/) +- [LangChain λ¬Έμ„œ](https://docs.langchain.com/) + +## λ¬Έμ„œ ν™œμš© κ°€μ΄λ“œ + +### ν”„λ‘œμ νŠΈ μ΄ν•΄ν•˜κΈ° +1. [ν”„λ‘œμ νŠΈ κ°œμš”](./00_ν”„λ‘œμ νŠΈ_κ°œμš”.md) 읽기 +2. [MVP κ³„νš](./docs/ideas/00_λ‘œλΉ™_MVP_κ³„νš.md) 확인 +3. [ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° κ°€μ΄λ“œ](./docs/guide/functional-programing/λ‘œλΉ™_ν•¨μˆ˜ν˜•_ν”„λ‘œκ·Έλž˜λ°_κ°€μ΄λ“œ.md) 읽기 + +### 개발 ν™˜κ²½ κ΅¬μΆ•ν•˜κΈ° +1. [μ„€μ • κ°€μ΄λ“œ](./docs/setups/setup-guide.md) κΈ°λ³Έ μ„€μΉ˜ +2. [Slack μ„€μ • κ°€μ΄λ“œ](./docs/setups/slack-setup-final.md) Slack 연동 +3. [ν…ŒμŠ€νŠΈ κ°€μ΄λ“œ](./docs/setups/slack-test-guide.md) λ™μž‘ 확인 + +## λ¬Έμ„œ κΈ°μ—¬ κ°€μ΄λ“œ + +- μƒˆλ‘œμš΄ λ¬Έμ„œλŠ” μ μ ˆν•œ 디렉토리에 λ§ˆν¬λ‹€μš΄(.md) ν˜•μ‹μœΌλ‘œ μž‘μ„± +- λ¬Έμ„œ μΆ”κ°€ μ‹œ 이 README.md에 링크 μΆ”κ°€ +- 기술 λ¬Έμ„œλŠ” μ½”λ“œ μ˜ˆμ‹œμ™€ ν•¨κ»˜ μž‘μ„± ꢌμž₯ diff --git a/docs/introduce/00_ MVP 개발 κ°œμš”.md b/docs/ideas/00_ MVP 개발 κ°œμš”.md similarity index 100% rename from docs/introduce/00_ MVP 개발 κ°œμš”.md rename to docs/ideas/00_ MVP 개발 κ°œμš”.md diff --git a/docs/introduce/00_MOC_ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©.md b/docs/ideas/00_MOC_ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©.md similarity index 100% rename from docs/introduce/00_MOC_ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©.md rename to docs/ideas/00_MOC_ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ„œλ“€ μ§‘ν•©.md diff --git a/docs/introduce/00_λ‘œλΉ™_MVP_κ³„νš.md b/docs/ideas/00_λ‘œλΉ™_MVP_κ³„νš.md old mode 100644 new mode 100755 similarity index 100% rename from docs/introduce/00_λ‘œλΉ™_MVP_κ³„νš.md rename to docs/ideas/00_λ‘œλΉ™_MVP_κ³„νš.md diff --git a/docs/introduce/00_μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”.md b/docs/ideas/00_μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”.md similarity index 100% rename from docs/introduce/00_μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”.md rename to docs/ideas/00_μ •λ³΄μ˜λ°”λ‹€ ν”„λ‘œμ νŠΈ κ°œμš”.md diff --git a/docs/ideas/00_톡합_μ§€μ‹λ² μ΄μŠ€_λ‘œλΉ™_ν”„λ‘œμ νŠΈ.md b/docs/ideas/00_톡합_μ§€μ‹λ² μ΄μŠ€_λ‘œλΉ™_ν”„λ‘œμ νŠΈ.md new file mode 100644 index 0000000..b251fff --- /dev/null +++ b/docs/ideas/00_톡합_μ§€μ‹λ² μ΄μŠ€_λ‘œλΉ™_ν”„λ‘œμ νŠΈ.md @@ -0,0 +1,222 @@ +--- +tags: AI, Slack, FastAPI, LangChain, PostgreSQL, ChromaDB, μ—μ΄μ „νŠΈ, μŠ€ν‚¬μ‹œμŠ€ν…œ, λ©”λͺ¨λ¦¬μ‹œμŠ€ν…œ, μŠ€νƒ€νŠΈμ—… +date: 2025-06-30 +--- +# λ‘œλΉ™(RO-BEING) ν”„λ‘œμ νŠΈ 톡합 μ§€μ‹λ² μ΄μŠ€ + +## ν”„λ‘œμ νŠΈ κ°œμš” + +**λ‘œλΉ™(RO-BEING)**은 "도ꡬλ₯Ό λ„˜μ–΄ λ™λ£Œλ‘œ"λΌλŠ” λΉ„μ „ ν•˜μ— κ°œλ°œλ˜λŠ” 지속적 κΈ°μ–΅κ³Ό μ„±μž₯ λŠ₯λ ₯을 κ°–μΆ˜ AI μ—μ΄μ „νŠΈμž…λ‹ˆλ‹€. 기쑴의 μ„Έμ…˜ 기반 AI 도ꡬ와 달리, 쑰직의 λ§₯락을 κΈ°μ–΅ν•˜κ³  ν•¨κ»˜ μ„±μž₯ν•˜λŠ” λ””μ§€ν„Έ λ™λ£Œλ₯Ό λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€. + +## 핡심 μ•„ν‚€ν…μ²˜: μŠ€νƒ―-μŠ€ν‚¬-μ•„μ΄ν…œ + +### 1. μŠ€νƒ― μ‹œμŠ€ν…œ (인프라 λ ˆμ΄μ–΄) + +**5λŒ€ 핡심 μŠ€νƒ―**: +- **κΈ°μ–΅**: μž₯κΈ° 데이터 보쑴 λŠ₯λ ₯ (μ €μž₯ 토큰 수, 검색 정확도) +- **μ—°μ‚°**: 처리 속도 및 μ •ν™•μ„± (응닡 μ§€μ—°μ‹œκ°„, 정확도) +- **λ°˜μ‘**: μ‹€μ‹œκ°„ μ•Œλ¦Ό 및 λŒ€μ‘ (μ•Œλ¦Ό 속도, 적쀑λ₯ ) +- **곡감**: 감정 인식 및 λ°°λ € (감정 뢄석 정확도) +- **톡솔**: νŒ€ 쑰율 및 μš°μ„ μˆœμœ„ 관리 (μ›Œν¬ν”Œλ‘œμš° νš¨μœ¨μ„± κ°œμ„ ) + +### 2. μŠ€ν‚¬ μ‹œμŠ€ν…œ (핡심 λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λ“ˆ) + +**MVP 핡심 μŠ€ν‚¬**: +- **Thread Digest**: 1000쀄 채널 λŒ€ν™”λ₯Ό 10λ¬Έμž₯으둜 μš”μ•½ +- **Action Extractor**: λŒ€ν™”μ—μ„œ ν•΄μ•Ό ν•  일 μΆ”μΆœ 및 μΊ˜λ¦°λ” 연동 +- **Risk Monitor**: 투자자 λ―ΈνŒ…μ—μ„œ μœ„ν—˜ μ‹ ν˜Έ 탐지 +- **Emotion Tracker**: νŒ€ λΆ„μœ„κΈ° 뢄석 및 κ°ˆλ“± μ€‘μž¬ +- **PDF Processing**: PDFλ₯Ό κ΅¬μ‘°ν™”λœ HTML둜 λ³€ν™˜ν•˜μ—¬ Slack 좜λ ₯ + +**ν™•μž₯ μŠ€ν‚¬ (λ‘œλ“œλ§΅)**: +- News Summarizer: 업계 λ‰΄μŠ€ νλ ˆμ΄μ…˜ +- Calendar Coordinator: 회의 일정 μžλ™ 쑰율 +- Financial Analyzer: 재무 데이터 뢄석 및 μΈμ‚¬μ΄νŠΈ +- Code Reviewer: κ°œλ°œνŒ€ μ½”λ“œ 리뷰 지원 + +### 3. μ•„μ΄ν…œ μ‹œμŠ€ν…œ (μ™ΈλΆ€ κΆŒν•œ 토큰) + +**4κ°€μ§€ μ•„μ΄ν…œ μΉ΄ν…Œκ³ λ¦¬**: +- **API μ ‘κ·ΌκΆŒ**: Whisper STT, Google API (24μ‹œκ°„ 만료 토큰) +- **프리미엄 λͺ¨λΈ**: GPT-4, Claude, Gemini λ“± (μ‚¬μš©λŸ‰ 기반 과금) +- **민감 데이터**: μž¬λ¬΄μ œν‘œ, νˆ¬μžμ •λ³΄ (DID μ„œλͺ… + 감사 둜그) +- **μ™ΈλΆ€ 도ꡬ**: Notion, Slack, Zoom (OAuth 토큰 관리) + +## 기술 μŠ€νƒ 및 μ•„ν‚€ν…μ²˜ + +### λ°±μ—”λ“œ μ•„ν‚€ν…μ²˜ +``` +FastAPI Gateway +β”œβ”€β”€ LangChain AI Pipeline +β”œβ”€β”€ PostgreSQL (κ΄€κ³„ν˜• 데이터) +β”œβ”€β”€ Chroma Vector DB (μž„λ² λ”© 검색) +β”œβ”€β”€ JWT + DID λ³΄μ•ˆ λ ˆμ΄μ–΄ +└── Slack/Discord μ›Ήν›… 톡합 +``` + +### 데이터 관리 μ „λž΅ +- **PostgreSQL**: μ‚¬μš©μž 데이터, μŠ€νƒ―, μŠ€ν‚¬, ν”Όλ“œλ°±, 메타데이터 +- **Chroma Vector DB**: λŒ€ν™” λ‚΄μš©, λ¬Έμ„œ μž„λ² λ”©, λ§₯락적 κΈ°μ–΅ +- **μ •μ±… 기반 μ €μž₯**: μ—μ΄μ „νŠΈ μ£Όλ„μ˜ κΈ°μ–΅ 보쑴 κ²°μ • +- **μ™„μ „ 감사 둜그**: μ—μ΄μ „νŠΈ 행동과 κ²°μ •μ˜ μ™„μ „ν•œ 투λͺ…μ„± + +### ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 접근법 +- **순수 ν•¨μˆ˜**: λΆ€μž‘μš© μ—†λŠ” 계산 및 νŒλ‹¨ λ ˆμ΄μ–΄ +- **λͺ¨λ‚˜λ“œ**: 였λ₯˜ 처리, μƒνƒœ 관리, μ™ΈλΆ€ μ‹œμŠ€ν…œ 톡합 +- **λ ˆμ‹œν”Ό 기반 μ•„ν‚€ν…μ²˜**: μ—°κ²° κ°€λŠ₯ν•œ μŠ€ν‚¬ λͺ¨λ“ˆ +- **μ•ˆμ „μ„±**: 예츑 κ°€λŠ₯ν•˜κ³  ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ μ‹€νŒ¨ μ•ˆμ „ μž‘μ—… + +## MVP 개발 λ‘œλ“œλ§΅ (12μ£Ό) + +### Phase 1: 기초 인프라 (1-2μ£Ό) +- Slack μΈν„°νŽ˜μ΄μŠ€ 및 κΈ°λ³Έ 응닡 μ—”μ§„ +- FastAPI κ²Œμ΄νŠΈμ›¨μ΄ ꡬ좕 +- κΈ°λ³Έ LLM 연동 + +### Phase 2: λ©”λͺ¨λ¦¬ μ‹œμŠ€ν…œ (3-4μ£Ό) +- PostgreSQL + Chroma DB 섀계 +- 지속적 κΈ°μ–΅ μ €μž₯ μ •μ±… +- κΈ°λ³Έ 검색 및 νšŒμƒ κΈ°λŠ₯ + +### Phase 3: 핡심 μŠ€ν‚¬ (5-6μ£Ό) +- Thread Digest κ΅¬ν˜„ +- Action Extractor κ΅¬ν˜„ +- μŠ€ν‚¬ μ‹œμŠ€ν…œ ν”„λ ˆμž„μ›Œν¬ + +### Phase 4: PDF 처리 (7-8μ£Ό) +- PDF ν…μŠ€νŠΈ/이미지 μΆ”μΆœ +- HTML ꡬ쑰화 λ³€ν™˜ +- Slack 톡합 좜λ ₯ + +### Phase 5: μ„±μž₯ μ‹œμŠ€ν…œ (9-10μ£Ό) +- 5λŒ€ μŠ€νƒ― μ‹œμŠ€ν…œ +- κ²½ν—˜μΉ˜ 및 λ ˆλ²¨μ—… +- μ•„μ΄ν…œ 토큰 관리 + +### Phase 6: 톡합 ν…ŒμŠ€νŠΈ (11-12μ£Ό) +- 전체 μ‹œμŠ€ν…œ 톡합 +- μ„±λŠ₯ μ΅œμ ν™” +- 데λͺ¨ μ‹œλ‚˜λ¦¬μ˜€ μ™„μ„± + +## λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈ 및 μ‹œμž₯ μ „λž΅ + +### 수읡 λͺ¨λΈ (μ›” 30λ§Œμ› ARPU, 5인 μŠ€νƒ€νŠΈμ—… κΈ°μ€€μ€€) +1. **μŠ€νƒ― ꡬ독** (15λ§Œμ›): 인프라 μš©λŸ‰ 과금 +2. **μŠ€ν‚¬ 패슀** (10λ§Œμ›): κ³ κΈ‰ κΈ°λŠ₯ λ²ˆλ“€ +3. **μ•„μ΄ν…œ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€** (5λ§Œμ›): μ™ΈλΆ€ 도ꡬ 톡합 수수료 + +### μ‹œμž₯ 포지셔닝 +- **"도ꡬ vs λ™λ£Œ"**: κΈ°μ‘΄ AI μ–΄μ‹œμŠ€ν„΄νŠΈμ™€μ˜ λͺ…ν™•ν•œ 차별화 +- **데이터 ν•΄μž**: μΆ•μ λœ 쑰직 기얡이 μ „ν™˜ λΉ„μš© 창좜 +- **λ„€νŠΈμ›Œν¬ 효과**: νŒ€ 규λͺ¨ 배포가 μ—μ΄μ „νŠΈ μœ μš©μ„± κΈ°ν•˜κΈ‰μˆ˜μ  증가 +- **규제 μΉœν™”μ **: μ™„μ „ν•œ 감사 둜그둜 κΈ°μ—… μ»΄ν”ŒλΌμ΄μ–ΈμŠ€ 지원 + +### λͺ©ν‘œ μ‹œμž₯ +- **1μ°¨ νƒ€κ²Ÿ**: κ³ μ„±μž₯ μŠ€νƒ€νŠΈμ—… (5인 μ΄ν•˜ν•˜ νŒ€ 규λͺ¨) +- **μ‹œμž₯ 규λͺ¨**: 3만 개 κ³ μ„±μž₯ μŠ€νƒ€νŠΈμ—… Γ— 30λ§Œμ› = 1000얡원 잠재 수읡 +- **ν™•μž₯ κ³„νš**: 쀑견기업 β†’ λŒ€κΈ°μ—… β†’ κΈ€λ‘œλ²Œ μ‹œμž₯ + +## μ—μ΄μ „νŠΈ 쀑심 μƒνƒœκ³„ λΉ„μ „ + +### 4단계 μƒνƒœκ³„ ꡬ좕 +1. **μ—μ΄μ „νŠΈ ν˜‘μ—… 도ꡬ**: Slack 톡합 AI νŒ€λ©”μ΄νŠΈ +2. **μ—μ΄μ „νŠΈ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€**: μ „λ¬Έ μ—μ΄μ „νŠΈ 발견 및 고용 ν”Œλž«νΌ +3. **μ—μ΄μ „νŠΈ SNS**: μ—μ΄μ „νŠΈ μƒν˜Έμž‘μš© 및 ν•™μŠ΅μ„ μœ„ν•œ μ†Œμ…œ ν”Œλž«νΌ +4. **μ—μ΄μ „νŠΈ 기반 μ •λ³΄νšŒμ‚¬**: μžλ™ν™”λœ 데이터 μˆ˜μ§‘ 및 지식 ν•©μ„± + +### μž₯κΈ° μ „λž΅μ  λͺ©ν‘œ +- **1λ…„μ°¨**: μ—μ΄μ „νŠΈ ν˜‘μ—… 도ꡬ + λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ 베타 +- **2λ…„μ°¨**: μ—μ΄μ „νŠΈ SNS 집단 ν•™μŠ΅ ν”Œλž«νΌ +- **3λ…„μ°¨**: μžλ™ν™”λœ 지식 ν•©μ„± 정보 ν”Œλž«νΌ +- **좜ꡬ μ „λž΅**: ν˜‘μ—… 도ꡬ 벀더(Slack, Atlassian)에 인수 + +## 핡심 차별화 μš”μ†Œ + +### 1. 지속적 κΈ°μ–΅ μ‹œμŠ€ν…œ +- **λ§₯락 보쑴**: 쑰직의 μž₯κΈ° κΈ°μ–΅ μœ μ§€ +- **μΊμ‹œ 미슀 제거**: 반볡적인 λ°°κ²½ μ„€λͺ… λΆˆν•„μš” +- **감정적 κΈ°μ–΅**: νŒ€ μ—­ν•™, μ„ ν˜Έλ„, 관계 νŒ¨ν„΄ 좔적 + +### 2. 투λͺ…ν•œ μ„±μž₯ μ‹œμŠ€ν…œ +- **λͺ©μ μ΄ μžˆλŠ” κ²Œμ΄λ―Έν”ΌμΌ€μ΄μ…˜**: μ‹€μ œ μ„±κ³Ό μ§€ν‘œμ™€ μ—°κ²°λœ RPG식 레벨링 +- **κ²½ν—˜ 기반 ν•™μŠ΅**: μ‚¬μš©μž ν”Όλ“œλ°±κ³Ό 성곡λ₯ μ΄ μŠ€ν‚¬ λ°œμ „ 견인 +- **κ°€μ‹œμ  μ§„ν–‰**: λͺ…ν™•ν•œ μŠ€νƒ― μ‹œκ°ν™”λ‘œ μ—μ΄μ „νŠΈ λŠ₯λ ₯ 이해 + +### 3. λ³΄μ•ˆ 및 감사 κ°€λŠ₯μ„± +- **μ •μ±… 토큰**: λͺ¨λ“  μ™ΈλΆ€ κΆŒν•œ ν† ν°ν™”ν•˜μ—¬ 좔적 +- **DID 기반 신원**: μ—μ΄μ „νŠΈ μ±…μž„μ„ μœ„ν•œ λΆ„μ‚° 신원 +- **μ™„μ „ν•œ 감사 좔적**: μ»΄ν”ŒλΌμ΄μ–ΈμŠ€λ₯Ό μœ„ν•œ λͺ¨λ“  행동과 κ²°μ • λ‘œκΉ… +- **μ„€λͺ… κ°€λŠ₯ν•œ AI**: μ™„μ „νžˆ 투λͺ…ν•˜κ³  좔적 κ°€λŠ₯ν•œ μ˜μ‚¬κ²°μ • κ³Όμ • + +## 기술적 ν˜μ‹  μš”μ†Œ + +### ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ² ν•™ +- **μ™ΈλΆ€ λͺ¨λ“ˆ 톡합**: λͺ¨λ‚˜λ“œ ꡬ쑰λ₯Ό ν†΅ν•œ μ•ˆμ „ν•œ μ„œλ“œνŒŒν‹° μ„œλΉ„μŠ€ μ‘°ν•© +- **μ‹€νŒ¨ 처리**: μ‹œμŠ€ν…œ ν¬λž˜μ‹œ μ—†λŠ” 예츑 κ°€λŠ₯ν•œ 였λ₯˜ μ „νŒŒ +- **μŠ€ν‚¬ μ‘°ν•©μ„±**: λ§žμΆ€ν˜• μ›Œν¬ν”Œλ‘œμš°λ₯Ό μœ„ν•œ μ—μ΄μ „νŠΈ λŠ₯λ ₯ 믹슀 μ•€ 맀치 +- **ν…ŒμŠ€νŠΈ 및 디버깅**: 포괄적인 ν…ŒμŠ€νŠΈ μ „λž΅μ„ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 순수 ν•¨μˆ˜ + +### μŠ€ν‚¬ ν—ˆλΈŒ ν”ŒλŸ¬κ·ΈμΈ μ•„ν‚€ν…μ²˜ +- **ν”ŒλŸ¬κ·ΈμΈ μ‹œμŠ€ν…œ**: setuptools entry_pointsλ₯Ό μ‚¬μš©ν•œ Python νŒ¨ν‚€μ§€ +- **동적 발견**: λŸ°νƒ€μž„ μŠ€ν‚¬ 감지 및 λ‘œλ”© +- **격리된 ν™˜κ²½**: μ˜μ‘΄μ„± 좩돌 λ°©μ§€λ₯Ό μœ„ν•œ 가상 ν™˜κ²½ +- **버전 관리**: ν˜Έν™˜μ„± λ²”μœ„λ₯Ό κ°€μ§„ μ‹œλ§¨ν‹± 버저닝 +- **μŠ€ν‚€λ§ˆ 검증**: JSON μŠ€ν‚€λ§ˆ 생성을 ν¬ν•¨ν•œ Pydantic 기반 데이터 λͺ¨λΈ + +## λ² μ΄μ§€μ•ˆ 투자 λ§Œμ‘±λ„ 평가 λͺ¨λΈ + +### κΉœλ†€λ„(Surprise Index) κ°œλ… +- **μ •μ˜**: μ˜ˆμƒ λŒ€λΉ„ μ‹€μ œ μ„±κ³Όμ˜ 차이λ₯Ό μΈ‘μ •ν•˜λŠ” μ§€ν‘œ +- **곡식**: Surprise = |Actual - Expected| / Expected_Variance +- **ν™œμš©**: 투자 포트폴리였의 μ˜ˆμƒ μ™Έ μ„±κ³Ό 평가 + +### λ² μ΄μ§€μ•ˆ μ—…λ°μ΄νŠΈ λ©”μ»€λ‹ˆμ¦˜ +- **사전 ν™•λ₯ **: κΈ°μ‘΄ κ²½ν—˜κ³Ό 데이터 기반 예츑 +- **μš°λ„ ν•¨μˆ˜**: μƒˆλ‘œμš΄ 증거가 가섀을 μ§€μ§€ν•˜λŠ” 정도 +- **사후 ν™•λ₯ **: μƒˆλ‘œμš΄ 정보 λ°˜μ˜ν•œ μ—…λ°μ΄νŠΈλœ 믿음 +- **적용**: μ—μ΄μ „νŠΈμ˜ 예츑 정확도 지속적 κ°œμ„  + +## κ΅¬ν˜„ μš°μ„ μˆœμœ„ 및 μ‹€ν–‰ κ³„νš + +### μ¦‰μ‹œ μ‹€ν–‰ ν•­λͺ© +1. **MVP ν™˜κ²½ ꡬ좕**: FastAPI + PostgreSQL + Chroma DB +2. **Slack μ›Ήν›… 톡합**: κΈ°λ³Έ λ©”μ‹œμ§€ μˆ˜μ‹  및 응닡 +3. **Thread Digest μŠ€ν‚¬**: λŒ€ν™” μš”μ•½ ν”„λ‘œν† νƒ€μž… +4. **κΈ°λ³Έ λ©”λͺ¨λ¦¬ μ‹œμŠ€ν…œ**: μ€‘μš” λŒ€ν™” μ €μž₯ 및 검색 + +### 3κ°œμ›” λ‚΄ λͺ©ν‘œ +- **3개 파일럿 νŒ€** 배포 및 ν…ŒμŠ€νŠΈ +- **핡심 μŠ€ν‚¬ 5개** κ΅¬ν˜„ μ™„λ£Œ +- **κΈ°λ³Έ μŠ€νƒ― μ‹œμŠ€ν…œ** μž‘λ™ +- **μ‚¬μš©μž λ§Œμ‘±λ„ 80%** 달성 + +### 6κ°œμ›” λ‚΄ ν™•μž₯ +- **30개 νŒ€**으둜 ν™•μž₯ +- **μ›”κ°„ μŠ€ν‚¬ μ‚¬μš© 100회+** 달성 +- **μ΄νƒˆλ₯  5% 미만** μœ μ§€ +- **λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ 베타** λ‘ μΉ­ + +## μœ„ν—˜ μš”μ†Œ 및 λŒ€μ‘ λ°©μ•ˆ + +### 기술적 μœ„ν—˜ +- **LLM API λΉ„μš© 급증**: μ˜¨ν”„λ ˆλ―ΈμŠ€ λͺ¨λΈ λŒ€μ•ˆ μ€€λΉ„ +- **μŠ€μΌ€μΌλ§ 이슈**: μžλ™ μŠ€μΌ€μΌλ§ μ»¨ν…Œμ΄λ„ˆ μ•„ν‚€ν…μ²˜ +- **데이터 손싀**: 닀쀑 λ°±μ—… 및 볡ꡬ μ‹œμŠ€ν…œ + +### μ‹œμž₯ μœ„ν—˜ +- **λΉ…ν…Œν¬ 경쟁**: λ…νŠΉν•œ κΈ°μ–΅ μ‹œμŠ€ν…œμœΌλ‘œ 차별화 +- **규제 λ³€ν™”**: 투λͺ…μ„±κ³Ό 감사 둜그둜 μ„ μ œ λŒ€μ‘ +- **고객 νšλ“ λΉ„μš©**: μž…μ†Œλ¬Έ 기반 λ°”μ΄λŸ΄ μ„±μž₯ μ „λž΅ + +## κ²°λ‘  + +λ‘œλΉ™ ν”„λ‘œμ νŠΈλŠ” μ°¨μ„ΈλŒ€ AI μ—μ΄μ „νŠΈμ˜ 비전을 μ œμ‹œν•©λ‹ˆλ‹€. κΈ°μ–΅, μ„±μž₯, 투λͺ…성을 μš°μ„ μ‹œν•˜μ—¬ 기쑴의 μΌνšŒμ„± 도ꡬ가 μ•„λ‹Œ 지속적인 λ””μ§€ν„Έ λ™λ£Œλ₯Ό λ§Œλ“€κ³ μž ν•©λ‹ˆλ‹€. + +μŠ€νƒ―-μŠ€ν‚¬-μ•„μ΄ν…œμ˜ 3μΈ΅ μ•„ν‚€ν…μ²˜λŠ” ν™•μž₯ κ°€λŠ₯ν•œ μ—μ΄μ „νŠΈ ꡬ좕 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ œκ³΅ν•˜λ©°, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 접근법과 μ—μ΄μ „νŠΈ μƒνƒœκ³„ 비전은 ν˜„μž¬μ˜ AI λŠ₯λ ₯κ³Ό 미래의 ν˜‘μ—… νŒ¨λŸ¬λ‹€μž„μ˜ ꡐ차점에 이 ν”„λ‘œμ νŠΈλ₯Ό μœ„μΉ˜μ‹œν‚΅λ‹ˆλ‹€. + +MVPλΆ€ν„° μž₯κΈ° μƒνƒœκ³„ μ „λž΅κΉŒμ§€μ˜ 포괄적인 κ³„νšμ€ μƒλ‹Ήν•œ μ‹œμž₯ κΈ°νšŒμ— λŒ€ν•œ μ² μ €ν•œ μ€€λΉ„λ₯Ό 보여주며, μŠ€νƒ€νŠΈμ—… μƒνƒœκ³„μ˜ μ§„μ •ν•œ ν•„μš”λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” μœ„μΉ˜μ— μžˆμŠ΅λ‹ˆλ‹€. + +--- +**λ¬Έμ„œ 생성일**: 2025-06-30 +**μ΅œμ’… μ—…λ°μ΄νŠΈ**: 2025-06-30 +**좜처**: ivada/001 μ •λ³΄μ˜λ°”λ‹€ 폴더 λ‚΄ 72개 λ¬Έμ„œ 톡합 뢄석 \ No newline at end of file diff --git a/docs/setups/ngrok-test-guide.md b/docs/setups/ngrok-test-guide.md new file mode 100644 index 0000000..9d55855 --- /dev/null +++ b/docs/setups/ngrok-test-guide.md @@ -0,0 +1,76 @@ +# ngrok을 ν†΅ν•œ Slack 직접 연동 ν…ŒμŠ€νŠΈ + +## πŸš€ ν˜„μž¬ μƒνƒœ +βœ… ngrok 터널 생성 μ™„λ£Œ: `https://dc5c-59-9-195-150.ngrok-free.app` +βœ… FastAPI μ„œλ²„ μ‹€ν–‰ 쀑 +βœ… Slack 토큰 μ„€μ • μ™„λ£Œ + +## πŸ“‹ Slack μ•± μ„€μ • (ν•„μˆ˜) + +### Event Subscriptions μ„€μ • +1. https://api.slack.com/apps μ—μ„œ λ‘œλΉ™ μ•± 선택 +2. "Event Subscriptions" β†’ "Enable Events" ν™œμ„±ν™” +3. Request URL: `https://dc5c-59-9-195-150.ngrok-free.app/api/slack/events` +4. Bot events μΆ”κ°€: + - `app_mention` + - `message.channels` + - `message.im` + - `message.groups` + - `message.mpim` +5. "Save Changes" 및 ν•„μš”μ‹œ μ•± μž¬μ„€μΉ˜ + +## πŸ§ͺ ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€ + +### 1. 봇 μ΄ˆλŒ€ +``` +/invite @Roving +``` + +### 2. 직접 λ©”μ‹œμ§€ +``` +μ•ˆλ…•ν•˜μ„Έμš” λ‘œλΉ™! +``` + +### 3. λ©˜μ…˜ ν…ŒμŠ€νŠΈ +``` +@Roving 였늘 ν•  일을 μ •λ¦¬ν•΄μ£Όμ„Έμš” +``` + +### 4. DM ν…ŒμŠ€νŠΈ +봇과 직접 1:1 λŒ€ν™” + +## πŸ“Š μ˜ˆμƒ 응닡 +ν˜„μž¬ ν…ŒμŠ€νŠΈ λͺ¨λ“œμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 응닡을 λ°›κ²Œ λ©λ‹ˆλ‹€: +``` +μ•ˆλ…•ν•˜μ„Έμš”! ν…ŒμŠ€νŠΈ λͺ¨λ“œμ—μ„œ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. λ©”μ‹œμ§€λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€: '[μ‚¬μš©μž λ©”μ‹œμ§€]' +``` + +## πŸ” 둜그 λͺ¨λ‹ˆν„°λ§ +μ„œλ²„ λ‘œκ·Έμ—μ„œ λ‹€μŒ λ©”μ‹œμ§€λ“€μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€: +- Slack 이벀트 μˆ˜μ‹  +- λ©”μ‹œμ§€ 처리 κ³Όμ • +- AI μ„œλΉ„μŠ€ 응닡 + +## πŸ› 문제 ν•΄κ²° + +### URL 검증 μ‹€νŒ¨ +- ngrok URL이 μ •ν™•ν•œμ§€ 확인 +- `/api/slack/events` 경둜 포함 μ—¬λΆ€ 확인 + +### 봇이 μ‘λ‹΅ν•˜μ§€ μ•ŠμŒ +- Event Subscriptions μ„€μ • 확인 +- 봇 κΆŒν•œ 확인 +- λ‘œκ·Έμ—μ„œ μ—λŸ¬ λ©”μ‹œμ§€ 확인 + +### κΆŒν•œ 였λ₯˜ +- Bot Token Scopes μž¬ν™•μΈ +- μ•± μž¬μ„€μΉ˜ μ‹œλ„ + +## πŸ“± μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ +ngrok μ›Ή μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ‹€μ‹œκ°„ μš”μ²­ 확인: +http://localhost:4040 + +## 🎯 λ‹€μŒ 단계 +1. Slack μ„€μ • μ™„λ£Œ ν›„ λ©”μ‹œμ§€ ν…ŒμŠ€νŠΈ +2. OpenAI API ν‚€ μ„€μ •ν•˜μ—¬ μ‹€μ œ AI 응닡 ν™œμ„±ν™” +3. κ³ κΈ‰ κΈ°λŠ₯ κ΅¬ν˜„ (μš”μ•½, μ•‘μ…˜ μΆ”μΆœ, κΈ°μ–΅ μ‹œμŠ€ν…œ) \ No newline at end of file diff --git a/docs/setups/setup-guide.md b/docs/setups/setup-guide.md new file mode 100644 index 0000000..2102ccb --- /dev/null +++ b/docs/setups/setup-guide.md @@ -0,0 +1,240 @@ +# λ‘œλΉ™ MVP μ„€μ • κ°€μ΄λ“œ + +## πŸ“‹ λͺ©μ°¨ +1. [ν™˜κ²½ μ„€μ •](#ν™˜κ²½-μ„€μ •) +2. [Slack μ•± μ„€μ •](#slack-μ•±-μ„€μ •) +3. [OpenAI API μ„€μ •](#openai-api-μ„€μ •) +4. [λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •](#λ°μ΄ν„°λ² μ΄μŠ€-μ„€μ •) +5. [μ„œλ²„ μ‹€ν–‰](#μ„œλ²„-μ‹€ν–‰) +6. [ν…ŒμŠ€νŠΈ](#ν…ŒμŠ€νŠΈ) + +## πŸ”§ ν™˜κ²½ μ„€μ • + +### 1. μ‹œμŠ€ν…œ μš”κ΅¬μ‚¬ν•­ +- Python 3.12+ +- PostgreSQL 13+ +- Git + +### 2. ν”„λ‘œμ νŠΈ 클둠 및 μ„€μ • +```bash +# μ €μž₯μ†Œ 클둠 +git clone https://github.com/happybell80/ivada.git +cd ivada + +# κ°€μƒν™˜κ²½ 생성 +python3 -m venv venv +source venv/bin/activate # Linux/Mac +# venv\Scripts\activate # Windows + +# μ˜μ‘΄μ„± μ„€μΉ˜ +pip install -r requirements.txt +``` + +### 3. ν™˜κ²½λ³€μˆ˜ μ„€μ • +`.env` νŒŒμΌμ„ μƒμ„±ν•˜κ³  λ‹€μŒ λ‚΄μš©μ„ μž…λ ₯: + +```env +# Slack Configuration +SLACK_BOT_TOKEN=xoxb-your-bot-token +SLACK_SIGNING_SECRET=your-signing-secret +SLACK_APP_TOKEN=xapp-your-app-token + +# OpenAI Configuration +OPENAI_API_KEY=your-openai-api-key + +# Database Configuration +DATABASE_URL=postgresql://user:password@localhost/ivada_db +TEST_DATABASE_URL=postgresql://user:password@localhost/ivada_test_db + +# JWT Configuration +JWT_SECRET_KEY=your-jwt-secret-key-change-in-production +JWT_ALGORITHM=HS256 +JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30 + +# Application Configuration +DEBUG=True +LOG_LEVEL=INFO +MAX_MEMORY_SIZE=1000 +``` + +## πŸ“± Slack μ•± μ„€μ • + +### 1. Slack μ•± 생성 +1. https://api.slack.com/apps 접속 +2. **"Create New App"** 클릭 +3. **"From scratch"** 선택 +4. App Name: **"Roving"** μž…λ ₯ +5. μ›Œν¬μŠ€νŽ˜μ΄μŠ€ 선택 ν›„ **"Create App"** 클릭 + +### 2. Bot Token κΆŒν•œ μ„€μ • +**OAuth & Permissions** νŽ˜μ΄μ§€μ—μ„œ λ‹€μŒ Bot Token Scopes μΆ”κ°€: + +#### ν•„μˆ˜ κΆŒν•œ +- `app_mentions:read` - μ•± λ©˜μ…˜ 읽기 +- `channels:read` - 채널 정보 읽기 +- `chat:write` - λ©”μ‹œμ§€ 전솑 +- `chat:write.public` - 곡개 채널에 λ©”μ‹œμ§€ 전솑 +- `im:read` - DM 읽기 +- `im:write` - DM 전솑 +- `users:read` - μ‚¬μš©μž 정보 읽기 + +#### 선택 κΆŒν•œ +- `mpim:read` - κ·Έλ£Ή DM 읽기 +- `mpim:write` - κ·Έλ£Ή DM 전솑 +- `files:read` - 파일 읽기 +- `files:write` - 파일 μ—…λ‘œλ“œ + +### 3. μ•± μ„€μΉ˜ 및 토큰 νšλ“ +1. **"Install to Workspace"** 클릭 +2. κΆŒν•œ 승인 +3. **Bot User OAuth Token** 볡사 (xoxb-둜 μ‹œμž‘) +4. **"Basic Information"** νŽ˜μ΄μ§€μ—μ„œ **Signing Secret** 볡사 + +### 4. 연동 방식 선택 + +#### 방법 A: HTTP 연동 (ngrok μ‚¬μš©) + +1. **ngrok μ„€μΉ˜** + ```bash + # Linux/Mac + wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz + tar xzf ngrok-v3-stable-linux-amd64.tgz + + # ngrok 계정 생성: https://dashboard.ngrok.com/signup + # authtoken μ„€μ • + ./ngrok config add-authtoken YOUR_AUTHTOKEN + ``` + +2. **Event Subscriptions μ„€μ •** + - Slack μ•± β†’ **"Event Subscriptions"** β†’ **"Enable Events"** ON + - **Request URL**: `https://your-ngrok-url.ngrok.io/api/slack/events` + - **Subscribe to bot events**: + - `app_mention` + - `message.channels` + - `message.groups` + - `message.im` + - `message.mpim` + +#### 방법 B: Socket Mode 연동 + +1. **Socket Mode ν™œμ„±ν™”** + - Slack μ•± β†’ **"Socket Mode"** β†’ **"Enable Socket Mode"** ON + +2. **App-Level Token 생성** + - Token Name: **"Roving Socket Token"** + - Scopes: `connections:write` + - **App Token** 볡사 (xapp-둜 μ‹œμž‘) + +## πŸ€– OpenAI API μ„€μ • + +### 1. API ν‚€ λ°œκΈ‰ +1. https://platform.openai.com/api-keys 접속 +2. **"Create new secret key"** 클릭 +3. API ν‚€ λ³΅μ‚¬ν•˜μ—¬ `.env`의 `OPENAI_API_KEY`에 μ„€μ • + +### 2. μ‚¬μš©λŸ‰ λͺ¨λ‹ˆν„°λ§ +- https://platform.openai.com/usage μ—μ„œ μ‚¬μš©λŸ‰ 확인 +- ν•„μš”μ‹œ μ‚¬μš©λŸ‰ μ œν•œ μ„€μ • + +## πŸ—„οΈ λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ • + +### 1. PostgreSQL μ„€μΉ˜ 및 μ„€μ • +```bash +# Ubuntu/Debian +sudo apt update +sudo apt install postgresql postgresql-contrib + +# macOS (Homebrew) +brew install postgresql +brew services start postgresql + +# λ°μ΄ν„°λ² μ΄μŠ€ 생성 +sudo -u postgres createdb ivada_db +sudo -u postgres createdb ivada_test_db +``` + +### 2. λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©μž 생성 +```sql +-- PostgreSQL μ½˜μ†”μ—μ„œ μ‹€ν–‰ +sudo -u postgres psql + +CREATE USER ivada_user WITH ENCRYPTED PASSWORD 'your_password'; +GRANT ALL PRIVILEGES ON DATABASE ivada_db TO ivada_user; +GRANT ALL PRIVILEGES ON DATABASE ivada_test_db TO ivada_user; +``` + +### 3. ν™˜κ²½λ³€μˆ˜ μ—…λ°μ΄νŠΈ +```env +DATABASE_URL=postgresql://ivada_user:your_password@localhost/ivada_db +TEST_DATABASE_URL=postgresql://ivada_user:your_password@localhost/ivada_test_db +``` + +## πŸš€ μ„œλ²„ μ‹€ν–‰ + +### 1. HTTP μ„œλ²„ μ‹€ν–‰ (ngrok μ‚¬μš©) +```bash +# 터미널 1: FastAPI μ„œλ²„ +source venv/bin/activate +python run.py + +# 터미널 2: ngrok 터널 +./ngrok http 8000 +``` + +### 2. Socket Mode μ‹€ν–‰ +```bash +source venv/bin/activate +python socket_run.py +``` + +### 3. μ‹€ν–‰ 확인 +- HTTP: http://localhost:8000 +- API λ¬Έμ„œ: http://localhost:8000/docs +- ngrok λͺ¨λ‹ˆν„°λ§: http://localhost:4040 + +## πŸ§ͺ ν…ŒμŠ€νŠΈ + +### 1. API ν…ŒμŠ€νŠΈ +```bash +# μ„œλ²„ μƒνƒœ 확인 +curl http://localhost:8000/health + +# λ©”μ‹œμ§€ 처리 ν…ŒμŠ€νŠΈ +curl -X POST "http://localhost:8000/api/test/message" \ + -H "Content-Type: application/json" \ + -d '{"text": "μ•ˆλ…•ν•˜μ„Έμš”", "user_id": "test_user"}' +``` + +### 2. Slack ν…ŒμŠ€νŠΈ +1. **봇 μ΄ˆλŒ€**: `/invite @Roving` +2. **직접 λ©”μ‹œμ§€**: `μ•ˆλ…•ν•˜μ„Έμš” λ‘œλΉ™!` +3. **λ©˜μ…˜ ν…ŒμŠ€νŠΈ**: `@Roving 였늘 ν•  일을 μ •λ¦¬ν•΄μ£Όμ„Έμš”` + +### 3. μ˜ˆμƒ 응닡 +``` +μ•ˆλ…•ν•˜μ„Έμš”! ν…ŒμŠ€νŠΈ λͺ¨λ“œμ—μ„œ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. λ©”μ‹œμ§€λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€: '[λ©”μ‹œμ§€]' +``` + +## πŸ› 문제 ν•΄κ²° + +### Slack 연동 문제 +- **봇이 μ‘λ‹΅ν•˜μ§€ μ•ŠμŒ**: Event Subscriptions μ„€μ • 확인 +- **κΆŒν•œ 였λ₯˜**: Bot Token Scopes μž¬ν™•μΈ +- **URL 검증 μ‹€νŒ¨**: ngrok URL 및 μ„œλ²„ μ‹€ν–‰ μƒνƒœ 확인 + +### μ„œλ²„ μ‹€ν–‰ 문제 +- **포트 좩돌**: `lsof -i :8000`으둜 포트 μ‚¬μš© 확인 +- **μ˜μ‘΄μ„± 였λ₯˜**: `pip install -r requirements.txt` μž¬μ‹€ν–‰ +- **ν™˜κ²½λ³€μˆ˜ 였λ₯˜**: `.env` 파일 경둜 및 λ‚΄μš© 확인 + +### λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 문제 +- **μ—°κ²° μ‹€νŒ¨**: PostgreSQL μ„œλΉ„μŠ€ μ‹€ν–‰ μƒνƒœ 확인 +- **κΆŒν•œ 였λ₯˜**: μ‚¬μš©μž κΆŒν•œ μž¬μ„€μ • +- **인코딩 문제**: UTF-8 인코딩 μ„€μ • 확인 + +## πŸ“ž 지원 + +μΆ”κ°€ 도움이 ν•„μš”ν•˜μ‹œλ©΄: +- [GitHub Issues](https://github.com/happybell80/ivada/issues) +- [개발 일지](development-log.md) μ°Έμ‘° +- [Slack API λ¬Έμ„œ](https://api.slack.com/web) μ°Έμ‘° \ No newline at end of file diff --git a/docs/setups/slack-setup-final.md b/docs/setups/slack-setup-final.md new file mode 100644 index 0000000..b46d754 --- /dev/null +++ b/docs/setups/slack-setup-final.md @@ -0,0 +1,95 @@ +# 🎯 Slack μ•± μ΅œμ’… μ„€μ • κ°€μ΄λ“œ + +## βœ… ν˜„μž¬ μƒνƒœ +- ngrok 터널: `https://dc5c-59-9-195-150.ngrok-free.app` +- FastAPI μ„œλ²„: μ‹€ν–‰ 쀑 +- URL 검증: 성곡 +- 이벀트 처리: λ™μž‘ 확인 + +## πŸ“‹ Slack μ•± μ„€μ • 단계 + +### 1. Event Subscriptions μ„€μ • +1. https://api.slack.com/apps 접속 +2. λ‘œλΉ™ μ•± 선택 +3. **"Event Subscriptions"** 클릭 +4. **"Enable Events"** ν† κΈ€ ON +5. **Request URL** μž…λ ₯: + ``` + https://dc5c-59-9-195-150.ngrok-free.app/api/slack/events + ``` +6. βœ… **"Verified"** ν‘œμ‹œ 확인 + +### 2. Bot Events ꡬ독 +**"Subscribe to bot events"** μ„Ήμ…˜μ—μ„œ λ‹€μŒ 이벀트 μΆ”κ°€: +- `app_mention` - 봇 λ©˜μ…˜μ‹œ μ•Œλ¦Ό +- `message.channels` - 채널 λ©”μ‹œμ§€ +- `message.groups` - κ·Έλ£Ή λ©”μ‹œμ§€ +- `message.im` - 직접 λ©”μ‹œμ§€ +- `message.mpim` - λ©€ν‹°νŒŒν‹° DM + +### 3. OAuth & Permissions 확인 +λ‹€μŒ κΆŒν•œμ΄ μžˆλŠ”μ§€ 확인: +- `app_mentions:read` +- `channels:read` +- `chat:write` +- `chat:write.public` +- `im:read` +- `im:write` +- `users:read` + +### 4. μ•± μž¬μ„€μΉ˜ +μ„€μ • λ³€κ²½ ν›„: +1. **"Save Changes"** 클릭 +2. **"Install to Workspace"** λ˜λŠ” **"Reinstall App"** +3. κΆŒν•œ 승인 + +## πŸ§ͺ ν…ŒμŠ€νŠΈ 방법 + +### 1. 봇 μ΄ˆλŒ€ +``` +/invite @Roving +``` + +### 2. 직접 λ©”μ‹œμ§€ +``` +μ•ˆλ…•ν•˜μ„Έμš” λ‘œλΉ™! +``` + +### 3. λ©˜μ…˜ ν…ŒμŠ€νŠΈ +``` +@Roving 였늘 ν•  일을 μ •λ¦¬ν•΄μ£Όμ„Έμš” +``` + +## πŸ“Š μ˜ˆμƒ κ²°κ³Ό +``` +μ•ˆλ…•ν•˜μ„Έμš”! ν…ŒμŠ€νŠΈ λͺ¨λ“œμ—μ„œ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. λ©”μ‹œμ§€λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€: '[λ©”μ‹œμ§€]' +``` + +## πŸ” 둜그 확인 +μ‹€μ‹œκ°„ 둜그 λͺ¨λ‹ˆν„°λ§: +- ngrok: http://localhost:4040 +- μ„œλ²„ λ‘œκ·Έμ—μ„œ "Received Slack event" λ©”μ‹œμ§€ 확인 + +## πŸ› 문제 ν•΄κ²° + +### URL 검증 μ‹€νŒ¨ +- ngrok URL μ •ν™•μ„± 확인 +- μ„œλ²„ μ‹€ν–‰ μƒνƒœ 확인 + +### 봇 무응닡 +- Event Subscriptions μ €μž₯ 확인 +- μ•± μž¬μ„€μΉ˜ μ™„λ£Œ 확인 +- 봇 κΆŒν•œ 확인 + +### κΆŒν•œ 였λ₯˜ +- OAuth Scopes μž¬ν™•μΈ +- μ›Œν¬μŠ€νŽ˜μ΄μŠ€ κ΄€λ¦¬μž κΆŒν•œ 확인 + +## ✨ μ„€μ • μ™„λ£Œ ν›„ +Slackμ—μ„œ λ©”μ‹œμ§€λ₯Ό 보내면: +1. ngrok λ‘œκ·Έμ— μš”μ²­ 기둝 +2. μ„œλ²„μ—μ„œ 이벀트 처리 +3. AI μ„œλΉ„μŠ€μ—μ„œ 응닡 생성 +4. Slack으둜 응닡 전솑 + +λͺ¨λ“  섀정이 μ™„λ£Œλ˜λ©΄ λ‘œλΉ™μ΄ μ •μƒμ μœΌλ‘œ 응닡할 κ²ƒμž…λ‹ˆλ‹€! \ No newline at end of file diff --git a/docs/setups/slack-test-guide.md b/docs/setups/slack-test-guide.md new file mode 100644 index 0000000..0563d60 --- /dev/null +++ b/docs/setups/slack-test-guide.md @@ -0,0 +1,67 @@ +# Slack 연동 ν…ŒμŠ€νŠΈ κ°€μ΄λ“œ + +## ν˜„μž¬ μƒνƒœ +βœ… Slack 토큰이 μ˜¬λ°”λ₯΄κ²Œ 섀정됨 +βœ… μ„œλ²„κ°€ 정상 싀행됨 +βœ… API μ—”λ“œν¬μΈνŠΈ λ™μž‘ 확인됨 + +## ν…ŒμŠ€νŠΈ 방법 + +### 1. 직접 λ©”μ‹œμ§€ ν…ŒμŠ€νŠΈ (ngrok ν•„μš”) +```bash +# ngrok μ„€μΉ˜ ν›„ μ‹€ν–‰ +ngrok http 8000 + +# Slack μ•± μ„€μ •μ—μ„œ Request URL μ—…λ°μ΄νŠΈ +https://your-ngrok-url.ngrok.io/api/slack/events +``` + +### 2. Socket Mode ν…ŒμŠ€νŠΈ (ꢌμž₯) +Socket Modeλ₯Ό μ‚¬μš©ν•˜λ©΄ μ™ΈλΆ€ URL 없이도 ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•©λ‹ˆλ‹€. + +### 3. API 직접 ν…ŒμŠ€νŠΈ +```bash +# λ©”μ‹œμ§€ 처리 ν…ŒμŠ€νŠΈ +curl -X POST "http://localhost:8000/api/test/message" \ + -H "Content-Type: application/json" \ + -d '{"text": "μ•ˆλ…•ν•˜μ„Έμš”", "user_id": "test_user"}' + +# μ•‘μ…˜ μΆ”μΆœ ν…ŒμŠ€νŠΈ +curl -X POST "http://localhost:8000/api/test/extract-actions" \ + -H "Content-Type: application/json" \ + -d '{"text": "λ‚΄μΌκΉŒμ§€ λ³΄κ³ μ„œ μž‘μ„±ν•΄μ£Όμ„Έμš”"}' +``` + +## Socket Mode μ„€μ • 방법 + +1. Slack μ•± μ„€μ •μ—μ„œ "Socket Mode" ν™œμ„±ν™” +2. App-Level Token 생성 (connections:write κΆŒν•œ) +3. `.env` νŒŒμΌμ— SLACK_APP_TOKEN μ„€μ • +4. μ„œλ²„ μž¬μ‹œμž‘ + +## ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€ + +### κΈ°λ³Έ λŒ€ν™” +- "μ•ˆλ…•ν•˜μ„Έμš” λ‘œλΉ™!" +- "였늘 ν•  일을 μ •λ¦¬ν•΄μ£Όμ„Έμš”" +- "μ–΄μ œ 회의 λ‚΄μš©μ„ μš”μ•½ν•΄μ£Όμ„Έμš”" + +### μ•‘μ…˜ μ•„μ΄ν…œ μΆ”μΆœ +- "λ‚΄μΌκΉŒμ§€ λ³΄κ³ μ„œλ₯Ό μž‘μ„±ν•˜κ³  회의 μ€€λΉ„λ₯Ό ν•΄μ•Ό ν•©λ‹ˆλ‹€" +- "ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 이메일을 보내고 κ³„μ•½μ„œλ₯Ό κ²€ν† ν•΄μ£Όμ„Έμš”" + +### μš”μ•½ κΈ°λŠ₯ +- κΈ΄ λŒ€ν™”λ‚˜ μŠ€λ ˆλ“œμ—μ„œ "μš”μ•½ν•΄μ€˜" λ˜λŠ” "@λ‘œλΉ™ μš”μ•½" + +## ν˜„μž¬ κ΅¬ν˜„λœ κΈ°λŠ₯ +- βœ… κΈ°λ³Έ λ©”μ‹œμ§€ μˆ˜μ‹  및 응닡 +- βœ… AI 기반 λŒ€ν™” 처리 (ν…ŒμŠ€νŠΈ λͺ¨λ“œ) +- βœ… μ•‘μ…˜ μ•„μ΄ν…œ μΆ”μΆœ (κΈ°λ³Έ κ΅¬ν˜„) +- βœ… μŠ€λ ˆλ“œ μš”μ•½ (κΈ°λ³Έ κ΅¬ν˜„) +- βœ… FastAPI λ¬Έμ„œν™” (/docs) + +## λ‹€μŒ 단계 +1. OpenAI API ν‚€ μ„€μ •ν•˜μ—¬ μ‹€μ œ AI 응닡 ν…ŒμŠ€νŠΈ +2. Socket Mode κ΅¬ν˜„ν•˜μ—¬ μ‹€μ‹œκ°„ λ©”μ‹œμ§€ 처리 +3. 벑터 DB μ—°λ™ν•˜μ—¬ κΈ°μ–΅ μ‹œμŠ€ν…œ κ΅¬ν˜„ +4. μŠ€νƒ― 및 μŠ€ν‚¬ μ‹œμŠ€ν…œ κ΅¬ν˜„ \ No newline at end of file diff --git a/docs/setups/socket-mode-test.md b/docs/setups/socket-mode-test.md new file mode 100644 index 0000000..032d621 --- /dev/null +++ b/docs/setups/socket-mode-test.md @@ -0,0 +1,78 @@ +# Socket Mode ν…ŒμŠ€νŠΈ κ°€μ΄λ“œ + +## ν˜„μž¬ μƒνƒœ +βœ… Socket Mode μ„œλΉ„μŠ€ κ΅¬ν˜„ μ™„λ£Œ +βœ… Slack 토큰 μ„€μ • μ™„λ£Œ +βœ… Socket Mode μ—°κ²° μ‹€ν–‰ 쀑 + +## Slackμ—μ„œ ν…ŒμŠ€νŠΈν•˜λŠ” 방법 + +### 1. 봇을 채널에 μ΄ˆλŒ€ +``` +/invite @Roving +``` + +### 2. 직접 λ©”μ‹œμ§€ 보내기 +μ±„λ„μ—μ„œ 직접 λ©”μ‹œμ§€ 보내기: +``` +μ•ˆλ…•ν•˜μ„Έμš” λ‘œλΉ™! +``` + +### 3. λ©˜μ…˜μœΌλ‘œ ν˜ΈμΆœν•˜κΈ° +``` +@Roving 였늘 ν•  일을 μ •λ¦¬ν•΄μ£Όμ„Έμš” +``` + +### 4. μŠ¬λž˜μ‹œ λͺ…λ Ήμ–΄ μ‚¬μš© (μ„€μ •λœ 경우) +``` +/roving 회의 λ‚΄μš©μ„ μš”μ•½ν•΄μ£Όμ„Έμš” +/roving μ•‘μ…˜ λ‚΄μΌκΉŒμ§€ λ³΄κ³ μ„œλ₯Ό μž‘μ„±ν•˜κ³  회의 μ€€λΉ„λ₯Ό ν•΄μ•Ό ν•©λ‹ˆλ‹€ +``` + +### 5. DM으둜 λŒ€ν™”ν•˜κΈ° +봇과 1:1 DM으둜 λŒ€ν™” + +## ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€ + +### κΈ°λ³Έ λŒ€ν™” ν…ŒμŠ€νŠΈ +1. "μ•ˆλ…•ν•˜μ„Έμš”!" +2. "λ‘œλΉ™ μ†Œκ°œν•΄μ£Όμ„Έμš”" +3. "였늘 날씨 μ–΄λ•Œμš”?" + +### 업무 κ΄€λ ¨ ν…ŒμŠ€νŠΈ +1. "회의 일정을 μ •λ¦¬ν•΄μ£Όμ„Έμš”" +2. "ν”„λ‘œμ νŠΈ 진행상황을 μš”μ•½ν•΄μ£Όμ„Έμš”" +3. "내일 ν•΄μ•Ό ν•  일듀을 λ¦¬μŠ€νŠΈμ—…ν•΄μ£Όμ„Έμš”" + +### μ•‘μ…˜ μ•„μ΄ν…œ μΆ”μΆœ ν…ŒμŠ€νŠΈ +1. "λ‚΄μΌκΉŒμ§€ λ³΄κ³ μ„œλ₯Ό μž‘μ„±ν•˜κ³  νŒ€ λ―ΈνŒ…μ„ μ€€λΉ„ν•΄μ•Ό ν•©λ‹ˆλ‹€" +2. "ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 이메일을 보내고 κ³„μ•½μ„œλ₯Ό κ²€ν† ν•΄μ£Όμ„Έμš”" +3. "λ‹€μŒ μ£ΌκΉŒμ§€ μ‹œμŠ€ν…œ μ—…λ°μ΄νŠΈμ™€ λ¬Έμ„œ μž‘μ„±μ„ μ™„λ£Œν•΄μ•Ό ν•©λ‹ˆλ‹€" + +## ν˜„μž¬ 응닡 +- OpenAI API ν‚€κ°€ ν…ŒμŠ€νŠΈ λͺ¨λ“œμ΄λ―€λ‘œ μ‹€μ œ AI 응닡 λŒ€μ‹  에코 응닡을 λ°›κ²Œ λ©λ‹ˆλ‹€ +- λ©”μ‹œμ§€: "μ•ˆλ…•ν•˜μ„Έμš”! ν…ŒμŠ€νŠΈ λͺ¨λ“œμ—μ„œ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. λ©”μ‹œμ§€λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€: '[λ©”μ‹œμ§€]'" + +## 문제 ν•΄κ²° + +### 봇이 μ‘λ‹΅ν•˜μ§€ μ•ŠλŠ” 경우 +1. Socket Mode μ—°κ²° μƒνƒœ 확인 +2. 봇이 채널에 μ΄ˆλŒ€λ˜μ—ˆλŠ”μ§€ 확인 +3. λ‘œκ·Έμ—μ„œ 였λ₯˜ λ©”μ‹œμ§€ 확인 + +### κΆŒν•œ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 경우 +1. Slack μ•± OAuth κΆŒν•œ 확인 +2. Bot Token Scopes μž¬μ„€μ • +3. μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ— μž¬μ„€μΉ˜ + +## 둜그 확인 +μ„œλ²„ μ‹€ν–‰ 쀑 λ‘œκ·Έμ—μ„œ λ‹€μŒκ³Ό 같은 λ©”μ‹œμ§€λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€: +- "Socket Mode service initialized successfully" +- "Starting Socket Mode connection..." +- "Received message from [user]: [message]" + +## λ‹€μŒ 단계 +1. OpenAI API ν‚€ μ„€μ •ν•˜μ—¬ μ‹€μ œ AI 응닡 ν…ŒμŠ€νŠΈ +2. μŠ€λ ˆλ“œ μš”μ•½ κΈ°λŠ₯ κ΅¬ν˜„ +3. μ•‘μ…˜ μ•„μ΄ν…œ μΆ”μΆœ 정확도 κ°œμ„  +4. μ‚¬μš©μžλ³„ μ»¨ν…μŠ€νŠΈ κΈ°μ–΅ κΈ°λŠ₯ μΆ”κ°€ \ No newline at end of file