docs: Phase 7 완료 반영 (Pydantic Settings 전환)
This commit is contained in:
parent
6241efde03
commit
d905c69d9e
@ -3,7 +3,7 @@
|
|||||||
**날짜**: 2026-01-02
|
**날짜**: 2026-01-02
|
||||||
**작성자**: happybell80
|
**작성자**: happybell80
|
||||||
**관련 서비스**: rb8001
|
**관련 서비스**: rb8001
|
||||||
**상태**: 구현 완료 (Phase 1-6)
|
**상태**: 구현 완료 (Phase 1-7)
|
||||||
|
|
||||||
→ 상세: [troubleshooting/260102_db_scheduler_management.md](../../troubleshooting/260102_db_scheduler_management.md)
|
→ 상세: [troubleshooting/260102_db_scheduler_management.md](../../troubleshooting/260102_db_scheduler_management.md)
|
||||||
|
|
||||||
@ -36,15 +36,12 @@ CREATE TABLE IF NOT EXISTS scheduled_jobs (
|
|||||||
| `naverworks_briefing` | `app.scheduler.jobs.naverworks_briefing._run_briefing_with_logging` | sync 래퍼 |
|
| `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 래퍼 |
|
| `coldmail_briefing` | `app.scheduler.jobs.coldmail_briefing._run_coldmail_briefing_with_logging` | sync 래퍼 |
|
||||||
|
|
||||||
## 구현 완료 (Phase 1-6)
|
## 구현 완료 (Phase 1-7)
|
||||||
|
|
||||||
- Phase 1-2: `app/state/scheduler_repository.py` - CRUD 함수
|
- Phase 1-2: `app/state/scheduler_repository.py` - CRUD 함수
|
||||||
- Phase 3: `app/scheduler/db_loader.py` - DB 로더
|
- Phase 3: `app/scheduler/db_loader.py` - DB 로더
|
||||||
- Phase 4: `main.py:146-149` - DB 기반 로드로 전환
|
- Phase 4: `main.py:146-149` - DB 기반 로드로 전환
|
||||||
- Phase 5: `app/router/scheduler_endpoint.py` - API 엔드포인트
|
- Phase 5: `app/router/scheduler_endpoint.py` - API 엔드포인트
|
||||||
- Phase 6: `scripts/migrate_schedules_to_db.py` - 기존 데이터 마이그레이션 (4개 스케줄러)
|
- Phase 6: `scripts/migrate_schedules_to_db.py` - 기존 데이터 마이그레이션 (4개 스케줄러)
|
||||||
|
- Phase 7: Pydantic Settings 전환 - `app/core/config.py`에 스케줄러 설정 추가, `os.getenv()` 제거
|
||||||
## 미완료 (Phase 7)
|
|
||||||
|
|
||||||
- Phase 7: Pydantic Settings 전환 (선택, 권장)
|
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,12 @@
|
|||||||
- 실행: `python -m scripts.migrate_schedules_to_db`
|
- 실행: `python -m scripts.migrate_schedules_to_db`
|
||||||
- 서버 재시작 후 DB에서 3개 enabled 잡 정상 로드 확인
|
- 서버 재시작 후 DB에서 3개 enabled 잡 정상 로드 확인
|
||||||
|
|
||||||
|
### Phase 7: Pydantic Settings 전환
|
||||||
|
- `app/core/config.py`: 스케줄러 관련 설정 추가 (하위 호환성 유지)
|
||||||
|
- `app/scheduler/jobs/*.py`: `os.getenv()` → `settings` 사용으로 전환
|
||||||
|
- `main.py`: daily_headlines, companyx_news도 Settings 사용
|
||||||
|
- 모든 스케줄러 관련 환경변수를 Pydantic Settings로 통합
|
||||||
|
|
||||||
### 테스트 이슈 해결
|
### 테스트 이슈 해결
|
||||||
- JSONB 파싱: `asyncpg`가 JSONB를 string으로 반환 → `json.loads()` 적용
|
- JSONB 파싱: `asyncpg`가 JSONB를 string으로 반환 → `json.loads()` 적용
|
||||||
- E2E 테스트 이벤트 루프 충돌: `pytest-asyncio`와 `TestClient` 충돌
|
- E2E 테스트 이벤트 루프 충돌: `pytest-asyncio`와 `TestClient` 충돌
|
||||||
@ -56,8 +62,10 @@
|
|||||||
|
|
||||||
- Phase 1-5 커밋: `1e82dee` (2026-01-02)
|
- Phase 1-5 커밋: `1e82dee` (2026-01-02)
|
||||||
- Phase 6 커밋: `0d0a098` (2026-01-02)
|
- Phase 6 커밋: `0d0a098` (2026-01-02)
|
||||||
|
- Phase 7 커밋: `f5ac6e9` (2026-01-02)
|
||||||
- 테스트: 13개 모두 통과 (repository 5, loader 3, E2E 5)
|
- 테스트: 13개 모두 통과 (repository 5, loader 3, E2E 5)
|
||||||
- 마이그레이션: 4개 스케줄러 DB 삽입 완료, 서버 재시작 후 3개 enabled 잡 정상 로드
|
- 마이그레이션: 4개 스케줄러 DB 삽입 완료, 서버 재시작 후 3개 enabled 잡 정상 로드
|
||||||
|
- Settings 전환: 모든 스케줄러 관련 환경변수를 Pydantic Settings로 통합 완료
|
||||||
- 배포: Gitea Actions 자동 배포 완료
|
- 배포: Gitea Actions 자동 배포 완료
|
||||||
|
|
||||||
## 교훈
|
## 교훈
|
||||||
@ -65,7 +73,7 @@
|
|||||||
### 환경변수 관리 원칙 준수
|
### 환경변수 관리 원칙 준수
|
||||||
- `os.getenv()` 직접 호출 시 기본값과 `.env` 하드코딩 불일치 위험
|
- `os.getenv()` 직접 호출 시 기본값과 `.env` 하드코딩 불일치 위험
|
||||||
- DB 기반 설정으로 단일 소스 원칙 준수 가능
|
- DB 기반 설정으로 단일 소스 원칙 준수 가능
|
||||||
- 향후 Pydantic Settings 전환 권장 (`Phase 7`)
|
- Pydantic Settings 전환 완료: 모든 스케줄러 관련 환경변수를 `app/core/config.py`로 통합
|
||||||
|
|
||||||
### JSONB 타입 처리
|
### JSONB 타입 처리
|
||||||
- `asyncpg`는 JSONB를 string으로 반환하므로 명시적 파싱 필요
|
- `asyncpg`는 JSONB를 string으로 반환하므로 명시적 파싱 필요
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user