피드로 돌아가기
Dev.toDatabase
원문 읽기
PHP와 SQLite 기반 Event Sourcing 도입으로 감사 로그 무결성 확보
Building an Event Sourced Video Moderation Audit Log with PHP and SQLite
AI 요약
Context
단일 행 기반의 CRUD 로그 구조로 인해 상태 변경 이력이 소실되는 데이터 파괴적 업데이트 문제 발생. 다수 작업자의 동시 수정 시 최종 상태만 기록되어 작업 추적 불가 및 지역별 세분화된 차단 사유 저장의 한계 직면.
Technical Solution
- Mutable한 CRUD 테이블을 Immutable한 Append-only Event Stream 구조로 전환하여 모든 상태 변경을 개별 사실(Fact)로 기록
- SQLite STRICT 모드를 적용하여 감사 로그의 데이터 타입 무결성을 강제하고 법적 증거력을 확보한 스키마 설계
- FTS5 가상 테이블과 unicode61 토크나이저를 결합하여 CJK(한중일) 언어 기반의 사유 텍스트 검색 최적화
- 비즈니스 로직 상의 현재 상태를 이벤트 스트림의 Fold 연산을 통해 도출하는 Projection 패턴 구현
video_id와sequence기반의 Unique 제약 조건 설정을 통해 이벤트 순서 보장 및 중복 삽입 방지- 기존 CRUD 데이터를
legacy-import식별자를 가진 합성 이벤트로 변환하는 단계적 마이그레이션 전략 채택
실천 포인트
1. 변경 이력이 중요한 도메인인 경우 UPDATE 대신 Append-only 로그 테이블 도입 검토
2. SQLite 사용 시 데이터 무결성을 위해 STRICT 모드 활성화 및 적절한 Index 전략 수립
3. 텍스트 검색 요구사항이 있는 감사 로그에는 FTS5 같은 전문 검색 엔진 통합 고려
4. 무분별한 VACUUM 실행으로 인한 DB Lock 위험을 인지하고 PRAGMA optimize 활용