3.6 KiB
3.6 KiB
설계서: VPD/Redaction 회귀 테스트 매트릭스 자동화 (#458)
상태: Approved 작성: [AI] Architect · 최종수정: 2026-06-25 추적성 — Redmine: #458 · 관련 ADR: 없음 · 구현 파일:
scripts/vpd-ords-regression-test.sh,run.sh· 테스트:./run.sh backoffice-vpd-ords-test,mvn test
1. 목적 (Why)
VPD filter, ORDS handler, Redaction 설정 변경 후에도 Bearer Token별 조회 행 수와 민감 컬럼 노출 결과가 유지되는지 자동으로 검증한다.
2. 범위 (Scope)
- 포함: 임시 bearer token 생성, ORDS POST 호출, 응답 JSON 검증, token revoke, 실패 증거 파일 저장.
- 제외: ORDS metadata 생성, VPD policy 생성, UI E2E 브라우저 테스트.
3. 인수조건 (Acceptance Criteria)
- SQLcl로 임시 token을 생성하고 종료 시 revoke한다.
- HR token은 3행
[1,2,6],CONTENTS미노출을 검증한다. - SELF token은 1행
[3],CONTENTS미노출을 검증한다. - ALL token은 6행
[1,2,3,4,5,6],CONTENTS노출을 검증한다. - 실패 시 request/response 파일 위치를 출력한다.
./run.sh backoffice-vpd-ords-test로 실행할 수 있다.
4. 컨텍스트 & 제약
- SQLcl이 필요하다.
SQLCL_BIN이 있으면 그 값을 쓰고, 없으면 PATH의sql을 찾는다. - DB 접속은
.env의BACKOFFICE_DB_USERNAME,BACKOFFICE_DB_PASSWORD,ADB_TNS를 사용한다. - ORDS base URL은
BACKOFFICE_ORDS_BASE_URL이 있으면 쓰고, 없으면 현재 백오피스 기본값을 사용한다. - token 원문은 출력하지 않는다.
5. 아키텍처 개요
run.sh backoffice-vpd-ords-test
-> scripts/vpd-ords-regression-test.sh
-> SQLcl INSERT temp tokens
-> curl POST ORDS documents endpoint
-> Python JSON assertions
-> SQLcl revoke temp tokens
6. 데이터 모델
- 테스트 token description:
codex issue458 regression. - 사용자 매트릭스:
101: HR 부서 권한102: SELF 권한103: ALL 권한 +CONTENTS노출 권한
7. 함수 명세 (Function Specs)
| 함수 | 책임(1줄) | 시그니처(잠정) | 입력 | 출력 | 에러/실패 | 복잡? |
|---|---|---|---|---|---|---|
run_sqlcl |
SQLcl에 SQL stdin을 전달 | bash function | SQL text | SQLcl output | SQLcl exit code | 단순 |
call_and_assert |
ORDS 호출 후 JSON 결과 검증 | bash function | label, token, expected rows | PASS/FAIL | 실패 시 exit 1 | 복잡 |
8. 흐름 / 알고리즘
.env를 로드한다.- SQLcl/JDK/DB/ORDS 환경을 확인한다.
- UUID 기반 token 3개를 생성한다.
- SQLcl로 token hash를 DB에 insert한다.
- ORDS endpoint를 호출해
items행 수, DOC_ID, CONTENTS 노출 수를 검증한다. - 성공/실패와 관계없이 token을 revoke한다.
9. 엣지케이스 & 에러 처리
- SQLcl 없음: 실행 전 명확한 메시지로 실패.
- ORDS 200 아님: response body 파일 경로 출력.
- JSON parse 실패: response body 일부와 파일 경로 출력.
- 중간 실패: cleanup trap으로 token revoke 시도.
10. 테스트 계획
SQLCL_BIN=/tmp/sqlcl/sqlcl/bin/sql ./run.sh backoffice-vpd-ords-testmvn test
11. 리스크 & 대안 검토
- 선택: bash + SQLcl + curl + Python 표준 json. 배포 의존성을 추가하지 않고 운영자가 그대로 실행할 수 있다.
- 대안: JUnit 통합 테스트. Maven에서 외부 ORDS/ADB를 항상 요구하게 되어 로컬 단위 테스트가 불안정해진다.
12. 미해결 질문 (Open Questions)
- SQLcl/JDK 경로 자동 탐지는 #460 운영 런북에서 더 정리한다.