Files
jarca-ledger-mcp/docs/runtime-flow.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

8.0 KiB

Dashboard 관리자 인증 런타임 흐름

목적과 범위

Streamlit session 시작부터 설정 판정, 로그인 성공·실패, 인증된 page dispatch와 로그아웃까지의 실행 순서와 실패 복구 계약을 정의한다.

  • 포함 범위: credential 환경변수, login form, 1초 실패 지연, session 인증, logout, 인증 event
  • 제외 범위: MCP 요청, 영속 session, application lock, 외부 rate limiter 구현
  • 시작 조건: Streamlit이 dashboard/app.py를 새로 실행하거나 rerun함
  • 성공 종료 상태: 인증된 기존 Dashboard page가 렌더링되거나 로그아웃 후 로그인 화면이 렌더링됨
  • 실패 종료 상태: 안전한 설정·credential 오류를 표시하고 DB·gateway를 호출하지 않은 미인증 상태

흐름

dashboard-entry — Session 시작과 인증 경계

  • 시작 이벤트: 새 browser session 또는 Streamlit rerun
  • 선행조건: Dashboard process가 시작돼 있음
  • 실행 방식: 동기
  • 트랜잭션·영속성 경계: 인증 상태는 현재 st.session_state에만 존재하고 SQLite transaction을 열지 않음
단계 ID 실행 주체 시작 조건·입력 처리 읽기·쓰기 상태 외부 호출 성공 시 다음 단계 실패 시 전이
ENTRY-01 dashboard/app.py script 실행 page config 후 인증 gate 호출 금융 상태 읽기·쓰기 없음 없음 ENTRY-02 AUTH-FAIL-CONFIG
ENTRY-02 인증 모듈 st.session_state correlation ID를 조회하거나 비민감 ID 생성 correlation ID만 session에 기록 random token 생성 ENTRY-03 AUTH-FAIL-CONFIG
ENTRY-03 인증 모듈 두 environment key 비어 있지 않은 문자열 두 개를 읽음 process memory에 현재 rerun 동안만 credential 보유 process environment ENTRY-04 AUTH-FAIL-CONFIG
ENTRY-04 인증 모듈 인증 boolean 현재 session 인증 여부 판정 인증 상태 읽기 없음 DASHBOARD-01 또는 LOGIN-01 AUTH-FAIL-CONFIG
DASHBOARD-01 dashboard/app.py 인증 true DB 경로 취득, CSS와 nav 구성 DB 경로 읽기 filesystem path resolution DASHBOARD-02 DASHBOARD-FAIL
DASHBOARD-02 dashboard/app.py 유효한 page query 허용 목록으로 page를 정규화하고 dispatch page session key, 기존 금융 읽기·쓰기 선택 page gateway AUTHENTICATED DASHBOARD-FAIL

dashboard-login — Login 제출

  • 시작 이벤트: 미인증 사용자의 로그인 form 제출
  • 선행조건: 유효한 관리자 환경 설정과 로그인 화면
  • 실행 방식: 동기
  • 트랜잭션·영속성 경계: 금융 DB transaction 없음; 성공 시 session boolean만 기록
단계 ID 실행 주체 시작 조건·입력 처리 읽기·쓰기 상태 외부 호출 성공 시 다음 단계 실패 시 전이
LOGIN-01 Streamlit 미인증, 유효 설정 ID·password form 렌더링 widget state 없음 LOGIN-02 또는 UNAUTHENTICATED AUTH-FAIL-CONFIG
LOGIN-02 인증 모듈 form 제출 monotonic 시작 시각 기록, ID와 password 모두 constant-time 비교 credential은 local variable monotonic clock LOGIN-03 또는 LOGIN-FAIL-01 LOGIN-FAIL-01
LOGIN-03 인증 모듈 두 비교 성공 인증 boolean true, 성공 event 기록, rerun session 인증 상태 쓰기 application log ENTRY-01 AUTH-FAIL-CONFIG
LOGIN-FAIL-01 인증 모듈 하나 이상 비교 실패 제출 처리 경과가 1초가 될 때까지 remaining delay 금융 상태 무변경 monotonic clock, sleep LOGIN-FAIL-02 LOGIN-FAIL-02
LOGIN-FAIL-02 인증 모듈 최소 지연 완료 실패 event와 안전한 error flag 기록 후 rerun credential widget state 제거 application log LOGIN-FAIL-03 UNAUTHENTICATED
LOGIN-FAIL-03 인증 모듈 실패 rerun ID·password를 구분하지 않는 일반 오류 표시 금융 상태 무변경 없음 UNAUTHENTICATED UNAUTHENTICATED

