피드로 돌아가기
Audit Logging in Node.js: Who Did What, When, and How to Prove It
Dev.toDev.to
Security

DB Level 제약조건을 통한 Immutable Audit Log 설계 및 GDPR 준수 아키텍처 구현

Audit Logging in Node.js: Who Did What, When, and How to Prove It

ZyVOP2026년 6월 9일11intermediate

Context

운영 로그와 구분되는 증거 중심의 Audit Log 필요성 증대. 기존 로그 시스템의 가변성으로 인한 데이터 무결성 훼손 위험과 GDPR의 처리 활동 기록 요구사항 충족 필요.

Technical Solution

  • Append-only 구조 확보를 위해 Database Rule을 적용하여 UPDATE 및 DELETE 쿼리 원천 차단
  • User 삭제 후에도 추적 가능성을 유지하기 위해 actor_email 필드를 Denormalization 하여 저장
  • 상태 변화 추적을 위해 old_value와 new_value를 JSONB 타입으로 설계하여 Snapshot 기반의 변경 이력 관리
  • PII 유출 방지를 위해 실제 데이터 대신 ID와 변경된 필드명만 기록하는 Payload 필터링 전략 채택
  • 메인 비즈니스 로직의 가용성 보장을 위해 Audit Log 기록 실패 시 에러를 전파하지 않고 별도 로깅하는 비동기적 처리 구조 설계
  • DSAR(Data Subject Access Request) 대응을 위해 actor_id와 resource_id에 인덱스를 구성하여 특정 사용자의 모든 활동 내역을 고속 조회

1. Audit Log 테이블 생성 시 DB Rule 또는 Trigger를 통해 수정/삭제 권한을 물리적으로 제한했는가?

2. 사용자 삭제 시 로그가 유실되지 않도록 필수 식별 정보를 Denormalization 했는가?

3. 로그 페이로드에 PII(개인정보)가 직접 포함되지 않고 Reference ID 위주로 구성되었는가?

4. Audit Log 기록 실패가 메인 트랜잭션을 롤백시키지 않도록 예외 처리 설계가 되어 있는가?

5. GDPR 준수를 위한 데이터 보유 기간(Retention Policy)과 추출 쿼리가 준비되었는가?

원문 읽기