From 6241efde0308dbd16b7d72a1d64a52e24a1d63d8 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Fri, 2 Jan 2026 12:30:58 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20Phase=206=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20(DB=20=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=85=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plans/archive/260102_db_scheduler_management.md | 8 ++++---- .../troubleshooting/260102_db_scheduler_management.md | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/journey/plans/archive/260102_db_scheduler_management.md b/journey/plans/archive/260102_db_scheduler_management.md index 4c686b3..220255b 100644 --- a/journey/plans/archive/260102_db_scheduler_management.md +++ b/journey/plans/archive/260102_db_scheduler_management.md @@ -3,7 +3,7 @@ **날짜**: 2026-01-02 **작성자**: happybell80 **관련 서비스**: rb8001 -**상태**: 구현 완료 (Phase 1-5) +**상태**: 구현 완료 (Phase 1-6) → 상세: [troubleshooting/260102_db_scheduler_management.md](../../troubleshooting/260102_db_scheduler_management.md) @@ -36,15 +36,15 @@ CREATE TABLE IF NOT EXISTS scheduled_jobs ( | `naverworks_briefing` | `app.scheduler.jobs.naverworks_briefing._run_briefing_with_logging` | sync 래퍼 | | `coldmail_briefing` | `app.scheduler.jobs.coldmail_briefing._run_coldmail_briefing_with_logging` | sync 래퍼 | -## 구현 완료 (Phase 1-5) +## 구현 완료 (Phase 1-6) - Phase 1-2: `app/state/scheduler_repository.py` - CRUD 함수 - Phase 3: `app/scheduler/db_loader.py` - DB 로더 - Phase 4: `main.py:146-149` - DB 기반 로드로 전환 - Phase 5: `app/router/scheduler_endpoint.py` - API 엔드포인트 +- Phase 6: `scripts/migrate_schedules_to_db.py` - 기존 데이터 마이그레이션 (4개 스케줄러) -## 미완료 (Phase 6-7) +## 미완료 (Phase 7) -- Phase 6: 기존 데이터 마이그레이션 스크립트 - Phase 7: Pydantic Settings 전환 (선택, 권장) diff --git a/journey/troubleshooting/260102_db_scheduler_management.md b/journey/troubleshooting/260102_db_scheduler_management.md index 59a16f6..c7bc406 100644 --- a/journey/troubleshooting/260102_db_scheduler_management.md +++ b/journey/troubleshooting/260102_db_scheduler_management.md @@ -41,6 +41,12 @@ - `DELETE /api/scheduler/jobs/{name}`: 삭제 - `GET /api/scheduler/jobs`: 목록 조회 +### Phase 6: 기존 데이터 마이그레이션 +- `scripts/migrate_schedules_to_db.py`: 환경변수 기반 스케줄러를 DB로 마이그레이션 +- 4개 스케줄러 마이그레이션: daily_diary, naverworks_daily, coldmail_daily, lunch_worldcup +- 실행: `python -m scripts.migrate_schedules_to_db` +- 서버 재시작 후 DB에서 3개 enabled 잡 정상 로드 확인 + ### 테스트 이슈 해결 - JSONB 파싱: `asyncpg`가 JSONB를 string으로 반환 → `json.loads()` 적용 - E2E 테스트 이벤트 루프 충돌: `pytest-asyncio`와 `TestClient` 충돌 @@ -48,8 +54,10 @@ ## 구현 완료 -- 커밋: `1e82dee` (2026-01-02) +- Phase 1-5 커밋: `1e82dee` (2026-01-02) +- Phase 6 커밋: `0d0a098` (2026-01-02) - 테스트: 13개 모두 통과 (repository 5, loader 3, E2E 5) +- 마이그레이션: 4개 스케줄러 DB 삽입 완료, 서버 재시작 후 3개 enabled 잡 정상 로드 - 배포: Gitea Actions 자동 배포 완료 ## 교훈