# 데이터 접근 제어 백오피스 전체 UX/기능 리뷰

작성일: 2026-07-13
범위: 현재 Spring Boot 백오피스 화면, VPD/ASO/ORDS/MCP/Select AI 운영 흐름
상태: 1차 P0 UX 보강 구현/배포 완료 — 2026-07-14

## 1. 결론

단순 문구 정리만으로는 충분하지 않다. 지금 화면은 기능은 많이 들어와 있지만, 사용자가 “업무 규칙을 넣으면 DB에서 어떻게 행/컬럼으로 적용되는가”를 끝까지 따라가기 어렵다.

가장 큰 개선 축은 세 가지다.

1. 전체 흐름을 작업 단위로 묶어야 한다.
   - 사용자/역할 생성
   - 행 접근 규칙 등록
   - 보호 정책 연결
   - 컬럼 마스킹 설정
   - 토큰 발급
   - 실제 접근 검증

2. 화면별 기본/고급을 분리해야 한다.
   - 기본 화면: 업무 의미, 현재 상태, 다음 버튼, 검증 결과
   - 고급 화면: VPD predicate, PL/SQL source, ORDS handler, raw JSON, SQL trace

3. 모든 설정 화면에서 “설정값 → DB 적용 → 실제 검증”이 이어져야 한다.
   - 지금은 각 화면이 기능 단위로는 존재하지만, 다음 단계 연결과 검증 루프가 약하다.

## 1.1 2026-07-14 반영 결과

이 리뷰의 P0 항목 중 화면 설명·상태 요약·검증 흐름 보강으로 처리 가능한 범위를 먼저 반영했다. DB VPD/ASO 정책 함수, 권한 계산 로직, ORDS 실행 경로는 변경하지 않았다.

| P0 항목 | 반영 상태 | 근거 |
|---|---|---|
| 대시보드 전체 그림 + 체크리스트 | 반영 | `dashboard.html`, `app.css` |
| 접근 검증 결과의 단계형 설명 | 반영 | `probe.html`, `fragments/probe-result.html` |
| 행 접근 규칙 predicate 변환 설명 | 반영 | `permissions.html` |
| 컬럼 마스킹 단계/사용자별 결과 설명 | 반영 | `masking-rules.html` |
| 운영 현황 health 요약 | 반영 | `OperationHealthSummary.java`, `operation-status.html` |

검증 결과:

- 커밋: `a40102a Improve data access control UX guidance`
- 테스트: `mvn -q test` 통과
- 패키징: `mvn -q -DskipTests package` 통과
- 배포: `161.33.6.45`의 `vpd-backoffice.service` active
- 공개 확인: `https://kb.cloud-handson.com/login`에서 `데이터 접근 제어 콘솔` 확인

## 2. 페르소나별 핵심 불만

| 페르소나 | 현재 불만 | 필요한 개선 |
|---|---|---|
| 일반 사용자 | VPD/ASO/ORDS/MCP가 섞여 무엇을 눌러야 할지 모른다 | “이 사용자는 무엇을 볼 수 있나?” 중심의 단순 경로 |
| 운영 관리자 | 변경 전후 영향과 실제 적용 여부를 한 번에 보기 어렵다 | 영향 사용자, 대상 객체, 검증 버튼, 최근 결과 |
| 적용 담당자 | 업무 조건이 WHERE predicate로 바뀌는 연결이 화면마다 끊긴다 | 업무 조건 → 저장 rule → VPD/ASO 해석 → 검증 결과 |
| DB 관리자 | 백오피스 설정과 DB 실제 정책이 일치하는지 증적이 부족하다 | DBMS_RLS/DBMS_REDACT/FGA/ORDS 상태를 한곳에서 확인 |
| 보안 담당자 | guest/read-only, 토큰 처리, 원문 표시 예외의 경계가 더 명확해야 한다 | 변경 가능 여부, 원문 표시 범위, 감사 증적 |
| 데모/영업 사용자 | KB 보험 시나리오가 화면 흐름으로 자연스럽게 보이지 않는다 | 설계사/지점장/관리자 시나리오 preset과 결과 비교 |

## 3. 우선순위 개선안

### P0. 반드시 해야 할 개선

#### 3.1 대시보드를 “전체 그림 + 오늘 할 일” 중심으로 재구성

현재 대시보드는 구조 설명은 좋아졌지만, 사용자가 다음 행동을 결정하기에는 아직 기능 나열에 가깝다.

개선:

- 상단에 3개 핵심 카드:
  - 행 접근: “누가 어떤 행을 보는가”
  - 컬럼 마스킹: “허용된 행의 어떤 컬럼을 원문/마스킹으로 보는가”
  - 접근 검증: “토큰으로 실제 DB 결과를 확인한다”
- “처음 설정” 체크리스트:
  1. 사용자/역할 준비
  2. 행 접근 규칙 등록
  3. 보호 상태 적용
  4. 컬럼 마스킹 연결
  5. 토큰 발급
  6. 접근 검증
