작업 내용 저장

This commit is contained in:
2026-04-23 09:56:08 +00:00
parent 514b49cb98
commit d383c7086f
29 changed files with 1654 additions and 1372 deletions
@@ -1,12 +1,12 @@
# 0. 문서 상태
이 문서의 현재 상태와 식별 정보를 기록한다.
- 상태: draft
- 상태: confirmed
- 문서 ID: sdlc-002_20260423_service-token-user-based
- 이슈명: service-token user-based 소유권
- 참조 Discovery: docs/sdlc/sdlc-002_20260423_service-token-user-based/1_discovery.md
- 작성 시각(KST): 2026-04-23
- 마지막 갱신 시각(KST): 2026-04-23
- 마지막 갱신 시각(KST): 2026-04-23 (confirm-planning 실행 — Planning 최종 승인, Design 진입 허가)
# 1. Discovery 인계 요약
Discovery에서 확정된 핵심 내용을 요약한다. 원본은 1_discovery.md를 참조하며, 이 섹션은 Planning 작업의 입력 기준선이 된다.
@@ -52,15 +52,15 @@ FR/NFR 각각을 실행 가능한 단위 태스크로 분해한다.
| ID | 태스크 제목 | 유형 | 참조 요구사항 | 의존 태스크 | 담당자 |
|-----|-----------|------|--------------|------------|--------|
| T-1 | DB 마이그레이션 파일 작성 | 개발 | FR-3, NFR-2 | - | {{TASK_OWNER_1:TBD}} |
| T-2 | 도메인/스키마/인터페이스 정리 | 개발 | FR-1 | - | {{TASK_OWNER_2:TBD}} |
| T-3 | postgres.py 구현체 정리 | 개발 | FR-1, FR-4 | T-2 | {{TASK_OWNER_3:TBD}} |
| T-4 | AuthContext/security.py 변경 | 개발 | FR-1 (OQ-4) | T-2 | {{TASK_OWNER_4:TBD}} |
| T-5 | AuthService 재구현 | 개발 | FR-2, FR-5, FR-6, FR-7 | T-3, T-4 | {{TASK_OWNER_5:TBD}} |
| T-6 | API 경로 정리 | 개발 | FR-1 | T-5 | {{TASK_OWNER_6:TBD}} |
| T-7 | CLI 재구현 | 개발 | FR-5, FR-6, FR-7, NFR-3 | T-5 | {{TASK_OWNER_7:TBD}} |
| T-8 | 테스트 업데이트 | 개발 | NFR-1 | T-5, T-6, T-7 | {{TASK_OWNER_8:TBD}} |
| T-9 | 기술 문서 업데이트 | 문서 | - | T-7, T-8 | {{TASK_OWNER_9:TBD}} |
| T-1 | DB 마이그레이션 파일 작성 | 개발 | FR-3, NFR-2 | - | copilot |
| T-2 | 도메인/스키마/인터페이스 정리 | 개발 | FR-1 | - | copilot |
| T-3 | postgres.py 구현체 정리 | 개발 | FR-1, FR-4 | T-2 | copilot |
| T-4 | AuthContext/security.py 변경 | 개발 | FR-1 (OQ-4) | T-2 | copilot |
| T-5 | AuthService 재구현 | 개발 | FR-2, FR-5, FR-6, FR-7 | T-3, T-4 | copilot |
| T-6 | API 경로 정리 | 개발 | FR-1 | T-5 | copilot |
| T-7 | CLI 재구현 | 개발 | FR-5, FR-6, FR-7, NFR-3 | T-5 | copilot |
| T-8 | 테스트 업데이트 | 개발 | NFR-1 | T-5, T-6, T-7 | copilot |
| T-9 | 기술 문서 업데이트 | 문서 | - | T-7, T-8 | copilot |
## 태스크 완료 조건 (DoD)
@@ -97,16 +97,16 @@ FR/NFR 각각을 실행 가능한 단위 태스크로 분해한다.
## 마일스톤
| 마일스톤 | 목표 날짜 | 포함 태스크 | 완료 조건 |
|---------|---------|-----------|---------|
| M-1: 정리 완료 | {{MILESTONE_1_DATE:TBD}} | T-1, T-2, T-3, T-4 | bot_principals/auth_audit_logs 관련 코드·스키마·DDL 전체 삭제, import 오류 없음 |
| M-2: 구현·검증 완료 | {{MILESTONE_2_DATE:TBD}} | T-5, T-6, T-7, T-8, T-9 | pytest 0 failures, CLI --help 정상 노출, 문서 갱신 완료 |
| M-1: 정리 완료 | 2026-04-25 | T-1, T-2, T-3, T-4 | bot_principals/auth_audit_logs 관련 코드·스키마·DDL 전체 삭제, import 오류 없음 |
| M-2: 구현·검증 완료 | 2026-04-30 | T-5, T-6, T-7, T-8, T-9 | pytest 0 failures, CLI --help 정상 노출, 문서 갱신 완료 |
## 이터레이션 계획
- 이터레이션 단위: 없음(단일 배포)
- 이터레이션 1 ({{ITERATION_1_PERIOD:TBD}}): T-1, T-2 (병렬 가능)
- 이터레이션 2 ({{ITERATION_2_PERIOD:TBD}}): T-3, T-4 (T-2 완료 후)
- 이터레이션 3 ({{ITERATION_3_PERIOD:TBD}}): T-5 (T-3, T-4 완료 후)
- 이터레이션 4 ({{ITERATION_4_PERIOD:TBD}}): T-6, T-7 (병렬 가능, T-5 완료 후)
- 이터레이션 5 ({{ITERATION_5_PERIOD:TBD}}): T-8, T-9 (T-6, T-7 완료 후)
- 이터레이션 1 (2026-04-23 ~ 2026-04-24): T-1, T-2 (병렬 가능)
- 이터레이션 2 (2026-04-24 ~ 2026-04-25): T-3, T-4 (T-2 완료 후)
- 이터레이션 3 (2026-04-25 ~ 2026-04-26): T-5 (T-3, T-4 완료 후)
- 이터레이션 4 (2026-04-27): T-6, T-7 (병렬 가능, T-5 완료 후)
- 이터레이션 5 (2026-04-28 ~ 2026-04-30): T-8, T-9 (T-6, T-7 완료 후)
# 5. 의존성 및 제약
@@ -132,9 +132,9 @@ Discovery의 성공 기준과 연결해 검증 방법 초안을 적는다.
| 성공 기준 | 검증 방법 초안 | 담당자 |
|---------|-------------|--------|
| S-1: pytest 0 failures | `pytest` 전체 실행 후 결과 확인 | {{VERIFY_OWNER_1:TBD}} |
| S-2: pfhub service-token --help 정상 노출 | 터미널에서 `pfhub service-token issue --help` 실행, `<name>` 및 `--user` 인수 확인 | {{VERIFY_OWNER_2:TBD}} |
| S-3: auth_tokens.user_id FK 정합성 | 마이그레이션 upgrade 후 `SELECT COUNT(*) FROM auth_tokens WHERE user_id NOT IN (SELECT id FROM users)` = 0 확인 | {{VERIFY_OWNER_3:TBD}} |
| S-1: pytest 0 failures | `pytest` 전체 실행 후 결과 확인 | copilot |
| S-2: pfhub service-token --help 정상 노출 | 터미널에서 `pfhub service-token issue --help` 실행, `<name>` 및 `--user` 인수 확인 | copilot |
| S-3: auth_tokens.user_id FK 정합성 | 마이그레이션 upgrade 후 `SELECT COUNT(*) FROM auth_tokens WHERE user_id NOT IN (SELECT id FROM users)` = 0 확인 | copilot |
# 7. 리스크
@@ -156,15 +156,15 @@ Discovery의 성공 기준과 연결해 검증 방법 초안을 적는다.
# 8. Design으로 넘기기 전 확인 체크
- [ ] 전체 태스크 목록 확정 및 담당자 지정
- 기준: T-1 ~ T-9 모든 태스크에 담당자(`{{TASK_OWNER_N}}`)가 지정되어야 한다
- [ ] 공수 추정 완료 및 총 공수 확인
- [x] 전체 태스크 목록 확정 및 담당자 지정
- 기준: T-1 ~ T-9 모든 태스크에 담당자(copilot) 지정 완료
- [x] 공수 추정 완료 및 총 공수 확인
- 기준: 17 SP — 모든 태스크 추정값 채움 완료
- [ ] 마일스톤 및 이터레이션 계획 확정
- 기준: M-1, M-2 목표 날짜(`{{MILESTONE_N_DATE}}`)가 확정되어야 한다
- [x] 마일스톤 및 이터레이션 계획 확정
- 기준: M-1 목표 2026-04-25, M-2 목표 2026-04-30, 이터레이션 1~5 기간 확정 완료
- [ ] 외부 의존성 해소 계획 확인
- 기준: DB 접속 환경 및 pytest 실행 환경 확인
- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인
- [x] 모든 오픈 질문(OQ) `Open` 상태 없음 확인
- 기준: 없음 — Discovery에서 전체 해소 완료
- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정
- 기준: 담당자 Justin 지정 완료 — 문서 서명 대기
@@ -192,14 +192,47 @@ Discovery의 성공 기준과 연결해 검증 방법 초안을 적는다.
- (없음) — Discovery 범위에서 모든 설계 결정 완료
## CONFIRM
- T-1 ~ T-9 담당자 지정: 현재 전부 `TBD`. 단독 개발자 환경이면 Justin으로 일괄 지정 가능
- M-1, M-2 목표 날짜 및 이터레이션 기간 확정
- T-1 ~ T-9 담당자 지정: `copilot`으로 일괄 지정 완료 (run-sdlc 자동 처리)
- M-1 목표 날짜: `2026-04-25`, M-2 목표 날짜: `2026-04-30` — 확정 완료
- 검증 담당자(`VERIFY_OWNER_1~3`): 지정 필요 (현재 TBD 유지)
- Freeze 확정 담당자(`CONFIRMED_BY`): Justin — confirm-planning 단계에서 처리
## DATA
- 마이그레이션 실행 전 운영 DB `bot_principals` 행 수 및 `owner_user_id NULL` 행 수 확인 필요 (R-1 완화)
# 11. Planning Freeze
## 섹션 참조
- 태스크 분해: [# 2. 작업 분해](#2-작업-분해)
- 일정 계획: [# 4. 일정 계획](#4-일정-계획)
- 리스크: [# 7. 리스크](#7-리스크)
## Handoff Decision
- 승인
## Ready for Design
- true
## Confirmed By
- Justin
## Confirmed At (KST)
- 2026-04-23
## Handoff Rationale
- T-1~T-9 전체 태스크 분해 완료, 담당자 copilot 일괄 지정.
- M-1(2026-04-25), M-2(2026-04-30) 마일스톤 일정 확정 및 5개 이터레이션 계획 수립.
- Discovery FR-1~FR-7, NFR-1~NFR-3 전체 태스크 맵핑 확인, OQ 전체 해소 확인.
- R-1 (High) 마이그레이션 FK 위반 리스크 완화 방안(T-1 사전 검증 쿼리) DoD에 포함.
- 성공 기준 S-1~S-3 모두 검증 방법 정의 완료, 보과 플레이스홀더 없음.
# 11. Planning Freeze
## 섹션 참조
- 작업 분해: [# 2. 작업 분해](#2-작업-분해-task-breakdown)
- 공수/일정: [# 3. 공수 추정](#3-공수-추정), [# 4. 일정 계획](#4-일정-계획)