4.7 KiB
4.7 KiB
로빙 일기 시스템 구현 완료
날짜: 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- 일기 페이지 UIadmin-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 테스트
- ✅ 일기 탭 표시 확인
- ✅ 일기 목록 로드 확인
- ✅ 일기 클릭 시 본문 표시 확인 (수정 후)
구현 단계별 완료 현황
- ✅ DB 테이블 생성:
robeing_diary,activity_log테이블 생성 완료 - ⏳ 활동 로그 기록: 스킬 실행 시 자동 기록 로직 미구현 (수동 기록 가능)
- ✅ Diary Aggregator 구현: 모든 데이터 소스 집계 완료
- ✅ 일기 생성 로직: LLM으로 일기 텍스트 생성 완료
- ✅ 스케줄러 등록: 매일 오전 2시 자동 생성 등록 완료
- ✅ API 엔드포인트:
/api/diary/{date}구현 완료 - ✅ 관리자 대시보드: 일기 목록/상세 페이지 추가 완료
- ⏳ 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 로직