- DB 상태 요약:
  - VPD 정책 누락 수
  - ASO 정책 불일치 수
  - ORDS handler 누락 수
  - 최근 검증 실패 수

#### 3.2 접근 검증 결과 화면을 탭/단계형으로 재설계

접근 검증은 이 백오피스의 최종 판단 화면이다. 현재도 결과는 나오지만, “왜 그렇게 나왔는지”를 단계별로 보기에는 부족하다.

개선:

- 결과를 4개 섹션으로 분리:
  1. 토큰 해석 결과: 사용자, stakeholder, role, channel
  2. 행 접근 결과: 반환 행 수, 적용된 VPD predicate, ALLOW/DENY 근거
  3. 컬럼 마스킹 결과: 마스킹 대상 컬럼, 원문 허용 여부, ASO policy 상태
  4. DB 감사 증적: FGA SQL, RLS_INFO, request id
- 잘못된 토큰은 DB 오류처럼 보이지 않게:
  - 토큰 없음
  - 등록되지 않은 토큰
  - 만료/회수 토큰
  - 권한 없음
  을 분리한다.
- 결과 테이블에서 마스킹된 컬럼에 아이콘/툴팁 표시.

#### 3.3 행 접근 규칙 화면에 “업무 조건 → predicate 변환”을 더 강하게 표시

현재도 wizard와 preview가 있으나, 적용 담당자가 원하는 것은 “내가 고른 업무 조건이 실제 어떤 WHERE 조각이 되는가”다.

개선:

- 조건 선택 옆에 즉시 preview:
  - 본인 담당 계약 → `FC_ID = SYS_CONTEXT(...STAKEHOLDER_USER_ID...)`
  - 채널 고객 → `EXISTS (...) FC_CHANNEL = SYS_CONTEXT(...STAKEHOLDER_CHANNEL...)`
  - 정적 SQL 조건 → 검증된 현재 객체 컬럼 조건만 허용
- 목록 기본값은 raw rule보다 업무 문장 우선.
- 상세에는 저장 rule, 변환 predicate, 결합 방식(AND/OR/DENY)을 같이 표시.
- 삭제/변경 시 영향 사용자 수와 최근 검증 결과 링크 표시.

#### 3.4 컬럼 마스킹 화면에서 설정 단계와 DB 적용 상태를 더 선명하게 분리

지금 기능은 맞지만 사용자에게는 “대상 컬럼 추가”, “규칙 연결”, “사용자 원문 허용”, “DB 정책 동기화”가 섞여 보일 수 있다.

개선:

- 단계형 표시:
  1. 마스킹 후보 컬럼 등록
  2. 기본 마스킹 규칙 연결
  3. 원문 표시 허용 사용자 지정
  4. DB ASO 정책 동기화 상태 확인
- 컬럼별 “현재 실제 동작” preview:
  - 일반 사용자: 마스킹
  - 원문 허용 사용자: 원문
  - 행 접근 권한 없는 사용자: 행 없음
- DBMS_REDACT 정책 상태와 백오피스 설정 차이를 컬럼 단위로 표시.

#### 3.5 운영 현황을 통합 health dashboard로 강화

현재 운영 현황은 표가 있지만, 장애 상황에서 “무엇이 문제인지”를 바로 알려주는 구조가 약하다.

개선:

- 상단 전체 상태:
  - 정상 / 주의 / 장애
- 영역별 health:
  - App 로그인/세션
  - DB 연결
  - VPD 정책
  - ASO 정책
  - ORDS handler
  - MCP/Select AI endpoint
- 각 상태에:
  - 마지막 확인 시각
  - 영향받는 기능
  - 다음 조치
  - 관련 화면 이동 링크

## 4. 화면별 추가 리뷰

