Files
jarca-ledger-mcp/docs/project-structure.md
T
gitea-impl-agent 7c2a6bdcd3
Verify and publish ARM64 image / verify-arm64 (pull_request) Canceled after 0s
Verify and publish ARM64 image / publish (pull_request) Canceled after 0s
feat(dashboard): add administrator authentication
2026-09-25 14:40:19 +00:00

6.2 KiB

Dashboard 관리자 인증 프로젝트 구조

목적과 경계

Dashboard 진입점 앞의 인증 경계, 인증 구현, 기존 page view, test와 배포 설정의 책임 및 단방향 의존을 정의한다.

  • 포함 경계: dashboard/, Dashboard 인증 test, 환경 예시, Compose와 인증 설계 문서
  • 제외 경계: MCP adapter·server 인증, 가계부 application·SQLite schema 변경

디렉터리 구조

dashboard-runtime — Dashboard runtime

dashboard/
├── app.py
├── authentication.py
├── common.py
└── page_views/
경로 종류 책임 공개 진입점 내부 구현 경계 편집 정책 생성 주체
dashboard/app.py Streamlit 진입점 page config 후 인증 gate를 호출하고 인증된 요청만 기존 Dashboard로 dispatch main() 인증 정책 세부 구현을 포함하지 않음 DB 경로 취득 전 gate 유지 수동
dashboard/authentication.py 인증 모듈 환경변수 설정, constant-time 검증, 실패 지연, session·로그아웃과 event log require_dashboard_authentication() 가계부 DB·gateway·page view에 의존하지 않음 credential 비보존과 fail-closed 유지 수동
dashboard/common.py Dashboard 공통 지원 DB 경로, UI와 gateway helper 기존 함수 인증 상태를 결정하지 않음 인증된 dispatch 이후 사용 수동
dashboard/page_views/ 화면 모듈 기존 금융 조회·쓰기·import UI 각 page_* 함수 인증 구현에 역방향 의존하지 않음 app.py의 인증된 dispatch로만 공개 수동

dashboard-tests — Dashboard 인증·회귀 test

tests/
├── test_dashboard_authentication.py
├── test_dashboard_authentication_app.py
└── test_dashboard_app.py
경로 종류 책임 공개 진입점 내부 구현 경계 편집 정책 생성 주체
tests/test_dashboard_authentication.py 단위 test 설정·constant-time 비교·지연·비민감 log 검증 pytest 실제 credential과 운영 DB 금지 test-only 값 사용 수동
tests/test_dashboard_authentication_app.py Streamlit 통합 test fail-closed, 우회 금지, 1초 지연, session과 logout 검증 pytest AppTest synthetic fixture만 사용 acceptance criterion 대응 유지 수동
tests/test_dashboard_app.py 기존 기능 회귀 test 인증 후 핵심 page 호환성 검증 pytest AppTest synthetic fixture만 사용 로그인 후 기존 assertion 유지 수동

deployment-docs — 배포 설정과 계약 문서

.env.example
docker-compose.yml
README.md
docs/
├── requirements/req-001_dashboard-administrator-authentication.md
├── interface-contract.md
├── project-structure.md
└── runtime-flow.md
경로 종류 책임 공개 진입점 내부 구현 경계 편집 정책 생성 주체
.env.example 설정 예시 credential 변수 이름과 용도 .env 복사 실제 secret 값 금지 빈 값만 제공 수동
docker-compose.yml local deployment Dashboard container로 host secret 환경변수 전달 Compose service MCP service credential 계약 변경 금지 required-variable interpolation으로 누락 시 시작 거부 수동
README.md 운영 안내 설정, fail-closed, 보호 범위와 rate-limit 제약 사용자 문서 실제 secret 값 금지 구현과 함께 갱신 수동
docs/ 인증 문서 정본 계약 요구사항·인터페이스·구조·흐름 Markdown 데이터 모델 문서 생성 없음 harness template 구조 유지 gitea-agent impl workflow

의존 방향

출발 영역 대상 영역 허용 여부 규칙 공유 계약 위치
dashboard-app dashboard-authentication 허용 DB 경로와 page dispatch보다 먼저 gate 호출 docs/runtime-flow.md
dashboard-authentication dashboard-common 금지 인증은 가계부 DB·gateway와 독립 docs/interface-contract.md
dashboard-authentication dashboard-page-views 금지 인증 모듈은 page view를 import·호출하지 않음 docs/interface-contract.md
dashboard-app dashboard-common 인증 후 허용 gate가 참일 때만 DB/UI helper 사용 docs/runtime-flow.md
dashboard-app dashboard-page-views 인증 후 허용 gate가 참일 때만 선택 page dispatch docs/runtime-flow.md
dashboard-page-views dashboard-authentication 금지 page별 인증 분기나 역방향 의존을 만들지 않음 docs/requirements/req-001_dashboard-administrator-authentication.md
dashboard-authentication mcp-adapter 금지 이번 인증은 MCP를 보호하지 않음 README.md

변경 규칙

구분 규칙
새 모듈·파일 배치 Dashboard 공통 인증은 dashboard/authentication.py, page 기능은 기존 dashboard/page_views/에 둔다.
이름·패키지 환경변수는 JARCA_DASHBOARD_ prefix, 비공개 session key는 _jarca_dashboard_ prefix를 사용한다.
소스·테스트 대응 인증 pure helper는 test_dashboard_authentication.py, Streamlit 경계는 test_dashboard_authentication_app.py, 기존 page 호환성은 test_dashboard_app.py에서 검증한다.
생성 산출물 DB schema·migration·credential file을 생성하지 않는다. Requirement와 설계 문서만 docs/에 추가한다.

검증

  • 구조 검사 명령:

    python -c "from pathlib import Path; required=['dashboard/app.py','dashboard/authentication.py','tests/test_dashboard_authentication.py','tests/test_dashboard_authentication_app.py']; assert all(Path(p).is_file() for p in required)"
    
  • 구조 검사 기대 결과: exit code 0이며 모든 인증 source·test 경로가 존재한다.

  • 정적 분석 명령:

    uv run --extra dashboard --extra dev ruff check dashboard tests
    
  • 정적 분석 기대 결과: 새 syntax·undefined-name 오류가 없다.

  • 문서와 실제 트리의 정합성: base-to-worktree 변경 파일을 본 문서의 세 영역과 대조하고 docs/data-model.md와 DB migration이 생성되지 않았는지 확인한다.