DOCS/troubleshooting/250826_slack_id_column_standardization.md
happybell80 29d10943c4 user_preferences 테이블 스키마 수정
- news_keywords: TEXT[] → VARCHAR(128)[]
- email_filter: TEXT[] → VARCHAR(128)[]
- 배열 요소 크기 제한으로 성능 최적화
2025-08-26 23:55:54 +09:00

2.6 KiB

ID 체계 표준화 및 사용자 설정 시스템

작성일: 2025-08-26 22:00

작성자: 51124 서버 담당

상태: 작업 필요

영향: ID 일관성, 사용자 맞춤화


1. Slack ID 컬럼명 불일치

현재 상태

테이블 컬럼명 타입
slack_user_mapping slack_user_id VARCHAR(100)
gmail_tokens slack_id VARCHAR(100)
conversation_logs slack_user_id VARCHAR(100)

해결 방안

DB 스키마 변경

-- gmail_tokens 컬럼명 변경
ALTER TABLE gmail_tokens ADD COLUMN slack_user_id VARCHAR(100);
UPDATE gmail_tokens SET slack_user_id = slack_id;
ALTER TABLE gmail_tokens DROP COLUMN slack_id;

코드 수정 필요

파일 경로 변경 내용
auth-server/models.py slack_id → slack_user_id
robeing-monitor/database.py slack_id → slack_user_id
skill-email/db_client.py slack_id → slack_user_id
rb8001/app/brain/state_client.py gmail_tokens 조회 시 컬럼명

2. 뉴스 키워드 하드코딩 문제

현재 상태

  • rb8001이 ["AI", "기술", "IT"]만 사용 (dm_skill.py:309)
  • 매일 같은 뉴스 반복

해결 방안: user_preferences 테이블

CREATE TABLE user_preferences (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES users(id),
    slack_user_id VARCHAR(100),
    news_keywords VARCHAR(128)[],  -- 뉴스 키워드
    email_filter VARCHAR(128)[],   -- 이메일 필터
    briefing_enabled BOOLEAN DEFAULT true,
    briefing_time TIME DEFAULT '09:00',
    updated_at TIMESTAMP DEFAULT NOW()
);

rb8001 코드 수정

  • dm_skill.py의 get_news_content() 메서드에서 사용자별 키워드 조회
  • 하드코딩된 ["AI", "기술", "IT"] 대신 user_preferences 테이블에서 조회
  • 없으면 기본값 사용

슬랙 명령어 설계

일반 메시지 명령어

  • 설정: "@로빙 뉴스 키워드 설정: 삼성, 반도체, AI"
  • 확인: "@로빙 내 뉴스 키워드"
  • 초기화: "@로빙 뉴스 키워드 초기화"

슬래시 명령어 (대안)

  • /news-keywords set 삼성, 반도체, AI
  • /news-keywords list
  • /news-keywords reset

구현 방법

  1. rb8001이 메시지에서 "뉴스 키워드 설정:" 패턴 감지
  2. user_preferences 테이블에 키워드 저장 (INSERT ON CONFLICT UPDATE)
  3. 다음 브리핑부터 해당 키워드로 뉴스 검색

프론트엔드 연동

  • ActivityPanel 설정 UI에서도 동일하게 user_preferences 수정
  • Gateway API 엔드포인트로 CRUD 구현

작성: 2025-08-26 22:00