3.1 KiB
3.1 KiB
함수 설계서: findVpdPredicate (#567)
부모 설계서: ./README.md · 상태: Approved 작성: [AI] Architect · 구현:
vpd-backoffice/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsProbeService.java:findVpdPredicate· 테스트:mvn test, 운영 smoke
1. 시그니처
private String findVpdPredicate(String bearerToken, ProtectedObject object)
2. 책임 (단일 책임, 1줄)
하나의 pooled DB connection에서 Bearer 기반 context를 설정하고 동일 VPD 함수의 predicate를 조회한 뒤 context를 제거한다.
3. 입력
| 파라미터 | 타입 | 제약/검증 | 설명 |
|---|---|---|---|
bearerToken |
String |
상위 token 검증 통과 | set_user_by_bearer 입력 |
object |
ProtectedObject |
활성 object | predicate의 schema/object 입력 |
4. 출력
- 반환:
ADMIN.CB_AGENT_DOC_VPD_FILTER(owner, object)의 predicate 문자열 또는 조회 불가 시 null. - 부수효과: 같은 connection의 secure application context를 잠시 설정하고 반드시 clear한다. token 원문은 DB 함수 호출 이외의 출력으로 내보내지 않는다.
5. 동작 / 알고리즘
JdbcTemplate.execute(ConnectionCallback)으로 connection을 확보한다.BEGIN admin.cb_agent_ctx_pkg.set_user_by_bearer(?); END;를 실행한다.SELECT admin.cb_agent_doc_vpd_filter(?, ?) FROM dual을 실행한다.finally에서BEGIN admin.cb_agent_ctx_pkg.clear_user; END;를 실행한다.- Spring JDBC/DB runtime 오류는 trace optional 경로에서 null로 변환한다.
6. 에러 & 실패 모드
| 조건 | 처리 | 반환/예외 |
|---|---|---|
| DB 연결/권한 오류 | fallback 경계에서 처리 | null |
| Bearer 매핑 실패 | DB package 오류 | null, 원 ORDS 결과 유지 |
| predicate 함수 오류 | DB query 오류 | null, 원 ORDS 결과 유지 |
| cleanup 오류 | 별도 오류로 덮지 않음 | predicate 결과 또는 null |
7. 엣지케이스
- context setter가 실패해도
finallycleanup을 시도한다. - connection pool에 context가 남지 않아야 한다.
- ORDS와 백오피스가 다른 DB/계정인 구성에서는 null이 정상 fallback 결과일 수 있다.
ADMIN이외 함수 owner는 이번 설계에서 지원하지 않는다.
8. 복잡도 / 성능
- trace가 없는 성공/0행 조회당 DB connection 1회, PL/SQL 1회, predicate SELECT 1회.
- 결과 행 수나 token 수에 비례하지 않는
O(1)DB 호출이며, Handler trace가 있으면 호출하지 않는다.
9. 의존성
- Spring
JdbcTemplate/ConnectionCallback. ADMIN.CB_AGENT_CTX_PKG,ADMIN.CB_AGENT_DOC_VPD_FILTER.- connection pool cleanup semantics.
10. 테스트 케이스
- context setter와 predicate query가 같은 connection에서 실행됨.
- query 성공 후 clear가 실행됨.
- setter/query 실패 후 clear가 시도됨.
- DB privilege 미설정 시 원 ORDS 결과가 유지됨.
11. 추적성
- 인수조건: #567의 “기존 Handler도 trace fallback 제공” 및 “trace 실패가 권한 결과를 실패로 만들지 않음”.
- 관련 ADR: 없음.