변경 이력 (ChangeLog)
컴플라이언스 페이지 헤더 우측의 변경 이력 버튼을 누르면 우측에서 슬라이드 인 되는 사이드 패널이 열리며, /api/v1/compliance/ prefix 의 모든 mutation (POST/PUT/PATCH/DELETE) 트래픽이 시간 역순으로 표시됩니다.
설계 요약
- 별도 ChangeLog 테이블을 두지 않습니다.
AuditMiddleware가 OpenSearch (gend-audit-*index) 로 적재한 기존 감사 로그를 그대로 재사용합니다. - 컴플라이언스 페이지에서는 endpoint prefix 필터 (
/api/v1/compliance/) + mutation method 필터만 적용한 read-only 뷰입니다. GET호출은 의도적으로 제외 — 변경 행위만 추적하기 위함입니다.- 운영 추적/감사 목적이라 사용자는 read-only 권한도 별도로 부여받지 않습니다 (admin 만 호출 가능).
항목 구조
| 필드 | 설명 |
|---|---|
method | HTTP 메서드 — POST (생성, 녹색), PUT/PATCH (수정, 파랑), DELETE (삭제, 빨강) 배지로 표시 |
timestamp | 호출 시각 (브라우저 로컬 시간으로 변환) |
endpoint | 원본 path (/api/v1/compliance/assessments/{id}/run 등) |
user_id | Keycloak sub 또는 표시명. 매핑 누락 시 — |
status_code | HTTP 응답 코드. 4xx/5xx 는 빨강으로 강조 |
페이지네이션과 필터
GET /api/v1/compliance/changelog 는 다음 쿼리 파라미터를 받습니다.
| 파라미터 | 기본값 | 설명 |
|---|---|---|
page | 1 | 1 부터 시작하는 페이지 번호 |
page_size | 50 (UI: 100) | 페이지 크기. 1 ~ 200 |
start_date | — | ISO 8601 시작 시간 (선택) |
end_date | — | ISO 8601 종료 시간 (선택) |
UI 사이드 패널은 기본적으로 최근 100건 (page_size=100) 을 로드합니다. 더 긴 범위가 필요하면 감사 로그 페이지에서 OpenSearch 원본을 조회하세요.
API 엔드포인트
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/compliance/changelog | 컴플라이언스 mutation 이력 조회 (admin) |
응답 예시:
{
"items": [
{
"timestamp": "2026-05-22T08:11:42.591Z",
"user_id": "admin",
"method": "POST",
"endpoint": "/api/v1/compliance/assessments/abc-123/run",
"status_code": 200
}
],
"total": 137,
"page": 1,
"page_size": 50
}
트러블슈팅
| 증상 | 원인 / 조치 |
|---|---|
패널 본문에 OpenSearch 인증 실패 — admin 자격증명/role 점검 필요 | gend-api 가 OpenSearch 에 admin role 로 접속할 수 없음. opensearch-admin Secret (gend namespace) 의 username/password 확인 후 gend-api 재기동 |
패널 본문에 OpenSearch 연결 실패 — 변경 이력을 조회할 수 없습니다 | OpenSearch Pod 다운 또는 Service 미해석. kubectl get pod -n gend -l app=opensearch 로 상태 확인 |
| 변경 이력이 비어 있음 | 해당 시간 범위에 실제 mutation 호출이 없었거나, OpenSearch index pattern 이 일치하지 않음. Audit Chain 운영 가이드 참조 |