HBSA280_Endpoints (엔드포인트 레지스트리·연결)
(Hereby) 시스템 관리 > [[HBSA200]] > Endpoints
| 앱 | System Admin (포트 4100) |
| 부모 화면 | [[HBSA200]] |
| 대상 사용자 | 플랫폼 운영자(OPERATOR) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_권한(RBAC)]] |
| Status | draft (코드 기반 — 라이브 실사 불가: dev 라우트 AccessDenied 격리, 2026-08-25 확인) |
| Owner | 카나 |
개요
멀티 엔드포인트 레지스트리(env SYSADMIN_ENDPOINTS)를 표시하고, 엔드포인트별 라이브 상태 확인(?probe=true → systemWhoAmI)과 운영자 본인 자격증명 등록(연결)/해제를 관리한다. 각 엔드포인트는 독립 인증 realm이라 엔드포인트마다 본인 계정으로 연결해야 데이터가 조회된다. 로그인한 엔드포인트는 자동 연결된다. 볼트(SYSADMIN_VAULT_KEY) 설정 시 자격증명이 재시작 후에도 유지된다.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-08-25 | 카나 | 콸 | 최초 작성 (redesign PR #583 코드 census 기반, 라이브 미실사) |
| 2026-10-01 | 카나 | PM | 테이블 「식별자」 열 + 「불일치」 배지 신설, 부팅 시 instanceId 레지스트리 동기화(f1c4111b, #918) — 커밋 근거, 라이브 실사 이월(TBU) |
Data I/O
Client → Server
| 액션 | 콘솔 REST | 오케스트레이션 |
|---|---|---|
| 목록/상태 확인 | GET /api/endpoints?probe=true | 각 엔드포인트 callEndpoint(platform.systemWhoAmI) |
| 자격증명 등록(연결) | POST /api/endpoints/:id/credentials | verifyOperatorCredential → setCredentials |
| 해제 | DELETE /api/endpoints/:id/credentials | clearCredentials |
Server → Client
| 변수 | 소스 | 비고 |
|---|---|---|
endpoints[] | 레지스트리 + probe | id/name/env/baseUrl/status/hasCredentials/identifier/instanceId/registryInstanceId(#918) |
endpointVaultEnabled | 서버(SYSADMIN_VAULT_KEY 유무) | 영속 안내 문구 분기 |
코드 근거: tabs/endpoints.html, server/routes/endpoints.ts, orchestrator/endpoints.ts, orchestrator/credential-vault.ts.
화면 플로우
메인 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | activeTab === 'endpoints' | - | |
| 01 | 초기 상태 | Output | "Endpoints — 등록 {n}개" + "상태 확인" 버튼 → loadEndpoints(true) | - | probe |
| 10 | 안내 | Info | "각 엔드포인트는 독립된 인증 체계(별도 계정·DB)예요. 엔드포인트마다 운영자 본인 계정으로 연결해야 해당 엔드포인트의 데이터가 조회·관리돼요. 로그인한 엔드포인트는 자동으로 연결됩니다." | - | 원문 카피 |
| 20 | 결과/에러 메시지 | Alert | endpointMsg green / endpointError red 배너 | - | |
| 30 | 엔드포인트 테이블 | List | [List] 컬럼 name/env/식별자(#918)/base URL/상태/연결 계정/액션 | endpoints | ⚠ f1c4111b 시점 코드 헤더는 name/env/식별자/상태/CS 동기화/액션 — 문서 열 구성과 차이, 실사 필요 |
| 31 | ㄴ env 배지 | Badge | prod=primary / else gray | - | |
| ㄴ31-1 | ㄴ 식별자 | Output | • 헤더 "식별자" — DB instanceId 표시, 값 없음: "미설정"(흐린 글씨)- CASE01 [레지스트리 id와 다름]: 빨간 "불일치" 배지, 툴팁 "레지스트리 식별자 「{id}」와 달라요. 다른 엔드포인트가 이 식별자를 쓰고 있는지 확인해 주세요." • 서버 부팅 시 레지스트리 id로 자동 맞춤(다른 행이 이미 쥐면 경고 로그만, 그 엔드포인트는 게시 시 409) | ep.instanceId · ep.registryInstanceId | 신설(f1c4111b, #918) · TBU: 라이브 실사 |
| 32 | ㄴ 상태 배지 | Badge | ok "연결됨"(green) / unauthenticated "인증 필요"(yellow) / failed "연결 실패"(red) / hasCredentials만 "등록됨"(yellow) / 없으면 "미등록"(gray) | ep.status | 4-way 매핑 |
| 33 | ㄴ 연결 계정 | Output | ep.identifier 또는 "—" | - | |
| 34 | ㄴ 액션 | Button | "연결"/"재연결"(hasCredentials 시) → openEndpointCredForm(id) / "해제" → clearEndpointCredentials(id) | - | |
| 40 | 값 없음 처리 | - | identifier 없으면 "—" | - | |
| 50 | 권한별 차이 | - | OPERATOR만 콘솔 접근(엔드포인트 연결). 레지스트리는 env 고정 — 콘솔에서 엔드포인트 추가/삭제 UI 없음 | [[POL_권한(RBAC)]] | 레지스트리 CRUD는 인프라 config |
서브 화면 / 인라인 폼 사양표
자격증명 등록 폼
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | credFormEndpointId. 타이틀 "엔드포인트 연결 — {id}" | openEndpointCredForm() | |
| 01 | 안내 | Info | "이 엔드포인트의 운영자(OPERATOR) 본인 계정으로 로그인해요." + 볼트 분기: case01 [볼트 on] "자격증명은 콘솔 서버에 암호화 보관돼요 — 재시작 후에도 연결이 유지돼요." / case02 [볼트 off] "자격증명은 서버 메모리에만 보관되고 재시작 시 사라져요 (영속하려면 SYSADMIN_VAULT_KEY 설정)." | endpointVaultEnabled | 원문 카피 |
| 10 | 입력 | Input Box | "이메일"(email) / "비밀번호"(password) | credForm | |
| 20 | 제출 | Button | "연결" → saveEndpointCredentials(). 진행 중 "확인 중..." | verifyOperatorCredential → setCredentials | 검증-후-등록 |
권한 / 상태 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
case01 [상태 확인] | 상태 확인 | probe로 4-way 배지 갱신 | |
case02 [연결 성공] | 연결 제출 | setCredentials + 볼트 시 영속 | |
case03 [연결 실패] | 틀린 자격/비-OPERATOR | endpointError, 기존 등록 세션 보존 | 라이브 버그 교정 원칙 |
case04 [해제] | 해제 | 세션 자격 제거 → "미등록" |
OQ
- 콘솔에서 엔드포인트 레지스트리 추가/편집은 코드상 없음(env 고정) — UI 필요 여부 = 후속 결정
- probe 미실행 시 기본 상태 표기(hasCredentials만 있는 "등록됨") 실측 = TBU