DOCS/journey/troubleshooting/251223_로빙_일기_시스템_구현_완료.md

4.7 KiB
Raw Blame History

로빙 일기 시스템 구현 완료

날짜: 2025-12-23 작성자: Claude 관련 문서: 로빙 일기 시스템 계획


구현 완료 사항

1. 백엔드 구현 (rb8001)

파일 위치:

  • rb8001/app/state/diary_repository.py - DB 테이블 및 저장/조회 함수
  • rb8001/app/services/diary/aggregator.py - 데이터 집계
  • rb8001/app/services/diary/generator.py - LLM 일기 생성
  • rb8001/app/router/diary_endpoint.py - API 엔드포인트
  • rb8001/app/scheduler/jobs/diary_generator.py - 스케줄러 작업
  • rb8001/main.py - 스케줄러 등록

기능:

  • 매일 오전 2시 자동 일기 생성 (APScheduler cron)
  • 데이터 집계: 대화 로그, 활동 로그, 감정 데이터, 성장 데이터, 이슈 데이터
  • LLM(Gemini)으로 마크다운 형식 일기 생성
  • PostgreSQL robeing_diary 테이블에 저장
  • API: GET /api/diary/{date}?robeing_id=rb8001

2. Admin Dashboard 구현

파일 위치:

  • admin-dashboard/frontend/index.html - 일기 페이지 UI
  • admin-dashboard/frontend/app.js - 일기 목록/상세 로드 함수
  • admin-dashboard/backend/admin_routes.py - 일기 API 프록시
  • admin-dashboard/frontend/styles.css - 일기 스타일

기능:

  • 일기 목록 조회 (최근 30일)
  • 일기 상세 조회 (날짜별)
  • 날짜 입력으로 조회
  • rb8001 API 프록시 (/admin/api/diary/list, /admin/api/diary/{date})

3. 버그 수정

문제: 일기 목록에서 항목 클릭 시 본문이 표시되지 않음

원인: loadDiaryByDate 함수가 IIFE 내부에 있어 전역 스코프에서 접근 불가

해결: loadDiary, loadDiaryByDate 함수를 IIFE 밖으로 이동하여 전역 함수로 노출

커밋: d734322 - fix: 일기 클릭 시 본문 표시 안 되는 문제 수정 (전역 함수로 노출)


알려진 이슈

robeing 테이블 스키마 불일치

문제: DiaryAggregator._get_growth() 함수에서 robeing_id 컬럼을 조회하나 실제 테이블에는 해당 컬럼이 없음

영향: 성장 데이터 조회 실패 (일기 생성에는 영향 없음, 빈 stats로 저장)

해결 필요: robeing 테이블 스키마 확인 후 쿼리 수정 또는 테이블 스키마 수정


테스트 결과

일기 생성 테스트 (2025-12-22)

docker exec rb8001 python /code/scripts/generate_diary_manual.py

결과:

  • 일기 생성 성공
  • DB 저장 성공
  • API 조회 정상 동작
  • ⚠️ 성장 데이터 조회 실패 (robeing_id 컬럼 없음)

API 테스트

curl "http://localhost:8001/api/diary/2025-12-22?robeing_id=rb8001"

응답:

{
  "date": "2025-12-22",
  "robeing_id": "rb8001",
  "content": "# 로빙 일기  2025-12-22\n\n## 오늘 한 일\n...",
  "summary": "# 로빙 일기  2025-12-22",
  "dominant_emotion": "surprise",
  "stats": {}
}

브라우저 UI 테스트

  • 일기 탭 표시 확인
  • 일기 목록 로드 확인
  • 일기 클릭 시 본문 표시 확인 (수정 후)

구현 단계별 완료 현황

  1. DB 테이블 생성: robeing_diary, activity_log 테이블 생성 완료
  2. 활동 로그 기록: 스킬 실행 시 자동 기록 로직 미구현 (수동 기록 가능)
  3. Diary Aggregator 구현: 모든 데이터 소스 집계 완료
  4. 일기 생성 로직: LLM으로 일기 텍스트 생성 완료
  5. 스케줄러 등록: 매일 오전 2시 자동 생성 등록 완료
  6. API 엔드포인트: /api/diary/{date} 구현 완료
  7. 관리자 대시보드: 일기 목록/상세 페이지 추가 완료
  8. DOCS 동기화 스크립트: 미구현 (선택적)

교훈

1. 전역 함수 노출 필요성

  • onclick 핸들러에서 호출하는 함수는 전역 스코프에 있어야 함
  • IIFE 내부 함수는 외부에서 접근 불가
  • 해결: 필요한 함수는 IIFE 밖으로 분리하여 전역 함수로 노출

2. API 응답 필드명 일관성

  • 백엔드 API는 content 필드 사용
  • 프론트엔드에서 content || full_content로 호환 처리
  • 권장: API 스펙 문서화 및 필드명 통일

3. DB 스키마 검증

  • ORM 모델과 실제 테이블 스키마 불일치 가능성
  • 권장: 테이블 생성 시 스키마 검증 로직 추가 또는 마이그레이션 스크립트 사용

참고

  • 로빙 일기 시스템 계획
  • rb8001/app/services/diary/aggregator.py - 데이터 집계 로직
  • rb8001/app/services/diary/generator.py - LLM 일기 생성 로직
  • admin-dashboard/frontend/app.js - 일기 UI 로직