refactor docs into technical specs

This commit is contained in:
2026-04-13 23:20:25 +09:00
parent f3c870553d
commit 256b3709a0
19 changed files with 1713 additions and 2087 deletions
+113
View File
@@ -0,0 +1,113 @@
# Architecture Overview
- Related REQ: `REQ-003`
## 목표
`portfolio-hub`는 포트폴리오 상태 관리 기능을 API와 CLI에 동일하게 제공하고, 서비스/도메인/리포지토리 계층 분리를 통해 변경 비용을 낮춘다.
## 개요와 범위
런타임/구성요소 기준:
- Runtime: Python 3.11+
- API framework: FastAPI
- CLI framework: Typer
- DB driver: Psycopg v3
- Migration: Alembic
주요 목표:
- 포트폴리오 lifecycle 관리(create/update/delete/reset)
- 거래 및 잔고 영향 액션 기록(buy/sell/invest/transfer)
- API와 CLI에서 동일한 상태/ledger 조회 제공
- 공유 service/repository 계층을 통한 동작 일관성 유지
현재 범위:
- 인증된 포트폴리오 조회/변경 작업
- 관리자 기반 사용자 CRUD
- 권한 계층(read, trade-write, admin)
- feature flag 기반 PostgreSQL/Timescale 저장소
- DB bootstrap 및 migration 운영 명령
현재 비목표 / 제한:
- production 용도 메모리 fallback repository 미구현
- 외부 broker 주문 실행 미포함
- Redis/Loki 관측성 경로는 완전한 runtime wiring 미완료
## 상위 구성 요소
| 컴포넌트 | 책임 |
| --- | --- |
| `app/main.py` | FastAPI 앱 생성, 라우터 등록, 설정 초기화 |
| `app/api/` | 인증/헬스/포트폴리오/전략셋/사용자 라우트 |
| `app/cli/` | 운영용 명령 인터페이스와 확인 프롬프트 |
| `app/services/` | API/CLI 공통 유스케이스 수행 |
| `app/domain/` | 포트폴리오 거래 규칙, 밸런스 계산 |
| `app/repositories/` | 저장소 추상화 및 Postgres 구현 |
| `app/db/`, `migrations/` | DB 초기화 및 스키마 버전 관리 |
## 엔트리포인트
HTTP 서비스:
- App factory: `app.main:create_app`
- ASGI app: `app.main:app`
- OpenAPI docs: `/docs`
- ReDoc: `/redoc`
CLI:
- Console script: `portfoliohub`
- Entry function: `app.cli.main:main`
## 기본 런타임 흐름
### 1. API 기반 거래 처리
1. 라우트에서 요청 바디와 권한을 검증한다.
2. 서비스 계층에서 도메인 규칙(수량/금액/상태)을 평가한다.
3. 리포지토리에서 포트폴리오/원장 데이터를 갱신한다.
4. 응답 스키마로 직렬화해 반환한다.
### 2. CLI 기반 동일 작업 처리
1. CLI 명령이 인자를 파싱하고 확인 프롬프트를 처리한다.
2. API와 동일한 서비스 메서드를 호출한다.
3. 결과를 터미널 친화 포맷으로 출력한다.
### 3. DB 활성화 경로
1. `PORTFOLIOHUB_DB_ENABLED=true` 확인
2. DB 연결 정보(`TIMESCALEDB_*`) 로딩
3. Postgres 리포지토리 선택
4. 필요 시 Alembic 마이그레이션 후 서비스 기동
## 설계 원칙
- **Service Reuse First**: API/CLI는 동일 service 계층을 재사용한다.
- **Contract Stability**: 외부 계약은 `app/schemas/`와 기술 문서에서 일관성을 유지한다.
- **Persistence Isolation**: 영속성 구현 세부사항은 repository 계층에 격리한다.
- **Fail Fast Config**: 필수 설정 누락은 조기 실패로 드러낸다.
## 테스트와 호환성 기준
테스트 기준:
- 테스트 프레임워크는 `pytest`를 사용한다.
- 주요 테스트 범위는 API, auth, CLI, domain service를 포함한다.
- 재귀 제외 경로는 `temp`, `.git`, `.venv`를 사용한다.
버전/호환성 기준:
- 현재 패키지 버전: `0.1.0`
- API 버전 노출은 앱 버전 설정(`app_version`)을 따른다.
- 최소 Python 버전: `3.11`
## 향후 확장 포인트
- Redis 기반 cache/session 통합
- Loki logging pipeline 통합
- 추가 broker 및 order-execution adapter
- 운영/admin 확장 엔드포인트
## Open Implementation Points
- `REQ-002` 태그 검색 구현 시 조회 성능 요구를 만족하는 인덱스/쿼리 전략을 확정한다.
- 관측성(메트릭/로그)의 표준 이벤트 스키마를 별도 문서로 확장할지 결정한다.