# NaverWorks Briefing 'system' 사용자 UUID 오류 **날짜**: 2025-10-16 **작성자**: Claude **관련 파일**: `rb8001/app/skills/naverworks_briefing.py`, `rb8001/app/state/database.py` --- ## 문제 상황 ### 발생 시점 - NaverWorks Daily Briefing 실행 시 (매일 09:00) - 감정 분석 결과 DB 저장 시도 중 (09:00:03.277) ### 에러 로그 ``` {"time":"2025-10-16 09:00:03,277","level":"ERROR","module":"app.state.database"} Failed to save emotion reading: invalid input for query argument $1: 'system' (invalid UUID 'system': length must be between 32..36 characters, got 6) {"time":"2025-10-16 09:00:03,277","level":"WARNING","module":"app.llm.emotion_llm"} Failed to save emotion reading for user system ``` ### 영향 - emotion_reading 테이블 저장 실패 - NaverWorks Briefing 자체는 정상 완료 --- ## 원인 분석 ### 1. 'system' 문자열 전달 **위치**: naverworks_briefing.py:177 (추정) 감정 분석 호출 시 user_id로 'system' 문자열 전달: ```python emotions = await emotion_classifier.classify_emotion(summary_text, user_id="system") ``` ### 2. DB 저장 시 UUID 검증 **위치**: app/state/database.py emotion_reading 테이블의 user_id 컬럼은 UUID 타입: ```sql user_id UUID NOT NULL REFERENCES users(id) ``` ### 3. UUID 변환 실패 asyncpg는 'system' 문자열을 UUID로 변환 불가 (길이 6자 < 32자) --- ## 해결 방안 ### 1. user_id를 nullable로 변경 (DB) **51123 서버에서 실행**: ```sql ALTER TABLE emotion_reading ALTER COLUMN user_id DROP NOT NULL; ``` ### 2. 시스템 사용자 처리 로직 추가 **위치**: app/state/database.py:save_emotion_reading **변경**: ```python async def save_emotion_reading(user_id: str, emotions: List[str], ...): if user_id == "system": user_id = None # nullable로 저장 await conn.execute("INSERT INTO emotion_reading ...") ``` ### 3. 전용 시스템 UUID 생성 (권장) **51123 서버에서 실행**: ```sql -- 전용 시스템 사용자 생성 INSERT INTO users (id, username, email) VALUES ('00000000-0000-0000-0000-000000000000', 'system', 'system@robeing.internal'); ``` **위치**: naverworks_briefing.py **변경**: SYSTEM_USER_UUID 환경변수 사용 --- ## 구현 완료 미구현 (감정 저장 실패만, 브리핑 기능 정상) --- ## 교훈 ### UUID 타입 검증 누락 - 함수 시그니처에서 user_id: str 허용하지만 실제는 UUID 필요 - 교훈: 타입 힌트와 실제 검증 불일치 방지 ### 시스템 사용자 처리 미정의 - 사용자가 아닌 시스템 작업의 user_id 처리 정책 부재 - 교훈: 시스템 사용자는 전용 UUID 또는 nullable 정책 수립 ### DB 제약조건과 코드 불일치 - DB는 NOT NULL이지만 코드는 'system' 문자열 전달 - 교훈: DB 스키마와 코드 로직 동기화 검증 필요 --- ## 참고 문서 - 250826_id_체계_정리_및_conversation_logs_문제_해결.md: UUID vs Slack ID 문제