diff --git a/docs/design/577-persona-ux-audit/README.md b/docs/design/577-persona-ux-audit/README.md
index d29f504..05d4133 100644
--- a/docs/design/577-persona-ux-audit/README.md
+++ b/docs/design/577-persona-ux-audit/README.md
@@ -1,4 +1,4 @@
-# VPD Backoffice 전 페이지 페르소나 UX 리뷰와 개선 로드맵
+# VPD 권한 운영 전 페이지 페르소나 UX 리뷰와 개선 로드맵
> **상태**: Review complete · UX-1/UX-2 implementation in progress
> **작성**: [AI] UX Facilitator · **최종수정**: 2026-06-30
@@ -87,3 +87,23 @@ UX-1부터 시작한다. 기존 데이터 모델과 VPD 로직은 바꾸지 않
- 브라우저 검증을 우회한 POST도 역할 누락·객체 형식·행 규칙 오류를 flash 오류로 돌려준다. 서버의 `PermissionService` 검증은 그대로 최종 방어선으로 유지한다.
검증 범위는 `GuidedFlowTemplateTest`, `PermissionServiceTest`, 전체 Maven 테스트 및 배포 후 `/permissions` HTTP 확인이다.
+
+## 8. 제품 표면 명칭 정리 — VPD 권한 운영
+
+`VPD Backoffice`는 구현 방식과 내부 운영 도구 성격만 드러내므로 제품 표면에서 제거한다. 제품명은 **VPD 권한 운영**으로 통일한다. VPD는 보호 방식의 이름으로 유지하되, ORDS·Handler·Filter·MCP 같은 구현 용어는 고급 운영 또는 기술 상세에서만 사용한다.
+
+| 기존 표현 | 제품 표면 표현 | 비고 |
+|---|---|---|
+| VPD Backoffice | VPD 권한 운영 | 상단, 로그인, 브라우저 제목 |
+| 권한 관리 | 접근 정책 | 역할별 데이터 범위 설정 |
+| DB 보호 연결 / VPD 설정 | 보호 상태 | DB 객체 보호 정책의 확인·연결 |
+| 권한 결과 확인 | 접근 검증 | 검증 세션으로 실제 조회 실행 |
+| ORDS 조회 대상 | 조회 대상 | ORDS는 화면 상세에서만 표기 |
+| ORDS 핸들러 | 조회 연동 | 고급 운영 메뉴 |
+| 지식 검색 관리 | 지식 검색 | 등록·정책·검색 기능 |
+| 별도 Filter 관리 | 고급 접근 조건 | 예외 정책 기능 |
+| 운영 상태 / 연결 설정 | 운영 현황 / 시스템 설정 | 운영성·연동 설정 기능 |
+
+상단 메뉴는 `권한 관리 · 데이터 보호 · 접근 검증 · 지식 검색 · 시스템 관리` 순서로 재구성한다. 절차나 구현 방식이 아니라 사용자가 하려는 일을 메뉴명으로 쓴다. 메뉴와 기본 화면에는 `1.`, `2.`, 단계 레일, `01/02` 배지를 두지 않는다. 순서가 실제 입력 제약인 wizard에서만 단계 번호를 사용한다.
+
+기본 페이지는 제목과 현재 설정·주요 행동만 노출한다. VPD/ORDS 처리 원리, 배경 설명, 주의사항은 상단의 공통 `도움말` 버튼을 눌렀을 때만 펼친다. 이 규칙으로 제품 화면이 관리 매뉴얼처럼 보이는 문제를 줄이고, 설정 자체를 전면에 둔다.
diff --git a/src/main/resources/static/css/app.css b/src/main/resources/static/css/app.css
index 6a0a42a..89efdc0 100644
--- a/src/main/resources/static/css/app.css
+++ b/src/main/resources/static/css/app.css
@@ -253,6 +253,39 @@ body {
margin-bottom: 0;
}
+/* Product pages keep help available without turning the title area into a manual. */
+.page-title > .explanation-details {
+ background: transparent;
+ border: 0;
+ margin-top: .55rem;
+ padding: 0;
+}
+
+.page-title > .explanation-details > summary {
+ background: var(--rw-surface-muted);
+ border: 1px solid var(--rw-border);
+ border-radius: 999px;
+ display: inline-flex;
+ padding: .35rem .7rem;
+}
+
+.page-title > .explanation-details[open] {
+ background: var(--rw-surface-muted);
+ border: 1px solid var(--rw-border);
+ border-radius: 8px;
+ padding: .65rem .8rem;
+}
+
+.page-title > .explanation-details[open] > summary {
+ background: transparent;
+ border: 0;
+ border-bottom: 1px solid var(--rw-border);
+ border-radius: 0;
+ display: block;
+ margin-bottom: .65rem;
+ padding: 0 0 .55rem;
+}
+
.content-band > .explanation-details:first-child {
margin-top: 0;
}
@@ -1845,7 +1878,7 @@ body {
color: var(--rw-text);
display: grid;
gap: .65rem;
- grid-template-columns: auto minmax(0, 1fr) auto;
+ grid-template-columns: minmax(0, 1fr) auto;
min-width: 0;
padding: .8rem;
text-decoration: none;
@@ -1862,20 +1895,6 @@ body {
border-color: color-mix(in srgb, var(--rw-primary) 35%, var(--rw-border));
}
-.dashboard-action-icon {
- align-items: center;
- background: var(--rw-surface);
- border: 1px solid var(--rw-border);
- border-radius: 999px;
- color: var(--rw-primary);
- display: inline-flex;
- font-size: .72rem;
- font-weight: 900;
- height: 2rem;
- justify-content: center;
- width: 2rem;
-}
-
.dashboard-action strong,
.dashboard-action small {
display: block;
@@ -1938,57 +1957,6 @@ body {
text-decoration: none;
}
-.dashboard-workflow {
- margin-bottom: 1.25rem;
-}
-
-.dashboard-section-heading {
- margin-bottom: .7rem;
-}
-
-.workflow-steps {
- display: grid;
- gap: .6rem;
- grid-template-columns: repeat(4, minmax(0, 1fr));
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.workflow-steps a {
- border-top: 2px solid var(--rw-border-strong);
- color: var(--rw-text);
- display: grid;
- gap: .2rem;
- grid-template-columns: auto minmax(0, 1fr);
- padding: .65rem 0;
- text-decoration: none;
-}
-
-.workflow-steps a:hover,
-.workflow-steps a:focus {
- border-color: var(--rw-primary);
- color: var(--rw-primary);
-}
-
-.workflow-steps span {
- color: var(--rw-primary);
- font-size: .76rem;
- font-weight: 900;
- grid-row: span 2;
- margin-right: .1rem;
-}
-
-.workflow-steps strong {
- font-size: .88rem;
-}
-
-.workflow-steps small {
- color: var(--rw-muted);
- font-size: .76rem;
- line-height: 1.3;
-}
-
.dashboard-details {
background: var(--rw-surface);
border: 1px solid var(--rw-border);
@@ -2382,7 +2350,6 @@ body {
}
.dashboard-action-grid,
- .workflow-steps,
.dashboard-state dl {
grid-template-columns: 1fr;
}
diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html
index c326223..312635a 100644
--- a/src/main/resources/templates/dashboard.html
+++ b/src/main/resources/templates/dashboard.html
@@ -1,21 +1,20 @@
-
+
@@ -28,18 +27,14 @@
-
지금 할 일
-
권한을 설정하거나 적용 결과를 확인하세요.
-
권한 규칙에서 설정하고, 검증 세션에서 실제 조회 결과를 확인합니다.
+
주요 작업
@@ -55,21 +50,8 @@
-
-
- 작동 방식과 등록 대상 보기
+ 상세 현황
@@ -90,7 +72,7 @@
현재 검증 가능한 데이터
권한 규칙과 ORDS 경로가 등록된 보호 객체입니다.
- 결과 확인
+ 접근 검증
diff --git a/src/main/resources/templates/effective-matrix.html b/src/main/resources/templates/effective-matrix.html
index 0de868c..b877642 100644
--- a/src/main/resources/templates/effective-matrix.html
+++ b/src/main/resources/templates/effective-matrix.html
@@ -1,14 +1,13 @@
-
+
-
유효 권한 확인
-
한 사용자가 어떤 역할 경로를 거쳐 어떤 보호 객체를 볼 수 있는지 확인합니다.
+
사용자별 접근 확인
- 이 화면의 권한 근거 보기
+ 도움말
직접 역할과 그룹 상속 역할을 합쳐 최종 권한을 계산합니다. 여기의 결과는 토큰을 발급해 ORDS/VPD 조회를 검증하기 전 확인하는 설계 근거입니다.
diff --git a/src/main/resources/templates/fragments/layout.html b/src/main/resources/templates/fragments/layout.html
index f30ace3..e3c83ae 100644
--- a/src/main/resources/templates/fragments/layout.html
+++ b/src/main/resources/templates/fragments/layout.html
@@ -3,7 +3,7 @@
- VPD 백오피스
+ VPD 권한 운영
@@ -13,44 +13,49 @@
-
-
-
1 · WHO / WHAT
-
권한 설계
-
누가 어떤 데이터의 어느 행과 컬럼을 볼지 정합니다.
-
- →
-
-
2 · ENFORCE
-
DB 보호 연결
-
VPD가 저장된 권한체계를 매번 읽어 DB에서 행을 자동 제한합니다.
-
- →
-
-
3 · IDENTITY
-
검증 세션
-
확인할 사용자를 나타내는 일회성 토큰을 준비합니다.
-
- →
-
-
4 · EVIDENCE
-
결과 확인
-
ORDS를 호출해 그 사용자에게 실제로 보이는 데이터만 확인합니다.
-
-
diff --git a/src/main/resources/templates/fragments/ords-handler-source.html b/src/main/resources/templates/fragments/ords-handler-source.html
index b22b757..c60a719 100644
--- a/src/main/resources/templates/fragments/ords-handler-source.html
+++ b/src/main/resources/templates/fragments/ords-handler-source.html
@@ -8,7 +8,7 @@
ADMIN.TABLE_NAME
/ 기본 ORDS Handler PL/SQL
- 이 소스는 VPD context를 설정한 뒤 한 테이블을 SELECT하는 기본 구성입니다. 실제 수정·저장은 ORDS 핸들러 화면에서 parsing schema 권한으로 진행하세요.
+ 이 소스는 VPD context를 설정한 뒤 한 테이블을 SELECT하는 기본 구성입니다. 실제 수정·저장은 조회 연동 화면에서 parsing schema 권한으로 진행하세요.
source
diff --git a/src/main/resources/templates/fragments/probe-result.html b/src/main/resources/templates/fragments/probe-result.html
index 41273b0..5827ca8 100644
--- a/src/main/resources/templates/fragments/probe-result.html
+++ b/src/main/resources/templates/fragments/probe-result.html
@@ -164,7 +164,7 @@ ROWNUM <= :row_limit
- 이 Handler는 SQL trace 정보를 반환하지 않았고 백오피스 DB에서도 기본 VPD predicate를 조회하지 못했습니다.
ORDS 핸들러 에서 trace가 포함된 소스를 적용하고,
CB_AGENT_DOC_VPD_FILTER 실행 권한을 확인하세요.
+ 이 Handler는 SQL trace 정보를 반환하지 않았고 운영 DB에서도 기본 VPD predicate를 조회하지 못했습니다.
조회 연동 에서 trace가 포함된 소스를 적용하고,
CB_AGENT_DOC_VPD_FILTER 실행 권한을 확인하세요.
diff --git a/src/main/resources/templates/groups.html b/src/main/resources/templates/groups.html
index 6dd5a1a..9502278 100644
--- a/src/main/resources/templates/groups.html
+++ b/src/main/resources/templates/groups.html
@@ -1,14 +1,13 @@
-
+
-
그룹 관리
-
사용자를 묶고 역할을 한 번에 상속시키는 관리 화면입니다.
+
그룹
- 그룹 권한 흐름 설명 보기
+ 도움말
사용자 그룹을 만들고 그룹에 사용자와 역할을 부여합니다. 권한은 역할에 연결되고, 사용자는 직접 역할과 그룹 역할을 함께 상속합니다.
diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html
index 27130b2..6fd51f9 100644
--- a/src/main/resources/templates/login.html
+++ b/src/main/resources/templates/login.html
@@ -1,14 +1,13 @@
-
+
VPD
-
VPD Backoffice
-
권한, 토큰, ORDS 검증을 관리합니다.
+
VPD 권한 운영 콘솔
diff --git a/src/main/resources/templates/mcp-chatbot.html b/src/main/resources/templates/mcp-chatbot.html
index 2fd5b17..02d21c9 100644
--- a/src/main/resources/templates/mcp-chatbot.html
+++ b/src/main/resources/templates/mcp-chatbot.html
@@ -1,14 +1,13 @@
-
+
- MCP Chatbot
- 질문을 분석해 알맞은 MCP 도구와 VPD/ORDS 결과를 답변으로 연결합니다.
+ 대화형 검색
- Chatbot 처리 흐름 보기
+ 도움말
질문을 MCP tool로 라우팅하고, 권한 태그·VPD 행 제한·ORDS 결과를 답변으로 정리합니다.
diff --git a/src/main/resources/templates/mcp-client-demo.html b/src/main/resources/templates/mcp-client-demo.html
index 3d22d46..e3544fa 100644
--- a/src/main/resources/templates/mcp-client-demo.html
+++ b/src/main/resources/templates/mcp-client-demo.html
@@ -1,15 +1,14 @@
-
+
- MCP Client
- Java client가 MCP 연결과 사용 가능한 도구 계약을 확인합니다.
+ 연동 점검
- Client 연동 범위 보기
- 백오피스 Java client가 MCP message endpoint의 initialize/tools/list 계약을 확인합니다. 실제 tool 선택과 호출은 reasoning 결과를 받은 MCP client가 담당합니다.
+ 도움말
+ 연동 Java client가 MCP message endpoint의 initialize/tools/list 계약을 확인합니다. 실제 tool 선택과 호출은 reasoning 결과를 받은 MCP client가 담당합니다.
diff --git a/src/main/resources/templates/mcp-reasoning.html b/src/main/resources/templates/mcp-reasoning.html
index 0038fdf..d222009 100644
--- a/src/main/resources/templates/mcp-reasoning.html
+++ b/src/main/resources/templates/mcp-reasoning.html
@@ -1,14 +1,13 @@
-
+
-
MCP Reasoning
-
질문에 맞는 MCP tool을 자동 선택하고 결과를 설명합니다.
+
검색 해석
- Reasoning 처리 흐름 보기
+ 도움말
질문을 근거로 MCP tool을 고르고, Bearer Token으로 VPD/ORDS 결과를 조회한 뒤 모델이 설명합니다.
diff --git a/src/main/resources/templates/mcp-sse.html b/src/main/resources/templates/mcp-sse.html
index ceef6d1..39eee4c 100644
--- a/src/main/resources/templates/mcp-sse.html
+++ b/src/main/resources/templates/mcp-sse.html
@@ -1,14 +1,13 @@
-
+
- MCP SSE
- 외부 MCP client가 ORDS 조회 도구를 호출하는 SSE 연결 정보를 제공합니다.
+ MCP 연동
- SSE와 context path 설명 보기
+ 도움말
보호 객체 ORDS 조회를 외부 MCP client에서 호출할 수 있도록 context path별 SSE transport로 제공합니다.
diff --git a/src/main/resources/templates/objects.html b/src/main/resources/templates/objects.html
index b090c3b..e1bf510 100644
--- a/src/main/resources/templates/objects.html
+++ b/src/main/resources/templates/objects.html
@@ -1,14 +1,13 @@
-
+
-
ORDS 조회 대상 등록
-
DB 객체를 조회 Handler에 연결하는 화면입니다. 접근 권한은 별도로 관리합니다.
+
조회 대상
- 이 화면의 역할 설명 보기
+ 도움말
이 화면은 DB 객체를 HTTP로 연결할 경로만 등록합니다. 누가 어떤 행을 볼 수 있는지는 권한 규칙과 VPD에서 결정합니다.
@@ -21,8 +20,6 @@
-
-
diff --git a/src/main/resources/templates/operation-status.html b/src/main/resources/templates/operation-status.html
index 2b800f6..bb30d8b 100644
--- a/src/main/resources/templates/operation-status.html
+++ b/src/main/resources/templates/operation-status.html
@@ -1,14 +1,13 @@
-
+
-
운영 상태
-
보호 객체별 연결 상태와 최근 검증 결과를 한눈에 봅니다.
+
운영 현황
- 운영 상태 항목 설명 보기
+ 도움말
보호 객체별 ORDS handler, VPD policy, 권한 rule, 최근 검증 상태를 확인합니다. 이상이 있을 때는 해당 객체의 권한·VPD·ORDS 순서로 점검하세요.
diff --git a/src/main/resources/templates/ords-handlers.html b/src/main/resources/templates/ords-handlers.html
index c639ea9..d4e8534 100644
--- a/src/main/resources/templates/ords-handlers.html
+++ b/src/main/resources/templates/ords-handlers.html
@@ -1,20 +1,19 @@
-
+
-
ORDS 핸들러
-
토큰을 DB 권한 컨텍스트로 바꾸는 Handler를 확인·수정합니다.
+
조회 연동
- Handler 처리 흐름 설명 보기
- Bearer Token을 DB 컨텍스트로 변환한 뒤 VPD가 권한체계를 적용합니다. 아래 소스는 등록된 ORDS Handler가 실제로 실행하는 기술 세부 내용입니다. 실행 결과의 “토큰 적용 후 SQL”은 권한 결과 확인 메뉴에서 확인할 수 있습니다.
+ 도움말
+ Bearer Token을 DB 컨텍스트로 변환한 뒤 VPD가 권한체계를 적용합니다. 아래 소스는 등록된 ORDS Handler가 실제로 실행하는 기술 세부 내용입니다. 실행 결과의 “토큰 적용 후 SQL”은 접근 검증 메뉴에서 확인할 수 있습니다.
- 권한별로 VPD가 붙인 실제 행 조건을 확인하려면
권한 결과 확인 에서 이 Handler의 보호 객체를 실행하세요. SQL trace를 반환하도록 갱신된 Handler는 같은 ORDS 세션의
CB_AGENT_DOC_VPD_FILTER predicate를 함께 표시합니다.
+ 권한별로 VPD가 붙인 실제 행 조건을 확인하려면
접근 검증 에서 이 Handler의 보호 객체를 실행하세요. SQL trace를 반환하도록 갱신된 Handler는 같은 ORDS 세션의
CB_AGENT_DOC_VPD_FILTER predicate를 함께 표시합니다.
diff --git a/src/main/resources/templates/permissions.html b/src/main/resources/templates/permissions.html
index 4340f8f..30868e5 100644
--- a/src/main/resources/templates/permissions.html
+++ b/src/main/resources/templates/permissions.html
@@ -1,27 +1,24 @@
-
+
-
권한 관리
-
역할이 어떤 객체의 어느 행과 컬럼을 볼 수 있는지 정의합니다.
+
접근 정책
- 권한 규칙과 VPD의 관계 보기
+ 도움말
VPD policy function이 참조할 사용자, 역할, 행 규칙, 컬럼 원문 허용 규칙을 저장합니다. 이 화면에서 만든 규칙이 기본 Filter의 동적 입력이 됩니다.
-
-
-
새 권한 규칙
+
새 접근 정책
저장 전 적용 대상과 행 범위를 검토한 뒤 VPD 권한을 반영합니다.
@@ -246,7 +243,7 @@
- 권한 목록
+ 접근 정책 목록
diff --git a/src/main/resources/templates/probe.html b/src/main/resources/templates/probe.html
index e4064d9..48c54d5 100644
--- a/src/main/resources/templates/probe.html
+++ b/src/main/resources/templates/probe.html
@@ -1,20 +1,17 @@
-
+
-
권한 결과 확인
-
토큰을 사용해 실제로 보이는 행과 컬럼을 확인합니다.
+
접근 검증
- 검증 단계 설명 보기
+ 도움말
한 사용자의 토큰으로 실제 데이터를 요청해, 설계한 권한이 DB에서 그대로 적용되는지 확인합니다.
-
-
이번 단계에서 확인하는 것
@@ -70,7 +67,7 @@
벡터 검색어 (평문)
-
검색어를 평문으로 입력하면 백오피스가 같은 임베딩 방식으로 벡터화해 전용 ORDS Handler에 전달합니다.
+
검색어를 평문으로 입력하면 시스템이 같은 임베딩 방식으로 벡터화해 전용 조회 경로에 전달합니다.
임베딩 방식
@@ -80,7 +77,7 @@
자료 등록 때 사용한 방식·차원과 맞춰야 합니다. AI 설정이 없으면 로컬 임베딩을 사용하세요.
-
3. 권한 결과 확인
+
3. 접근 검증 실행
diff --git a/src/main/resources/templates/roles.html b/src/main/resources/templates/roles.html
index d56e4b2..e5ab541 100644
--- a/src/main/resources/templates/roles.html
+++ b/src/main/resources/templates/roles.html
@@ -1,14 +1,13 @@
-
+
-
역할 관리
-
권한 규칙을 묶어 사용자·그룹에 부여하는 단위입니다.
+
역할
- 역할과 표시 보호 상한 설명 보기
+ 도움말
사용자에게 부여할 역할을 관리합니다. 표시 보호 등급 상한은 허용된 행에서 원문으로 볼 수 있는 컬럼 등급의 참고값이며, 행 접근 권한은 권한 규칙과 VPD에서 결정합니다.
diff --git a/src/main/resources/templates/settings-database.html b/src/main/resources/templates/settings-database.html
index e09553e..c36ab57 100644
--- a/src/main/resources/templates/settings-database.html
+++ b/src/main/resources/templates/settings-database.html
@@ -5,12 +5,11 @@
-
← 연결 설정으로 돌아가기
+
← 시스템 설정으로 돌아가기
DB 준비 상태
-
DB에 영향을 주는 지원 DDL과 VPD·ORDS runtime 준비 상태를 확인합니다.
- 실행 전 반드시 확인할 내용
- 지원 테이블 생성/확인 은 현재 연결 사용자의 백오피스 메타데이터를 생성하거나 보강합니다. VPD context, ORDS enablement, grant는 여기서 실행하지 않으며, 아래 sqlcl preview 순서를 따릅니다.
+ 도움말
+ 지원 테이블 생성/확인 은 현재 연결 사용자의 운영 메타데이터를 생성하거나 보강합니다. VPD context, ORDS enablement, grant는 여기서 실행하지 않으며, 아래 sqlcl preview 순서를 따릅니다.
@@ -28,7 +27,7 @@
현재 DB 준비 상태
현재 연결 사용자 기준으로 메타데이터, VPD runtime, ORDS runtime, grant 상태를 점검합니다.
- 운영 상태 보기
+ 운영 현황 보기
현재 연결 사용자 ADMIN
@@ -43,7 +42,7 @@
Layer Item Type Status Detail Next Action
- Backoffice Metadata
+ 운영 메타데이터
CB_APP_USER
TABLE
OK
@@ -68,7 +67,7 @@
영향 있는 작업
지원 테이블 생성/확인
-
현재 연결 사용자에 백오피스 지원 테이블, 시퀀스, 컬럼을 생성하거나 보강합니다. VPD·ORDS runtime은 실행하지 않습니다.
+
현재 연결 사용자에 운영 지원 테이블, 시퀀스, 컬럼을 생성하거나 보강합니다. VPD·ORDS runtime은 실행하지 않습니다.
diff --git a/src/main/resources/templates/settings.html b/src/main/resources/templates/settings.html
index d29c464..2a170e5 100644
--- a/src/main/resources/templates/settings.html
+++ b/src/main/resources/templates/settings.html
@@ -1,14 +1,13 @@
-
+
-
연결 설정
-
백오피스가 ORDS를 호출할 주소를 관리합니다. DB 지원 DDL은 별도 안전 화면에서 실행합니다.
+
시스템 설정
- 이 화면에서 바꾸는 범위 보기
+ 도움말
여기서는 ORDS Base URL만 저장합니다. VPD runtime, grant, 지원 테이블 생성처럼 DB에 영향을 주는 작업은 DB 준비 상태 에서 별도로 확인·실행합니다.
@@ -25,7 +24,7 @@
ORDS 연결
ORDS Base URL
-
저장 후 권한 결과 확인과 연동 도구가 이 주소를 사용합니다.
+
저장 후 접근 검증과 조회 연동이 이 주소를 사용합니다.
diff --git a/src/test/java/com/cloudhandson/vpdbackoffice/web/GuidedFlowTemplateTest.java b/src/test/java/com/cloudhandson/vpdbackoffice/web/GuidedFlowTemplateTest.java
index 1d5e9b6..d8a417d 100644
--- a/src/test/java/com/cloudhandson/vpdbackoffice/web/GuidedFlowTemplateTest.java
+++ b/src/test/java/com/cloudhandson/vpdbackoffice/web/GuidedFlowTemplateTest.java
@@ -5,6 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.List;
import org.junit.jupiter.api.Test;
class GuidedFlowTemplateTest {
@@ -12,18 +13,43 @@ class GuidedFlowTemplateTest {
@Test
void dashboardPrioritizesActionsAndKeepsDetailCollapsed() throws IOException {
String html = template("dashboard.html");
+ String layout = template("fragments/layout.html");
assertThat(html)
- .contains("th:replace=\"~{fragments/layout :: head('VPD 권한 백오피스')}\"")
- .contains("누가 어떤 데이터를 볼 수 있는지 설정하고 확인하세요")
- .contains("권한 결과 확인")
- .contains("권한 규칙 관리")
- .contains("권한 적용 4단계")
- .contains("workflow-steps")
+ .contains("th:replace=\"~{fragments/layout :: head('VPD 권한 운영')}\"")
+ .contains("권한 관리")
+ .contains("접근 검증")
+ .contains("접근 정책")
.contains("현재 상태")
- .contains("작동 방식과 등록 대상 보기")
+ .contains("상세 현황")
.contains("")
- .doesNotContain("journey-card");
+ .doesNotContain("journey-card")
+ .doesNotContain("dashboard-workflow")
+ .doesNotContain(">01<", ">02<");
+ assertThat(layout)
+ .contains("VPD 권한 운영")
+ .contains("데이터 보호")
+ .contains("접근 검증")
+ .contains("지식 검색")
+ .contains("시스템 관리")
+ .doesNotContain("VPD Backoffice");
+ }
+
+ @Test
+ void productPagesKeepBackgroundGuidanceBehindAConsistentHelpControl() throws IOException {
+ for (String page : List.of(
+ "permissions.html", "vpd-policies.html", "tokens.html", "probe.html", "objects.html",
+ "effective-matrix.html", "users.html", "groups.html", "roles.html", "vector-knowledge.html",
+ "operation-status.html", "settings.html", "settings-database.html", "ords-handlers.html",
+ "vpd-filter-policies.html", "mcp-chatbot.html", "mcp-reasoning.html", "mcp-client-demo.html",
+ "mcp-sse.html")) {
+ assertThat(template(page))
+ .contains("도움말 ")
+ .doesNotContain("context-summary")
+ .doesNotContain("architectureStrip");
+ }
+ assertThat(template("vector-knowledge.html"))
+ .doesNotContain("1 · CONTENT", "2 · ACCESS POLICY", "3 · SEARCH");
}
@Test
@@ -129,7 +155,7 @@ class GuidedFlowTemplateTest {
String database = template("settings-database.html");
assertThat(settings)
- .contains("연결 설정")
+ .contains("시스템 설정")
.contains("/settings/database")
.doesNotContain("action=\"/settings/database/initialize\"");
assertThat(database)