# Redmine #490 - VPD Policy/Filter/적용 계층 정리 설계 ## 프로젝트 개요 VPD Backoffice는 Oracle Database VPD/ORDS 기능을 백오피스 권한 테이블로 제어하기 위한 Spring Boot 관리 도구다. VPD 설정 화면은 Oracle DB의 TABLE/VIEW에 VPD policy를 적용하고, policy는 filter function을 참조한다. ORDS는 VPD가 적용된 TABLE/VIEW를 HTTP API로 서빙하는 별도 레이어다. ## 목표 `VPD 설정` 화면에서 개별 적용과 벌크 적용이 같은 계층으로 보이게 정리한다. 정리할 계층: 1. `Filter Function`: 행 predicate를 반환하는 PL/SQL 함수 2. `Policy Template`: policy name, filter function, statement type, enabled/check option 조합 3. `TABLE/VIEW 적용`: 선택한 policy template을 개별 객체 또는 스키마 객체 목록에 적용 ## 문제 현재 벌크 적용 폼은 `VPD Filter Function`과 `Filter predicate`를 직접 입력받는다. 이 표현은 filter function을 TABLE/VIEW에 직접 붙이는 것처럼 보이고, 개별 적용의 `Policy / Filter` 선택 흐름과도 다르다. ## 설계 - 개별 적용과 벌크 적용 모두 `Policy Template` 선택을 중심으로 한다. - 선택한 template에서 `policyName`, `functionKey`, statement type, enabled, update check 값을 hidden field와 checkbox로 동기화한다. - 벌크 적용 backend는 선택한 `policyName`을 명시적으로 받아 각 대상 TABLE/VIEW에 같은 policy name으로 적용한다. - filter function 자동 생성 입력은 이번 화면에서 제거한다. filter/policy 관리는 `Filter Policy 관리` 메뉴에서 수행한다. - 선택한 template의 policy name, filter function, statement types를 preview로 표시한다. ## 완료 기준 - VPD 설정 화면에서 개별 적용과 벌크 적용 모두 `적용할 Policy Template`을 선택한다. - 벌크 적용 화면에서 `VPD Filter Function`, `Filter predicate` 직접 입력이 사라진다. - 선택한 template의 policy/function/statement/enabled/check option preview가 표시된다. - controller/service가 벌크 적용 시 선택된 policy name과 function key를 사용한다. - 기존 개별 적용 동작은 유지된다. ## 검증 - `mvn test` - Playwright 화면 확인: - `/vpd-policies` 개별 적용에 policy template preview 표시 - `/vpd-policies` 벌크 적용에 policy template select 표시 - 벌크 적용에 filter function 직접 선택/textarea가 없음 - 390px 모바일 body overflow 없음