| 화면 | 현재 상태 | 남은 개선 |
|---|---|---|
| 로그인 | 제품명 정리됨 | 백오피스 계정과 업무 사용자 토큰이 다르다는 안내, guest/read-only 안내 보강 |
| 대시보드 | 전체 구조 설명 있음 | 실제 작업 체크리스트와 상태 요약 부족 |
| 사용자 | application user 설명 있음 | `KB_STAKEHOLDERS` 매핑 상태, 직접 역할/그룹 역할/토큰 발급 링크 부족 |
| 그룹 | 영향 사용자/역할 일부 표시 | 그룹이 지점/채널 조건이 아니라 역할 상속 단위라는 설명 보강 |
| 역할 | 삭제 영향 표시 있음 | 역할별 접근 규칙 수, 원문 허용 컬럼 수, 영향 사용자 요약 보강 |
| 행 접근 규칙 | wizard와 preview 있음 | 업무 조건별 predicate preview, 삭제 영향/검증 링크 보강 |
| 컬럼 원문 표시 허용 | VPD/ASO 경계 설명 있음 | 조건부 원문 허용이 아니라 사용자 단위 UNMASK라는 한계 명시 필요 |
| 사용자별 접근 확인 | 설정 기반 권한 확인 가능 | 실제 DB 결과가 아니라 예상 권한이라는 구분과 접근 검증 CTA 강화 |
| 보호 상태 | VPD 적용 상태 확인 가능 | `설정됨 / DB 적용됨 / 최근 검증 성공` 3단계 배지 필요 |
| 컬럼 마스킹 | ASO 동기화 기능 있음 | 컬럼별 실제 사용자 결과 preview와 정책 불일치 원인 설명 필요 |
| 검증 세션 | 토큰 발급/이력 있음 | “토큰은 권한을 담지 않고 사용자 식별만 한다”를 더 강하게 표시 |
| 접근 검증 | 핵심 검증 가능 | 결과를 토큰/context/행/컬럼/감사 증적으로 분리 필요 |
| 조회 대상 | ORDS 대상 등록 가능 | 신규 대상 등록 후 다음 단계 안내 부족 |
| 정형 데이터 조회 | 관리자 preview 가능 | 사용자별 접근 결과가 아님을 더 강하게 표시, 권한 기준 컬럼 배지 필요 |
| 조회 연동 | ORDS source 확인 가능 | 기본은 endpoint 상태, source는 Advanced로 더 숨기는 편이 좋음 |
| 지식 검색 | 등록/검색/정책이 한 화면 | 자료 등록, 접근 정책, 검색 검증을 탭으로 분리 필요 |
| 대화형 검색 | 자연어 질의 가능 | 결과를 답변/정형 결과/근거 문서/오류 원인으로 분리 필요 |
| 검색 해석 | 라우팅 결과 확인 가능 | 단계별 타임라인과 소요시간, showprompt/showsql Advanced 필요 |
| MCP 서비스 | endpoint/tool 설명 있음 | 복사 가능한 client 설정 명세와 curl 예시를 상단에 제공 |
| 연동 점검 | client 호출 가능 | 연결 가능/도구 호출 가능/권한 적용 결과 3단계 health 필요 |
| 운영 현황 | 정책/ORDS/ASO 상태 표 있음 | 통합 health, 최근 확인 시각, 영향 범위, 조치 링크 필요 |
| 행 접근 필터 구조 | 기술 흐름 있음 | 함수 소스보다 블록별 설명과 Git/DB source 차이 표시가 우선 |
| DB 메타데이터 | comment/annotation 수정 가능 | 권한 기준 컬럼 배지, Select AI 실패 리포트와 연결 필요 |
| 보안 SQL 스크립트 | 원문/LLM 설명 가능 | 스크립트별 목적/대상/변경 정책/검증 방법 summary card 필요 |
| 고급 접근 조건 | Advanced 성격 있음 | 기본 접근 규칙으로 해결 가능한지 체크리스트 선행 필요 |
| 시스템 설정 | ORDS Base URL 관리 | 저장 후 자동 health check와 영향 기능 표시 필요 |
| DB 준비 상태 | preflight와 DDL 있음 | 확인 작업과 변경 작업을 더 강하게 분리, 실행 전 영향 요약 필요 |

## 5. 설계상 더 명확히 해야 할 원칙

### 5.1 토큰은 권한 묶음이 아니다

토큰은 사용자를 식별하고 context를 세팅하는 열쇠다. 실제 권한은 요청 시점에 사용자/그룹/역할/행 접근 규칙/마스킹 규칙을 조회해서 계산된다.

화면 전반에 이 문장을 반복해야 한다.

### 5.2 VPD와 ASO의 결합 방식

- VPD는 행을 줄인다.
- ASO는 남은 행의 컬럼 표시 방식을 바꾼다.
- 원문 표시 허용은 행 접근 권한을 늘리지 않는다.
- 행 접근 권한이 없으면 ASO 원문 허용도 의미가 없다.

### 5.3 “집계만 허용”은 별도 설계가 필요하다

ASO로 마스킹된 컬럼에 대해 자연스럽게 집계가 된다고 가정하면 안 된다. 지점장에게 상세는 마스킹하고 집계만 허용하려면 trusted API, aggregate 전용 path, 또는 별도 검증 가능한 query boundary가 필요하다.

### 5.4 Select AI 품질은 메타데이터 운영 문제다

자연어 질의 실패를 프롬프트로만 해결하면 재현성이 떨어진다. 테이블/컬럼 comment, annotation, constraint, 업무명, 조인 키를 운영자가 보강하는 흐름이 있어야 한다.

## 6. 추천 구현 순서

### 1차: 운영 사고를 줄이는 P0

1. 접근 검증 결과 화면 재구성
2. 운영 현황 health dashboard 강화
3. 행 접근 규칙 predicate preview/영향도 강화
4. 컬럼 마스킹 단계형 구성과 사용자별 preview

### 2차: 온보딩과 이해도 개선

1. 대시보드 체크리스트와 상태 요약
2. 사용자/역할/그룹 영향도 보강
3. 보호 상태 3단계 배지
4. 조회 대상 등록 후 다음 단계 안내

### 3차: MCP/Select AI 품질과 고급 운영

1. DB 메타데이터 권한 기준 컬럼 배지
2. MCP/검색 결과 타임라인과 소요시간 표시
3. 보안 SQL 스크립트 summary card
4. 고급 접근 조건 체크리스트와 검증 강화
