# Redmine #495 - 설정/초기화 preflight와 DDL 실행 결과 상세화 설계

## 프로젝트 개요

VPD Backoffice는 Oracle Database VPD/ORDS 기능을 백오피스 권한 테이블로 제어하는 Spring Boot 관리 도구다. 사용자는 Oracle DB schema user가 아니라 Bearer Token으로 식별되는 application user이며, 사용자/그룹/역할/권한/행 규칙/컬럼 NULL 처리 설정이 VPD policy function과 ORDS 조회 결과에 반영된다.

## 목표

DB 연결을 다른 ADB나 schema로 바꿨을 때 운영자가 현재 준비 상태를 한 화면에서 판단하고, 앱에서 실행 가능한 초기화 DDL과 sqlcl로 실행해야 하는 작업을 구분해 처리할 수 있게 한다.

## 현재 문제

- `/settings` 화면은 지원 테이블 생성 버튼과 단순 결과 표만 제공한다.
- 현재 연결 사용자와 ORDS parsing schema 권장 구성을 분리해서 보여주지 않는다.
- 필수 테이블, 시퀀스, 컬럼, constraint, VPD context/function/policy, CB_ORDS grants, ORDS enablement 상태를 한 번에 확인하기 어렵다.
- 실행 전에 어떤 SQL이 수행되는지 확인하기 어렵다.
- DDL 실패 시 전역 오류나 짧은 메시지로 끝나 운영자가 어떤 단계에서 실패했는지 파악하기 어렵다.

## 설계

- 설정 화면에 `DB 준비 상태` 섹션을 추가한다.
  - 현재 연결 사용자
  - 권장 ORDS parsing schema: `CB_ORDS`
  - 앱에서 실행 가능 여부와 sqlcl 필요 여부
- preflight 항목을 레이어별로 표시한다.
  - Backoffice Metadata: 지원 테이블, 시퀀스, 컬럼
  - Constraint/Index: 주요 PK/UK constraint
  - VPD Runtime: `CB_AGENT_CTX`, `CB_AGENT_CTX_PKG`, `CB_AGENT_DOC_VPD_FILTER`, `CB_AGENT_CAN_READ_COLUMN`, 적용 policy 존재 여부
  - ORDS Runtime: `CB_ORDS` user, ORDS schema enablement, `CB_ORDS_HANDLER_PKG`
  - Grants: `CB_ORDS`에 필요한 EXECUTE/SELECT 권한
- DDL preview를 추가한다.
  - `/settings/schema/initialize` 버튼이 현재 연결 사용자로 실행할 SQL을 보여준다.
  - sqlcl로 실행할 스크립트 순서와 대표 grant SQL을 별도로 보여준다.
- DDL 실행 결과를 상세화한다.
  - 각 작업의 object, action, status, message, SQL을 표시한다.
  - 실패해도 가능한 범위의 결과를 화면에 남겨 운영자가 실패 지점을 확인할 수 있게 한다.

## 완료 기준

- 설정 화면에서 현재 연결 사용자와 권장 ORDS parsing schema가 보인다.
- 필수 테이블, 시퀀스, 컬럼, constraint, package/context/policy/grants/ORDS enablement 상태가 구분되어 보인다.
- 앱 실행 DDL preview와 sqlcl 실행 순서가 복사 가능한 형태로 보인다.
- `지원 테이블 생성/확인` 실행 후 각 DDL의 성공/존재/실패와 SQL을 확인할 수 있다.
- DB 연결이 불안정하거나 지원 테이블이 없어도 가능한 preflight 정보는 표시되고, 오류는 화면 alert로 감싼다.
- `mvn test`와 설정 화면 desktop/mobile 렌더링을 통과한다.
