From 220d9b77d7745950e205900ad33c2376098964c6 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 30 Sep 2025 21:53:24 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20NAVER=20WORKS=20=EC=BD=9C=EB=93=9C?= =?UTF-8?q?=EB=A9=94=EC=9D=BC=20=EC=9E=90=EB=8F=99=20=EA=B0=90=EC=A7=80=20?= =?UTF-8?q?=EA=B3=84=ED=9A=8D=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20Tailwind?= =?UTF-8?q?=20=EB=AA=A8=EB=B0=94=EC=9D=BC=20=EB=B0=98=EC=9D=91=ED=98=95=20?= =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ...0919_naverworks_slack_03_cold_mail_list.md | 143 ------------------ ..._happybell80_tailwind_mobile_responsive.md | 70 +++++++++ ...0930_naverworks_slack_03_cold_mail_list.md | 81 ++++++++++ 3 files changed, 151 insertions(+), 143 deletions(-) delete mode 100644 troubleshooting/250919_naverworks_slack_03_cold_mail_list.md create mode 100644 troubleshooting/250930_happybell80_tailwind_mobile_responsive.md create mode 100644 troubleshooting/250930_naverworks_slack_03_cold_mail_list.md diff --git a/troubleshooting/250919_naverworks_slack_03_cold_mail_list.md b/troubleshooting/250919_naverworks_slack_03_cold_mail_list.md deleted file mode 100644 index d62792f..0000000 --- a/troubleshooting/250919_naverworks_slack_03_cold_mail_list.md +++ /dev/null @@ -1,143 +0,0 @@ -# NAVER WORKS β†’ Slack 연동 [3/3] μ½œλ“œλ©”μΌ λ¦¬μŠ€νŠΈμ—… - -## λ‚ μ§œ: 2025-09-19 -## μž‘μ„±μž: Claude (51123 μ„œλ²„ κ΄€λ¦¬μž) -## κ΄€λ ¨ μ„œλΉ„μŠ€: rb8001, skill-email, skill-slack(선택) -## μƒνƒœ: λ―Έκ΅¬ν˜„ (02 λ¬Έμ„œ 변경사항 반영) - -## κ΄€λ ¨ λ¬Έμ„œ -- [1/3 κΈ°λ³Έ ꡬ성](./250919_naverworks_slack_01_base_configuration.md) -- [2/3 일일 λΈŒλ¦¬ν•‘](./250919_naverworks_slack_02_daily_briefing.md) - ---- - -## 1. μ½œλ“œλ©”μΌ λ¦¬μŠ€νŠΈμ—… κ°œμš” - -### λͺ©μ  -μŠ€νƒ€νŠΈμ—… μ½œλ“œλ©”μΌμ„ μžλ™μœΌλ‘œ μˆ˜μ§‘ν•˜μ—¬ Slack 리슀트 ν˜•μ‹μœΌλ‘œ 전달 - -### 핡심 κΈ°λŠ₯ -- μ½œλ“œλ©”μΌ νŒ¨ν„΄ 감지 (λ°œμ‹ μž 도메인, 제λͺ© ν‚€μ›Œλ“œ) -- κ΅¬μ‘°ν™”λœ 리슀트 생성 (νšŒμ‚¬λͺ…, λ‹΄λ‹Ήμž, μ œμ•ˆλ‚΄μš©) -- μ²¨λΆ€νŒŒμΌ 정보 ν‘œμ‹œ -- Slack μ§€μ • 채널 μžλ™ ν¬μŠ€νŒ… - ---- - -## 2. κ΅¬ν˜„ 방식 - -### 2.1 트리거 방식 (ꢌμž₯: ν‘Έμ‹œ μ•Œλ¦Ό) -- **ν˜„μž¬ κ³„νš**: 주기적 폴링 -- **ꢌμž₯ λ³€κ²½**: NAVER WORKS ν‘Έμ‹œ μ•Œλ¦Ό - - Developer Consoleμ—μ„œ Webhook URL 등둝 - - μƒˆ 메일 μˆ˜μ‹  μ‹œ μ¦‰μ‹œ μ•Œλ¦Ό - - API 호좜 μ΅œμ†Œν™” - -### 2.2 처리 흐름 (ν˜„ν–‰ κΈ°μ€€ + κ³„νš) -1. μƒˆ 메일 μˆ˜μ‹  이벀트 λ°œμƒ (λ˜λŠ” 주기적 체크) -2. rb8001이 skill-email 호좜 - - ν˜„ν–‰: GET `/messages?provider=naverworks&user_id={UUID}&limit=100` ν›„ ν΄λΌμ΄μ–ΈνŠΈ(receivedTime) κΈ°μ€€ 24μ‹œκ°„ ν•„ν„° - - κ³„νš: POST `/cold-mail-list` (ν•„ν„°Β·κ΅¬μ‘°ν™”κΉŒμ§€ 일괄 처리) -3. μ½œλ“œλ©”μΌ 필터링/ꡬ쑰화 - - ν˜„ν–‰: rb8001μ—μ„œ ν‚€μ›Œλ“œ/도메인 기반 ν•„ν„° ν›„ λͺ©λ‘ ꡬ성 - - κ³„νš: skill-email λ‚΄λΆ€ `filter_cold_mails()`둜 μœ„μž„ -4. Slack ν¬λ§·νŒ… ν›„ 전솑 - - ν˜„ν–‰: rb8001이 Block Kit 직접 ꡬ성 ν›„ 전솑(WebClient) - - κ³„νš: skill-slack POST `/format-cold-mail`둜 포맷 μœ„μž„ -5. 전솑 λŒ€μƒ: λ„€μ΄λ²„μ›μŠ€ 등둝 μ‚¬μš©μž DM(κΈ°λ³Έ) β€” ν•„μš” μ‹œ μ „μš© 채널 μ˜΅μ…˜ - ---- - -## 3. μ½œλ“œλ©”μΌ 필터링 κ·œμΉ™ - -### 3.1 λ°œμ‹ μž 도메인 νŒ¨ν„΄ -```python -COLD_MAIL_DOMAINS = [ - "*.vc", # VC 도메인 - "*capital.com", # νˆ¬μžμ‚¬ - "*ventures.com", # 벀처 캐피털 - "*startup.com" # μŠ€νƒ€νŠΈμ—… -] -``` - -### 3.2 제λͺ© ν‚€μ›Œλ“œ -```python -COLD_MAIL_KEYWORDS = [ - "투자", "μ œμ•ˆ", "ν˜‘μ—…", "νŒŒνŠΈλ„ˆμ‹­", - "investment", "proposal", "partnership" -] -``` - ---- - -## 4. κ΅¬ν˜„ 파일 ꡬ쑰 - -### skill-email ν˜„ν™©/κ³„νš -- ν˜„ν–‰: GET `/messages`둜 NAVER WORKS 메일 쑰회 (λ‚ μ§œ νŒŒλΌλ―Έν„° 미지원 β†’ ν΄λΌμ΄μ–ΈνŠΈ ν•„ν„° ν•„μš”) -- κ³„νš: - - `routers/naverworks_mail.py`: POST `/cold-mail-list` μ—”λ“œν¬μΈνŠΈ - - `services/naverworks_mail_service.py`: `filter_cold_mails()` - - `schemas/naverworks_schemas.py`: ColdMailRequest/Response - - (선택) `models/repositories`둜 μΊμ‹œ ν…Œμ΄λΈ” 뢄리 - -### skill-slack ν˜„ν™©/κ³„νš -- ν˜„ν–‰: μ „μš© 포맷터 μ—”λ“œν¬μΈνŠΈ μ—†μŒ (rb8001이 직접 Block Kit ꡬ성) -- κ³„νš: POST `/format-cold-mail` β€” ν…Œμ΄λΈ” Block Kit(νšŒμ‚¬λͺ… | λ‹΄λ‹Ήμž | μ œμ•ˆ | 첨뢀) - -### rb8001 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ -- μ½œλ“œλ©”μΌ 감지 μ‹œ skill-emailμ—μ„œ 데이터 쑰회 β†’ (ν˜„ν–‰) rb8001이 ν•„ν„°/포맷 β†’ Slack 전솑 -- λΌμš°νŒ…: 기본은 등둝 μ‚¬μš©μž DM, ν•„μš” μ‹œ μ „μš© 채널 λΌμš°νŒ… μ˜΅μ…˜ν™” - ---- - -## 5. κ΅¬ν˜„ 체크리슀트 - -### 5.1 skill-email κ΅¬ν˜„ -- [ ] 응닡 ν›„ receivedTime κΈ°μ€€ ν΄λΌμ΄μ–ΈνŠΈ ν•„ν„° κ΅¬ν˜„(νƒ€μž„μ‘΄/RFC3339 주의) -- [ ] μ½œλ“œλ©”μΌ 필터링/νŒ¨ν„΄ λ§€μΉ­ μ•Œκ³ λ¦¬μ¦˜ (`filter_cold_mails()`) -- [ ] 메일 정보 ꡬ쑰화(νšŒμ‚¬/λ‹΄λ‹Ή/μ œμ•ˆ/첨뢀) -- [ ] (선택) POST `/cold-mail-list` 일괄 처리 μ—”λ“œν¬μΈνŠΈ - -- [ ] λ„€μ΄λ²„μ›μŠ€ 등둝 μ‚¬μš©μž 쑰회(DB)둜 λŒ€μƒμž κ²°μ • -- [ ] skill-email `/messages` 호좜 μ‹œ provider=naverworks만 전달(λ‚ μ§œ νŒŒλΌλ―Έν„° 제거), ν΄λΌμ΄μ–ΈνŠΈ ν•„ν„° 적용 -- [ ] Block Kit 포맷/전솑 (ν˜„ν–‰) λ˜λŠ” skill-slack 포맷터 연계(κ³„νš) -- [ ] λΌμš°νŒ… μ •μ±…: DM κΈ°λ³Έ, 채널 μ˜΅μ…˜ 지원 - -### 5.3 ν‘Έμ‹œ μ•Œλ¦Ό μ„€μ • (ꢌμž₯) -- [ ] NAVER WORKS Webhook URL 등둝 -- [ ] 이벀트 μˆ˜μ‹  μ—”λ“œν¬μΈνŠΈ κ΅¬ν˜„ -- [ ] μ‹€μ‹œκ°„ 처리 둜직 - ---- - -## 6. λ³΄μ•ˆ 및 κ°œμ„ μ‚¬ν•­ - -### 6.1 정보 μ΅œμ†Œν™” -- **문제**: 메일 λ³Έλ¬Έ 전체 λ…ΈμΆœ μœ„ν—˜ -- **ν•΄κ²°**: - - λ°œμ‹ μž, 제λͺ©, νšŒμ‚¬λͺ…λ§Œ ν‘œμ‹œ - - μ²¨λΆ€νŒŒμΌμ€ 파일λͺ…/크기만 - - 상세 λ‚΄μš©μ€ 원본 메일 링크 - -### 6.2 μ²¨λΆ€νŒŒμΌ 처리 -- **문제**: μ•…μ„±μ½”λ“œ μœ„ν—˜ -- **ν•΄κ²°**: - - 직접 λ‹€μš΄λ‘œλ“œ κΈˆμ§€ - - "μ²¨λΆ€νŒŒμΌ 있음" ν‘œμ‹œλ§Œ - - 파일 ν˜•μ‹κ³Ό 크기 μ •λ³΄λ§Œ 제곡 - ---- - -## 7. μ˜ˆμƒ 좜λ ₯ ν˜•μ‹ - -``` -πŸ“¨ μƒˆλ‘œμš΄ μ½œλ“œλ©”μΌ (3건) -━━━━━━━━━━━━━━━━━━━━━━━━━━━ -β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β” -β”‚ νšŒμ‚¬λͺ… β”‚ λ‹΄λ‹Ήμž β”‚ μ œμ•ˆ λ‚΄μš© β”‚ 첨뢀 β”‚ -β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€ -β”‚ ABC Venturesβ”‚ κΉ€λŒ€ν‘œ β”‚ μ‹œλ¦¬μ¦ˆA νˆ¬μžμ œμ•ˆβ”‚ PDF 2κ°œβ”‚ -β”‚ XYZ Capital β”‚ 이과μž₯ β”‚ ν˜‘μ—… λ―ΈνŒ… μš”μ²­ β”‚ - β”‚ -β”‚ 123 Startup β”‚ λ°•λ§€λ‹ˆμ € β”‚ νŒŒνŠΈλ„ˆμ‹­ μ œμ•ˆ β”‚ PPT 1κ°œβ”‚ -β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜ -``` diff --git a/troubleshooting/250930_happybell80_tailwind_mobile_responsive.md b/troubleshooting/250930_happybell80_tailwind_mobile_responsive.md new file mode 100644 index 0000000..1a76431 --- /dev/null +++ b/troubleshooting/250930_happybell80_tailwind_mobile_responsive.md @@ -0,0 +1,70 @@ +# Tailwind CSS λ„μž… 및 λͺ¨λ°”일 λ°˜μ‘ν˜• 문제 ν•΄κ²° + +## 문제 +- Space Times ν™ˆνŽ˜μ΄μ§€ λͺ¨λ°”일(375px)μ—μ„œ TabSection λ“± μ»΄ν¬λ„ŒνŠΈλ“€μ΄ κ°€λ‘œλ‘œ λ„˜μΉ¨ +- μ‚¬μš©μžκ°€ μ˜λ„ν•˜μ§€ μ•Šμ€ κ°€λ‘œ 슀크둀 λ°œμƒ + +## μ‹œλ„ν•œ ν•΄κ²°μ±…λ“€ +### 1μ°¨: κ°œλ³„ μ»΄ν¬λ„ŒνŠΈ CSS μˆ˜μ • +- TabSection.css에 λ―Έλ””μ–΄ 쿼리 μΆ”κ°€ +- width: 100%, overflow-x: hidden 적용 +- 문제: μΌμ‹œμ μœΌλ‘œ 해결됐닀가 λ‹€μ‹œ λ°œμƒ + +### 2μ°¨: μ „μ—­ CSS ν•΄κ²° +- index.css에 μ „μ—­ μŠ€νƒ€μΌ μΆ”κ°€ +```css +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} +body, html { + overflow-x: hidden !important; + max-width: 100% !important; +} +``` +- 문제: CSS μš°μ„ μˆœμœ„ 좩돌둜 λΆˆμ™„μ „ν•œ ν•΄κ²° + +## μ΅œμ’… ν•΄κ²°: Tailwind CSS v3 λ„μž… +### μ„€μΉ˜ +```bash +npm install -D tailwindcss@^3 autoprefixer postcss +``` + +### μ„€μ • 파일 +- tailwind.config.js: content 경둜 μ„€μ • +- postcss.config.js: tailwindcss, autoprefixer ν”ŒλŸ¬κ·ΈμΈ μ„€μ • +- index.css: @tailwind λ””λ ‰ν‹°λΈŒ μΆ”κ°€ + +### μ£Όμš” 변경사항 +1. λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈλ₯Ό Tailwind 버전(TW suffix)으둜 μž¬μž‘μ„± + - TabSection β†’ TabSectionTW + - ServiceCards β†’ ServiceCardsTW + - ContentSection β†’ ContentSectionTW + - Sidebar β†’ SidebarTW + - HeroCarousel β†’ HeroCarouselTW + - SearchSection β†’ SearchSectionTW + +2. CSS 파일 제거, μœ ν‹Έλ¦¬ν‹° 클래슀둜 λŒ€μ²΄ + - λ°˜μ‘ν˜•: sm:, md:, lg: ν”„λ¦¬ν”½μŠ€ μ‚¬μš© + - κ·Έλ¦¬λ“œ: grid grid-cols-1 sm:grid-cols-3 + - ν”Œλ ‰μŠ€λ°•μŠ€: flex flex-col sm:flex-row + +### Tailwind v4 β†’ v3 λ‹€μš΄κ·Έλ ˆμ΄λ“œ +- 초기 Tailwind v4 μ„€μΉ˜ μ‹œ PostCSS ν”ŒλŸ¬κ·ΈμΈ ν˜Έν™˜ 문제 λ°œμƒ +- v3둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜μ—¬ μ•ˆμ •μ„± 확보 + +### SNS λ²„νŠΌ λΈŒλžœλ“œ 색상 적용 +- μΉ΄μΉ΄μ˜€ν†‘: #FEE500 (곡식 λ…Έλž€μƒ‰) +- μΈμŠ€νƒ€κ·Έλž¨: gradient from-[#833ab4] via-[#fd1d1d] to-[#fcb045] +- 유튜브: #FF0000 (곡식 빨간색) + +## κ²°κ³Ό +- 375px λͺ¨λ°”일 ν™”λ©΄μ—μ„œ κ°€λ‘œ 슀크둀 μ™„μ „ 제거 +- λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ 뷰포트 내에 정상 ν‘œμ‹œ +- κΉ”λ”ν•œ μœ ν‹Έλ¦¬ν‹° 클래슀 기반 μŠ€νƒ€μΌλ§ + +## κ΅ν›ˆ +- CSS 좩돌 λ¬Έμ œλŠ” 근본적인 ν•΄κ²°μ±…(Tailwind 같은 μœ ν‹Έλ¦¬ν‹° ν”„λ ˆμž„μ›Œν¬)이 효과적 +- Tailwind v4λŠ” 아직 λΆˆμ•ˆμ •, ν”„λ‘œλ•μ…˜μ€ v3 μ‚¬μš© ꢌμž₯ +- λΈŒλžœλ“œ 색상은 hex μ½”λ“œλ‘œ 직접 μ§€μ • ([#μƒ‰μƒμ½”λ“œ] ν˜•μ‹) \ No newline at end of file diff --git a/troubleshooting/250930_naverworks_slack_03_cold_mail_list.md b/troubleshooting/250930_naverworks_slack_03_cold_mail_list.md new file mode 100644 index 0000000..15a4d9d --- /dev/null +++ b/troubleshooting/250930_naverworks_slack_03_cold_mail_list.md @@ -0,0 +1,81 @@ +# NAVER WORKS β†’ Slack 연동 [3/3] μ½œλ“œλ©”μΌ μžλ™ 감지 및 IR 파일 뢄석 + +## λ‚ μ§œ: 2025-09-30 +## μž‘μ„±μž: Claude (둜컬 개발자) +## μƒνƒœ: κ³„νš + +## λͺ©ν‘œ +NAVER WORKS 메일 쀑 투자 μ œμ•ˆ(μ½œλ“œλ©”μΌ) μˆ˜μ‹  μ‹œ: +1. μžλ™ 감지 및 필터링 +2. Slack μ „μš© 채널에 리슀트 ν¬μŠ€νŒ… + μ²¨λΆ€νŒŒμΌ μ—…λ‘œλ“œ +3. μ²¨λΆ€νŒŒμΌ(IR 자료) skill-rag-file μžλ™ ν•™μŠ΅ +4. AI 뢄석 μš”μ•½ 생성 ν›„ 채널 곡유 + +--- + +## ν˜„μž¬ μƒνƒœ (2025-09-30 μ½”λ“œ 확인) + +### κ΅¬ν˜„ μ™„λ£Œ +- skill-email: `list_messages` (naverworks_provider.py:152), `get_message` (naverworks_provider.py:288), 토큰 κ°±μ‹  (naverworks_provider.py:356) +- skill-rag-file: POST /api/upload (upload.py:29), 포트 8508, PDF/DOCX/DOC/TXT/MD 지원 (config.py:33) +- rb8001: Slack 파일 β†’ skill-rag-file 전솑 (slack_handler.py:52-147, 비동기 병렬) +- rb8001: NAVER WORKS 일일 λΈŒλ¦¬ν•‘ (naverworks_briefing.py:36-256, κΈ΄κΈ‰/계약/결제 ν‚€μ›Œλ“œ) + +### λ―Έκ΅¬ν˜„ (μ½”λ“œ 확인) +- skill-email: `download_attachment` λ©”μ„œλ“œ μ—†μŒ +- rb8001: μ½œλ“œλ©”μΌ(투자/IR) ν•„ν„° 둜직 μ—†μŒ (ν˜„μž¬λŠ” 일반 μ€‘μš” ν‚€μ›Œλ“œλ§Œ) +- rb8001: NAVER WORKS μ²¨λΆ€νŒŒμΌ λ‹€μš΄λ‘œλ“œβ†’rag-file 경둜 μ—†μŒ +- skill-slack: files_upload_v2 μ‚¬μš© μ—†μŒ (chat_postMessage만 μ‚¬μš©, messages.py:49) +- **Slack Lists API**: lists:write, lists:read μŠ€μ½”ν”„ λ―Έμ„€μ •, κ΅¬ν˜„ μ—†μŒ (2025λ…„ 9μ›” 곡개) + +--- + +## κ΅¬ν˜„ κ³„νš + +### μ½œλ“œλ©”μΌ 필터링 (Incremental Naive Bayes) +1. **초기 Prior**: DB `coldmail_classifier` ν…Œμ΄λΈ” (word, coldmail_count, normal_count), 도메인(`*.vc`: 0.9), ν‚€μ›Œλ“œ(`투자`: 0.8) μ‹œλ“œ +2. **νŠΉμ§• μΆ”μΆœ**: 제λͺ©+λ°œμ‹ μž 도메인 β†’ 토큰화 +3. **ν™•λ₯  계산**: P(μ½œλ“œλ©”μΌ|단어) = P(단어|μ½œλ“œλ©”μΌ) Γ— P(μ½œλ“œλ©”μΌ) / P(단어), μž„κ³„κ°’ > 0.7 +4. **Slack ν”Όλ“œλ°±**: "IR 맞음 βœ…" / "μ•„λ‹˜ ❌" λ²„νŠΌ, 클릭 μ‹œ DB μΉ΄μš΄ν„° μ—…λ°μ΄νŠΈ +5. **Prior κ°±μ‹ **: 맀일 8μ‹œ μŠ€μΌ€μ€„λŸ¬, ν”Όλ“œλ°± 반영 ν›„ μž¬λΆ„λ₯˜ +6. **μ²¨λΆ€νŒŒμΌ 쑰건**: PDF μš°μ„  처리 + +### 처리 흐름 +1. 맀일 8μ‹œ rb8001 μŠ€μΌ€μ€„λŸ¬ β†’ skill-email list_messages (졜근 24μ‹œκ°„) +2. μ½œλ“œλ©”μΌ 필터링 (rb8001, Naive Bayes), μ²¨λΆ€νŒŒμΌ μžˆλŠ” κ²ƒλ§Œ +3. μ²¨λΆ€νŒŒμΌ λ‹€μš΄λ‘œλ“œ (NAVER WORKS API) β†’ skill-rag-file μ—…λ‘œλ“œ +4. **IR 파일 νŒŒμ‹±** (skill-rag-file): PDF/DOCX β†’ ν…μŠ€νŠΈ μΆ”μΆœ β†’ semantic chunking β†’ μž„λ² λ”© β†’ ChromaDB μ €μž₯ +5. **핡심 μ§€ν‘œ μΆ”μΆœ** (rb8001, LLM + RAG): 사업 λΆ„μ•Ό, 투자 단계, 맀좜, μ„±μž₯λ₯ , νŒ€ ꡬ성, 기술 μš°μœ„ +6. **κ°€μΉ˜ 평가** (rb8001, Bayesian VC Method): + - Prior: 동일 μ—…μ’…/단계 평균 λ°Έλ₯˜μ—μ΄μ…˜ (DB 쑰회) + - Likelihood: IR μ§€ν‘œ 반영 (μ„±μž₯λ₯ , νŠΉν—ˆ, μ‹œμž₯점유율) + - Posterior: λ°Έλ₯˜μ—μ΄μ…˜ 뢄포 계산 (쀑간값, 신뒰ꡬ간, λΆˆν™•μ‹€μ„±) + - DB μ €μž₯: `startup_valuation` ν…Œμ΄λΈ” +7. **Slack Lists 생성/μ—…λ°μ΄νŠΈ** (slackLists.items.create): + - 컬럼: νšŒμ‚¬λͺ…, λ‹΄λ‹Ήμž, μ œμ•ˆλ‚΄μš©, μ²¨λΆ€νŒŒμΌ, λ°Έλ₯˜μ—μ΄μ…˜, IRμ—¬λΆ€(ν”Όλ“œλ°±) + - ν”Όλ“œλ°±: slackLists.items.update둜 μ—…λ°μ΄νŠΈ +8. **ν•™μŠ΅ 루프**: ν”Όλ“œλ°± μˆ˜μ§‘ β†’ Prior μ—…λ°μ΄νŠΈ β†’ λͺ¨λΈ κ°œμ„  + +--- + +## λ‹€μŒ 단계 + +### FastAPI ꡬ쑰 원칙 +- **main.py**: μ•± 생성, λΌμš°ν„° λ“±λ‘λ§Œ +- **routers/**: μ—”λ“œν¬μΈνŠΈλ³„ 뢄리 +- **services/**: λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 +- **settings.py**: ν™˜κ²½λ³€μˆ˜, URL 생성 + +### κ΅¬ν˜„ μˆœμ„œ +1. **Slack μ•± λ§€λ‹ˆνŽ˜μŠ€νŠΈ μˆ˜μ •**: lists:write, lists:read, files:read μŠ€μ½”ν”„ μΆ”κ°€ β†’ μ•± μž¬μ„€μΉ˜ +2. NAVER WORKS API μ²¨λΆ€νŒŒμΌ λ‹€μš΄λ‘œλ“œ 확인 +3. skill-email: `download_attachment` λ©”μ„œλ“œ μΆ”κ°€ (services/naverworks_provider.py) +4. PostgreSQL: `coldmail_classifier` ν…Œμ΄λΈ” 생성 (word, coldmail_count, normal_count) +5. PostgreSQL: `startup_valuation` ν…Œμ΄λΈ” 생성 (startup_name, valuation_median, valuation_lower, valuation_upper, confidence, metadata JSONB) +6. rb8001: Naive Bayes ν•„ν„° κ΅¬ν˜„ (services/coldmail_filter.py) +7. rb8001: NAVER WORKS μ²¨λΆ€νŒŒμΌ 처리 (services/naverworks_file_processor.py, slack_handler.py:52-147 μ°Έκ³ ) +8. rb8001: IR μ§€ν‘œ μΆ”μΆœ (services/ir_analyzer.py, LLM + RAG) +9. rb8001: Bayesian κ°€μΉ˜ 평가 (services/startup_valuation.py, scipy.stats) +10. rb8001: Slack Lists ν΄λΌμ΄μ–ΈνŠΈ (services/slack_lists_client.py, slackLists API) +11. rb8001: μŠ€μΌ€μ€„λŸ¬ λΌμš°ν„° 등둝 (routers/coldmail_scheduler.py, APScheduler) +12. rb8001: main.py에 λΌμš°ν„°λ§Œ 등둝 (app.include_router) \ No newline at end of file