# 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 없음