dashboard-logout — Logout

  • 시작 이벤트: 인증된 사용자의 sidebar 로그아웃 click
  • 선행조건: 현재 session 인증 boolean true
  • 실행 방식: 동기
  • 트랜잭션·영속성 경계: 인증 boolean만 제거하며 금융 DB를 변경하지 않음
단계 ID 실행 주체 시작 조건·입력 처리 읽기·쓰기 상태 외부 호출 성공 시 다음 단계 실패 시 전이
LOGOUT-01 인증 모듈 로그아웃 click 인증 boolean 제거와 logout event 기록 session 인증 상태 삭제 application log LOGOUT-02 UNAUTHENTICATED
LOGOUT-02 Streamlit 인증 상태 없음 rerun 금융 상태 무변경 없음 ENTRY-01 UNAUTHENTICATED

실패와 복구

대상 단계 실패 조건 추가 쓰기 중단 재시도 계약 중복 방지 보상·수동 복구 최종 상태
ENTRY-03 환경변수 누락·빈 값·비문자열·read error 예; DB·gateway 미호출 설정 수정 후 rerun 기존 인증 boolean 제거 운영자가 두 secret을 유효하게 주입 AUTH-FAIL-CONFIG
LOGIN-02 잘못된 ID 또는 password 예; 금융 상태 무변경 각 제출 독립 재시도 lock·failure counter 없음 없음 UNAUTHENTICATED
LOGIN-FAIL-01 sleep interruption 금융 쓰기 없음 다음 제출 가능 error flag boolean만 사용 없음 UNAUTHENTICATED
DASHBOARD-01 DB 경로·기존 page 오류 해당 page의 기존 실패 계약 기존 Dashboard 계약에 따름 기존 gateway 계약 기존 운영 복구 DASHBOARD-FAIL
LOGOUT-01 중복 또는 이미 제거됨 금융 쓰기 없음 로그인 화면 유지 key 제거는 멱등 없음 UNAUTHENTICATED

동시성과 순서

  • 동시 실행 허용 여부: 서로 다른 browser session은 독립적으로 실행되며 같은 session은 Streamlit rerun 순서를 따른다.
  • 잠금·직렬화 단위: 애플리케이션 인증 잠금과 실패 횟수 잠금은 없다. Session state는 browser session 단위다.
  • 순서 보장: 설정 판정과 인증 gate가 DB 경로 취득·page dispatch보다 항상 먼저 실행된다. 실패 지연 완료 후 오류 rerun이 수행된다.
  • 충돌 검출·처리: 새 session과 병렬 요청은 1초 지연을 우회할 수 있으므로 배포 경계에서 별도 rate limiting이 필요하다.

관찰 가능성

신호 종류 이름 발생 단계·조건 상관 식별자 진단 속성 민감정보 처리
log dashboard_auth configuration_error ENTRY-03 설정 오류 session correlation ID event 이름 환경변수 값·오류 원인 원문 제외
log dashboard_auth login_succeeded LOGIN-03 session correlation ID event 이름 ID·password 제외
log dashboard_auth login_failed LOGIN-FAIL-02 session correlation ID event 이름 실패 필드·제출 값 제외
log dashboard_auth logout LOGOUT-01 session correlation ID event 이름 금융 데이터·credential 제외

검증

  • 정상 흐름: test-only credential로 로그인하고 synthetic fixture의 기존 Dashboard page를 렌더링한 뒤 같은 session rerun을 검증한다.
  • 실패 흐름: 설정 누락·빈 값·read error, 잘못된 ID·password, 일반 오류와 DB 미호출을 단위·AppTest로 검증한다.
  • 경계 흐름: Import query parameter 우회 금지, credential session 제거, logout, 새 session 재인증과 MCP 범위 불변을 검증한다.
  • 동시성 흐름: application lock·failure counter가 없음을 정적으로 확인하고 새 session 우회 및 배포 경계 rate limiting 요구를 README에서 검증한다.
  • 운영 진입점과 기대 결과: streamlit run dashboard/app.py; 유효 secret이면 로그인 form, 무효 설정이면 일반 설정 오류, 인증 성공 후에만 기존 Dashboard를 표시한다.