docs: slack 채널 CRUD 상태 및 IR deck 시스템 현황 문서 추가
This commit is contained in:
parent
e0ea818e79
commit
369a95d7b5
53
journey/plans/251206_slack_channel_table_migration.sql
Normal file
53
journey/plans/251206_slack_channel_table_migration.sql
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
-- Slack 채널 정보 저장 테이블 생성
|
||||||
|
-- 작성일: 2025-12-06
|
||||||
|
-- 목적: Slack 워크스페이스별 채널 정보 및 robeing CRUD 권한 관리
|
||||||
|
-- 마이그레이션 파일 위치: auth-server/migrations/add_slack_channel_table.sql
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS slack_channel (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
slack_workspace_id UUID NOT NULL REFERENCES slack_workspace(id) ON DELETE CASCADE,
|
||||||
|
channel_id VARCHAR(32) NOT NULL, -- Slack 채널 ID (예: C09C98KK2TT)
|
||||||
|
channel_name VARCHAR(255) NOT NULL, -- 채널명 (예: company-x-전체)
|
||||||
|
is_private BOOLEAN NOT NULL DEFAULT false, -- 비공개 채널 여부
|
||||||
|
is_archived BOOLEAN NOT NULL DEFAULT false, -- 아카이브 여부
|
||||||
|
is_member BOOLEAN NOT NULL DEFAULT false, -- robeing 봇이 멤버인지
|
||||||
|
robeing_can_read BOOLEAN NOT NULL DEFAULT false, -- 읽기 가능 여부
|
||||||
|
robeing_can_create BOOLEAN NOT NULL DEFAULT false, -- 전송 가능 여부
|
||||||
|
robeing_can_update BOOLEAN NOT NULL DEFAULT false, -- 수정 가능 여부
|
||||||
|
robeing_can_delete BOOLEAN NOT NULL DEFAULT false, -- 삭제 가능 여부 (현재 미구현)
|
||||||
|
status VARCHAR(32) DEFAULT 'active', -- active, inactive 등
|
||||||
|
metadata JSONB, -- 추가 메타데이터 (용도, 설명 등)
|
||||||
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
UNIQUE(slack_workspace_id, channel_id) -- 워크스페이스 내 채널 ID 중복 방지
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 인덱스 생성
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_slack_channel_workspace ON slack_channel(slack_workspace_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_slack_channel_channel_id ON slack_channel(channel_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_slack_channel_status ON slack_channel(status);
|
||||||
|
|
||||||
|
-- updated_at 자동 업데이트 트리거
|
||||||
|
CREATE OR REPLACE FUNCTION update_slack_channel_updated_at()
|
||||||
|
RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
NEW.updated_at = NOW();
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE TRIGGER trigger_update_slack_channel_updated_at
|
||||||
|
BEFORE UPDATE ON slack_channel
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION update_slack_channel_updated_at();
|
||||||
|
|
||||||
|
-- 코멘트 추가
|
||||||
|
COMMENT ON TABLE slack_channel IS 'Slack 워크스페이스별 채널 정보 및 robeing CRUD 권한 관리';
|
||||||
|
COMMENT ON COLUMN slack_channel.slack_workspace_id IS 'slack_workspace 테이블 참조';
|
||||||
|
COMMENT ON COLUMN slack_channel.channel_id IS 'Slack 채널 ID (예: C09C98KK2TT)';
|
||||||
|
COMMENT ON COLUMN slack_channel.channel_name IS '채널명 (예: company-x-전체)';
|
||||||
|
COMMENT ON COLUMN slack_channel.robeing_can_read IS 'robeing 봇이 채널 메시지 읽기 가능 여부';
|
||||||
|
COMMENT ON COLUMN slack_channel.robeing_can_create IS 'robeing 봇이 채널에 메시지 전송 가능 여부';
|
||||||
|
COMMENT ON COLUMN slack_channel.robeing_can_update IS 'robeing 봇이 채널 메시지 수정 가능 여부';
|
||||||
|
COMMENT ON COLUMN slack_channel.robeing_can_delete IS 'robeing 봇이 채널 메시지 삭제 가능 여부 (현재 미구현)';
|
||||||
|
|
||||||
125
journey/troubleshooting/251206_ir_deck_system_current_status.md
Normal file
125
journey/troubleshooting/251206_ir_deck_system_current_status.md
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
# IR Deck 처리 시스템 현재 상태 분석
|
||||||
|
|
||||||
|
**날짜**: 2025-12-06
|
||||||
|
**작성자**: Auto
|
||||||
|
**관련 파일**:
|
||||||
|
- `rb8001/app/router/ir_deck.py` (377줄)
|
||||||
|
- `rb8001/app/services/ir_deck_analyzer.py` (693줄)
|
||||||
|
- `rb8001/app/services/coldmail_processor.py` (484줄)
|
||||||
|
- `rb8001/app/router/slack_handler.py`
|
||||||
|
- `skill-rag-file/app/api/upload.py`
|
||||||
|
- `skill-rag-file/app/services/text_extractor.py`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 입력 루트별 구현 상태
|
||||||
|
|
||||||
|
### 1. 콜드메일 (이메일)
|
||||||
|
**파일**: `rb8001/app/services/coldmail_processor.py`
|
||||||
|
- **워크플로우**: `coldmail_workflow.py` (LangGraph)
|
||||||
|
- **스케줄러**: `coldmail_briefing.py` (평일 9시 5분)
|
||||||
|
- **분석 엔진**: `ir_analyzer.py` (베이지안 밸류에이션)
|
||||||
|
- **IR deck 평가 연동**: ❌ 없음 (`ir_deck_analyzer.py` 미사용)
|
||||||
|
- **Slack Lists 등록**: ✅ 구현됨 (회사명, 이메일, IR 파일 첨부)
|
||||||
|
- **Slack 채널 메시지**: ✅ 구현됨 (요약 메시지 + 피드백 버튼)
|
||||||
|
|
||||||
|
### 2. Slack 파일 업로드
|
||||||
|
**파일**: `rb8001/app/router/slack_handler.py:58-121`
|
||||||
|
- **처리**: 파일을 skill-rag-file로 업로드
|
||||||
|
- **IR deck 평가 연동**: ❌ 없음 (업로드만 하고 평가 안 함)
|
||||||
|
- **Slack Lists 등록**: ❌ 없음
|
||||||
|
- **쓰레드 처리**: 확인 필요
|
||||||
|
|
||||||
|
### 3. 웹 프론트엔드
|
||||||
|
**파일**: `rb8001/app/router/ir_deck.py`
|
||||||
|
- **엔드포인트**:
|
||||||
|
- `POST /api/ir-deck/upload` - PDF 업로드
|
||||||
|
- `POST /api/ir-deck/evaluate` - 평가 실행
|
||||||
|
- `GET /api/ir-deck/evaluation/{id}` - 결과 조회
|
||||||
|
- `POST /api/ir-deck/chat` - 후속 질문 답변 ✅ 구현됨
|
||||||
|
- `POST /api/ir-deck/feedback` - 피드백 저장
|
||||||
|
- **분석 엔진**: `ir_deck_analyzer.py` (Sequoia Capital 기준)
|
||||||
|
- **후속 질문 답변**: ✅ 구현됨 (RAG 검색 + LLM 답변 생성)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 공통 기능 상태
|
||||||
|
|
||||||
|
### OCR 기능
|
||||||
|
**파일**: `skill-rag-file/app/services/text_extractor.py:136-214`
|
||||||
|
- **구현**: pdftotext → PyPDF2 → OCR(pytesseract) 순서
|
||||||
|
- **품질 휴리스틱**: 저품질 감지 시 강제 OCR
|
||||||
|
- **동작 여부**: 코드는 있으나 실제 동작 확인 필요
|
||||||
|
|
||||||
|
### 중복 검사
|
||||||
|
**파일**: `skill-rag-file/app/api/upload.py:101-139`
|
||||||
|
- **방식**: 파일 해시(SHA256) 기반
|
||||||
|
- **동작**: 중복 파일 발견 시 기존 `document_id` 반환 (멱등성 보장)
|
||||||
|
- **IR 평가 레벨**: `force_reevaluate` 파라미터로 처리 (기본값: false)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 문제점 정리
|
||||||
|
|
||||||
|
### 1. 기능 파편화
|
||||||
|
- **콜드메일**: `ir_analyzer.py` 사용 (베이지안 밸류에이션)
|
||||||
|
- **웹 프론트**: `ir_deck_analyzer.py` 사용 (Sequoia Capital 기준)
|
||||||
|
- **두 분석 엔진이 분리되어 통합 필요**
|
||||||
|
|
||||||
|
### 2. 콜드메일 → IR deck 평가 미연동
|
||||||
|
- 콜드메일은 `ir_analyzer.py`만 사용
|
||||||
|
- `ir_deck_analyzer.py`의 Sequoia Capital 기준 평가 미사용
|
||||||
|
- Slack Lists에 평가 점수/등급 미포함
|
||||||
|
|
||||||
|
### 3. Slack 파일 업로드 → IR deck 평가 미연동
|
||||||
|
- 파일 업로드만 하고 평가 안 함
|
||||||
|
- Slack Lists 등록 안 됨
|
||||||
|
|
||||||
|
### 4. 출력 형식 정리 필요
|
||||||
|
- 콜드메일 채널 메시지 형식 개선 필요
|
||||||
|
- Slack Lists 컬럼 매핑 정리 필요 (문서: `251122_coldmail_slack_lists_column_mapping_spec.md`)
|
||||||
|
|
||||||
|
### 5. 수정 기능 없음
|
||||||
|
- 자연어로 리스트 항목 수정하는 기능 없음
|
||||||
|
|
||||||
|
### 6. 잘못된 등록 방지
|
||||||
|
- 이상하게 올라가는 케이스 방지 로직 필요
|
||||||
|
|
||||||
|
### 7. OCR 동작 확인 필요
|
||||||
|
- 코드는 있으나 실제 동작 여부 불명확
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 확인된 구현 상태
|
||||||
|
|
||||||
|
### ✅ 구현 완료
|
||||||
|
- 웹 프론트엔드 후속 질문 답변 (`/chat` 엔드포인트)
|
||||||
|
- skill-rag-file 중복 검사 (파일 해시 기반)
|
||||||
|
- 콜드메일 Slack Lists 등록
|
||||||
|
- 콜드메일 Slack 채널 메시지
|
||||||
|
|
||||||
|
### ❌ 미구현/미연동
|
||||||
|
- 콜드메일 → IR deck 평가 연동
|
||||||
|
- Slack 파일 업로드 → IR deck 평가 연동
|
||||||
|
- Slack 파일 업로드 → Slack Lists 등록
|
||||||
|
- 자연어 수정 기능
|
||||||
|
- 잘못된 등록 방지 로직
|
||||||
|
|
||||||
|
### ⚠️ 확인 필요
|
||||||
|
- OCR 실제 동작 여부
|
||||||
|
- Slack 리스트 쓰레드 처리
|
||||||
|
- 웹 프론트 중복 검사 (IR 평가 레벨)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 교훈
|
||||||
|
|
||||||
|
### 통합 설계 필요
|
||||||
|
- 입력 루트별로 다른 분석 엔진 사용 → 통합 필요
|
||||||
|
- 공통 IR deck 평가 엔진으로 통합 후, 루트별 어댑터 패턴 적용
|
||||||
|
|
||||||
|
### 기능 파편화 해결
|
||||||
|
- 콜드메일과 웹 프론트가 같은 기능을 다른 방식으로 구현
|
||||||
|
- 공통 서비스 계층으로 추출 필요
|
||||||
|
|
||||||
|
|
||||||
91
journey/troubleshooting/251206_slack_channels_crud_status.md
Normal file
91
journey/troubleshooting/251206_slack_channels_crud_status.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# Slack 채널별 CRUD 작업 현황
|
||||||
|
|
||||||
|
**날짜**: 2025-12-06
|
||||||
|
**작성자**: Auto
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Company-X Team (T09C98KB933) 채널
|
||||||
|
|
||||||
|
| 채널명 | 채널 ID | 공개/비공개 | Create (전송) | Read (읽기) | Update (수정) | Delete (삭제) | 용도 |
|
||||||
|
|--------|---------|------------|--------------|------------|--------------|--------------|------|
|
||||||
|
| company-x-전체 | C09C98KK2TT | 공개 | ✅ | ✅ | ❓ | ❓ | 네이버 뉴스 브리핑, 일일 브리핑 (평일 09:10) |
|
||||||
|
| robeing-team | C09CP4MDX71 | 비공개 | ✅ | ❓ | ❓ | ❓ | Company-X 뉴스 전송 (평일 10:00) |
|
||||||
|
| 콜드메일 | C09LA0D6M1C | 비공개 | ✅ | ❓ | ❓ | ❓ | 콜드메일 처리 결과 전송, Slack Lists 등록 |
|
||||||
|
| 2025-팁스-추천 | C09C3K63E92 | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| 소셜 | C09C98KKYU9 | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| 2025-립스-추천 | C09CAUX6UR2 | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| 새-채널 | C09CPGRAV8Q | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| 오늘전통-6기-1차년도 | C09J74PDY73 | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Robeing (T0925SXPS4D) 채널
|
||||||
|
|
||||||
|
| 채널명 | 채널 ID | 공개/비공개 | Create (전송) | Read (읽기) | Update (수정) | Delete (삭제) | 용도 |
|
||||||
|
|--------|---------|------------|--------------|------------|--------------|--------------|------|
|
||||||
|
| 존재-에이전트-만들기 | C0920L68267 | 공개 | ❓ | ✅ | ❓ | ❓ | 테스트 채널 (conversation_logs 기록) |
|
||||||
|
| test_ro-being | C094DBLHPJQ | 공개 | ✅ | ❓ | ❓ | ❓ | 테스트 채널 (슬랙 메시지 처리 테스트) |
|
||||||
|
| 일반 | C0925SY46CV | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| 랜덤 | C0925SY4SMT | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| 회의록 | C094WMR8MK8 | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| 개발관련일지 | C095J57K8SJ | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| hj_test | C09690S4MFH | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
| team-apl2-devin-support | C0928B9KA21 | 공개 | ❓ | ❓ | ❓ | ❓ | 미사용 (추정) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CRUD 작업 구현 상태
|
||||||
|
|
||||||
|
### Create (메시지 전송)
|
||||||
|
- **구현 위치**: `skill-slack/app/api/endpoints/messages.py` - `POST /send`
|
||||||
|
- **기능**: `chat.postMessage` API 호출
|
||||||
|
- **사용 채널**:
|
||||||
|
- C09C98KK2TT: 네이버 뉴스 브리핑, 일일 브리핑
|
||||||
|
- C09CP4MDX71: Company-X 뉴스
|
||||||
|
- C09LA0D6M1C: 콜드메일 처리 결과
|
||||||
|
- C094DBLHPJQ: 테스트
|
||||||
|
|
||||||
|
### Read (메시지 읽기)
|
||||||
|
- **구현 위치**: `skill-slack/app/services/slack_client.py` - `fetch_channel_messages`, `fetch_thread_messages`
|
||||||
|
- **기능**: `conversations.history`, `conversations.replies` API 호출
|
||||||
|
- **사용 채널**:
|
||||||
|
- C09C98KK2TT: 메시지 읽기 가능 (확인됨)
|
||||||
|
- C0920L68267: conversation_logs 기록
|
||||||
|
|
||||||
|
### Update (메시지 수정)
|
||||||
|
- **구현 위치**: `skill-slack/app/api/endpoints/messages.py` - `POST /update`
|
||||||
|
- **기능**: `chat.update` API 호출
|
||||||
|
- **사용 채널**: 코드상 구현되어 있으나 실제 사용 여부 불명확
|
||||||
|
|
||||||
|
### Delete (메시지 삭제)
|
||||||
|
- **구현 위치**: ❌ 구현 안 됨
|
||||||
|
- **기능**: `chat.delete` API 미구현
|
||||||
|
- **사용 채널**: 없음
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 참고사항
|
||||||
|
|
||||||
|
### 환경변수로 관리되는 채널
|
||||||
|
- `COLDMAIL_CHANNEL_ID`: C09HR9BMT51 (문서에 기록, 실제 채널은 C09LA0D6M1C로 추정)
|
||||||
|
- `NAVERWORKS_BRIEFING_CHANNEL_ID`: C09C98KK2TT
|
||||||
|
- `COMPANY_X_NEWS_CHANNEL_ID`: C09CP4MDX71
|
||||||
|
|
||||||
|
### 스케줄러로 자동 전송되는 채널
|
||||||
|
- C09C98KK2TT: 평일 09:10 네이버 뉴스 브리핑
|
||||||
|
- C09CP4MDX71: 평일 10:00 Company-X 뉴스
|
||||||
|
|
||||||
|
### 비공개 채널 접근
|
||||||
|
- C09CP4MDX71 (robeing-team): 비공개 채널, 봇 토큰으로 접근 가능
|
||||||
|
- C09LA0D6M1C (콜드메일): 비공개 채널, 봇 토큰으로 접근 가능
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 결론
|
||||||
|
|
||||||
|
1. **Create (전송)**: 주요 채널 4개에서 사용 중
|
||||||
|
2. **Read (읽기)**: 일부 채널에서 사용 중
|
||||||
|
3. **Update (수정)**: 구현되어 있으나 사용 여부 불명확
|
||||||
|
4. **Delete (삭제)**: 미구현
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user