← 목록
기타 2026-07-17 3KB 읽기 3분

nexus 규칙 변경 이력 (rule versioning) — 누가·언제·무엇

개요

규칙 편집 UI(감사서버.js :9802)에 파운드리식 버전 관리. 저장 시 변경 diff·이력 로그·스냅샷·롤백.

무엇을 했는지

규칙차이.한선 정본 (diff 로직)

  • 입력: old 규칙행들 → "===" → new 규칙행들. 우선순위(R번호) 키로 추가/삭제/수정 판별.
  • 수정은 조건·결정·사상 필드별 old→new 상세. 출력 "종류|R우선|상세" + "요약|추가N 삭제N 수정N".
  • 검증: 추가/삭제/수정/다중필드(결정+사상 동시)/변경없음 전 케이스.

백엔드(감사서버.js)

  • 저장 핸들러: 변경 전 읽기→규칙차이.toau diff→백업(.bak)→쓰기→스냅샷 저장→이력 append→diff 반환.
  • 이력 로그 data/규칙이력.psv: 시각|편집자|규칙표|요약|버전(millis seq). 시각·편집자=JS(한선씨 Date 미지원), diff=한선씨 정본.
  • 버전별 전체 스냅샷 data/규칙이력/<규칙표>_<seq>.psv (롤백용).
  • GET /api/rules/history?name= : 누가·언제·무엇 목록(최신 먼저).
  • POST /api/rules/rollback {name,버전,편집자}: 스냅샷 복원+백업+이력 기록(롤백도 감사).

UI

  • 편집자 입력·이력 패널(이력 버튼)·버전별 되돌리기 버튼. 저장/롤백 시 diff 색상 표시(추가 티·삭제 타·수정 옴).

검증(실측)

  • 저장→다중필드 diff(결정 과다거부→일시보류, 사상 타→옴).
  • 이력 누적(김철수·이영희·시스템복원…), 롤백 실복원(R2 결정 되돌림·R5 삭제), 롤백도 이력 기록.
  • 라우팅 함정 수정: /api/rules/history가 /api/rules GET에 선매칭 → 규칙읽기 조건 /api/rules?로 좁힘.
  • 넥서스 5도메인 회귀·감사서버 200 무변경. 테스트 이력/스냅샷 정리(깨끗한 시작).

관련 파일

  • libs/규칙차이.한선 (diff 정본)
  • 감사서버.js (저장 diff+이력+스냅샷, history/rollback 엔드포인트, UI)
  • data/규칙이력.psv, data/규칙이력/ (런타임 생성)

잔여 이슈

  • 스냅샷 무한 누적(정리 정책 없음) — 대량 편집 시 data/규칙이력/ 증가. 보존 기간·개수 상한 정책 후보.
  • 편집자 인증 없음(자기신고) — 실운영 시 계정 연동 필요.

추가 (스냅샷 보존 정책 — 같은 날, R43)

스냅샷 무한 누적 방지. 정책=규칙표별 최신 20개 항상 보존(롤백 안전) + 그 외 30일 초과분 삭제.
  • libs/스냅샷정리.한선 정본: 입력 상한|보존일|age0,age1,…(최신순), 출력 삭제 index(index≥상한 그리고 age>보존일).
  • ★VM 함정: 한선씨 12자리↑ 정수(1e12) 오버플로(millis 13자리 절단, 1e12→음수). 시각 산술=JS(Date.now·age_days), 한선씨엔 소정수만 전달.
  • 감사서버.js 스냅샷정리(name): readdir→seq 최신순→age_days 계산(JS)→스냅샷정리.toau 판정→삭제 index unlink. 저장·롤백 후 호출.
  • 이력 응답 복원가능 플래그(스냅샷 존재), UI 만료 버전 되돌리기 비활성.
  • 검증: mock 28→저장 트리거→최신20 보존+30일↑ 9개 삭제, 개수만 초과·기간 이내는 보존, 롤백 to 삭제버전 graceful "스냅샷 없음".
→ 잔여이슈 "스냅샷 누적정리정책" 해소. 상한/보존일=상수(스냅샷상한20·보존일30).