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 @@ - +
- 권한 관리 -

누가 어떤 데이터를 볼 수 있는지 설정하고 확인하세요.

-

권한 규칙을 변경한 뒤, 검증 세션에서 실제 조회 결과를 확인할 수 있습니다.

+ VPD 권한 운영 +

권한 관리

- 이 화면의 전체 흐름 보기 + 도움말

사용자·그룹·역할에 권한을 연결하면 Oracle VPD가 요청할 때마다 그 규칙을 읽어 허용된 행만 반환합니다. 별도 SQL 필터를 만드는 일은 예외적인 고급 작업입니다.

@@ -28,18 +27,14 @@
-
-
- 권장 순서 -

권한 적용 4단계

-
-
    -
  1. 1권한 설계사용자·역할·데이터 범위
  2. -
  3. 2DB 보호 연결VPD 정책 적용
  4. -
  5. 3검증 세션사용자 토큰 발급
  6. -
  7. 4결과 확인ORDS 실제 조회
  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 @@ - +
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에 전달합니다. + 검색어를 평문으로 입력하면 시스템이 같은 임베딩 방식으로 벡터화해 전용 조회 경로에 전달합니다. - +
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 @@
- + @@ -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/main/resources/templates/tokens.html b/src/main/resources/templates/tokens.html index 1fea281..672f6f9 100644 --- a/src/main/resources/templates/tokens.html +++ b/src/main/resources/templates/tokens.html @@ -1,28 +1,25 @@ - +
    -

    검증 세션 발급

    -

    선택한 사용자의 접근 권한을 확인할 일회성 Bearer Token을 발급합니다.

    +

    검증 세션

    - 토큰 보관 방식 설명 보기 + 도움말

    검증할 사용자를 나타내는 토큰을 만들고, 한 번만 표시되는 원문을 다음 단계에서 사용합니다. 원문은 저장하지 않고 해시와 식별용 prefix만 보관합니다.

    -
    -
    발급 완료 · 지금 한 번만 표시됩니다 -

    이 토큰 원문을 복사한 뒤 권한 결과 확인으로 이동하세요.

    +

    이 토큰 원문을 복사한 뒤 접근 검증으로 이동하세요.

    화면을 떠난 뒤에는 원문을 다시 볼 수 없습니다. 잃어버리면 기존 토큰을 복구하지 말고 새로 발급하세요.

    diff --git a/src/main/resources/templates/users.html b/src/main/resources/templates/users.html index ba6724e..3067e46 100644 --- a/src/main/resources/templates/users.html +++ b/src/main/resources/templates/users.html @@ -1,14 +1,13 @@ - +
    -

    사용자 관리

    -

    토큰과 권한의 기준이 되는 백오피스 사용자를 관리합니다.

    +

    사용자

    - 사용자와 DB 계정의 차이 보기 + 도움말

    Bearer Token과 권한 매핑에 사용할 내부 사용자를 관리합니다. 여기의 사용자는 Oracle DB schema 계정이 아니라 권한체계에서 식별하는 application user입니다.

    diff --git a/src/main/resources/templates/vector-knowledge.html b/src/main/resources/templates/vector-knowledge.html index 2b22206..2c9ba75 100644 --- a/src/main/resources/templates/vector-knowledge.html +++ b/src/main/resources/templates/vector-knowledge.html @@ -1,20 +1,17 @@ - +
    -

    지식 검색 관리

    -

    지식자료를 등록하고 접근 정책에 따라 검색 결과를 제공합니다.

    +

    지식 검색

    - 검색 정책과 처리 방식 + 도움말

    문서는 검색 단위로 나누고 각 단위를 임베딩으로 변환합니다. 기술 태그는 접근 정책의 TAG 조건으로 사용되며, 검색 시 DB 보호 정책이 허용된 지식자료만 남깁니다. Bearer Token은 검증 세션에만 사용되고 검색이 끝나면 폐기됩니다.

    -
    -
    @@ -25,7 +22,6 @@
    - 1 · CONTENT

    지식자료 등록

    같은 문서 ID로 저장하면 최신 내용으로 갱신됩니다.

    @@ -86,7 +82,6 @@
    - 2 · ACCESS POLICY

    접근 정책 설정

    역할별 기술 태그 접근 규칙은 권한 관리에서 관리합니다.

    @@ -115,7 +110,6 @@ AND NOT (DENY TAG C OR DENY TAG D)
    - 3 · SEARCH

    권한 기반 지식 검색

    검색 권한 주체에 대한 검증용 세션을 사용하고 완료 후 폐기합니다.

    diff --git a/src/main/resources/templates/vpd-filter-policies.html b/src/main/resources/templates/vpd-filter-policies.html index 8d8704d..0a73636 100644 --- a/src/main/resources/templates/vpd-filter-policies.html +++ b/src/main/resources/templates/vpd-filter-policies.html @@ -1,15 +1,14 @@ - +
    고급 설정 -

    별도 Filter 관리

    -

    기본 권한체계로 표현할 수 없는 객체 전용 조건만 관리합니다.

    +

    고급 접근 조건

    - 별도 Filter를 사용하는 기준 보기 + 도움말

    일반 권한은 이 화면에서 만들지 않습니다. 권한체계로 표현할 수 없는 객체 전용 조건이 있을 때만 별도 함수를 추가합니다.

    diff --git a/src/main/resources/templates/vpd-policies.html b/src/main/resources/templates/vpd-policies.html index 5faf29a..08fbf27 100644 --- a/src/main/resources/templates/vpd-policies.html +++ b/src/main/resources/templates/vpd-policies.html @@ -1,20 +1,17 @@ - +
    -

    DB 보호 연결

    -

    권한체계를 실제 TABLE/VIEW에 연결하고 적용 상태를 확인합니다.

    +

    보호 상태

    - VPD 보호 연결의 의미 보기 + 도움말

    권한 화면에서 만든 사용자·그룹·역할·행·열 규칙을 Oracle VPD가 실제 TABLE/VIEW에 적용하도록 연결합니다.

    -
    -
    조회할 수 없습니다. message @@ -111,7 +108,7 @@
    @@ -130,7 +127,7 @@
- + 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)
LayerItemTypeStatusDetailNext Action
Backoffice Metadata운영 메타데이터 CB_APP_USER TABLE OK VPD 상태 Policy Filter백오피스 권한 테이블운영 권한 테이블 검증용 ORDS 경로