이벤트 훅 (EventHook)

데이터 변경 이벤트에 Rust 클로저를 등록하여 자동으로 실행할 수 있습니다.


개요

EventHook은 Rust 클로저 기반으로 특정 테이블에서 INSERT, UPDATE, DELETE가 발생할 때 자동으로 실행되는 콜백 함수입니다.

참고: SQL 표준 Trigger는 Trigger 가이드를 참조하세요.

실행 시점 설명
Before 데이터 변경 전에 실행 (검증, 변환 용도)
After 데이터 변경 후에 실행 (감사 로그, 알림 용도)

트리거 등록

use dbx_core::automation::trigger::{Trigger, TriggerEvent, TriggerTiming};

let audit_trigger = Trigger::new(
    "audit_log",                    // 트리거 이름
    "users",                        // 대상 테이블
    TriggerEvent::Insert,           // INSERT 시 작동
    TriggerTiming::After,           // 변경 후 실행
    |event| {
        println!("새 사용자 추가: {:?}", event.new_values);
        Ok(())
    },
);

// 레지스트리에 등록
let mut registry = TriggerRegistry::new();
registry.register(audit_trigger);

이벤트 종류

pub enum TriggerEvent {
    Insert,     // 새 행 삽입 시
    Update,     // 기존 행 수정 시
    Delete,     // 행 삭제 시
    Any,        // 모든 변경 시
}

활용 예시

데이터 검증 (Before 트리거)

Trigger::new(
    "validate_age", "users",
    TriggerEvent::Insert, TriggerTiming::Before,
    |event| {
        let age = event.get_field::<i64>("age")?;
        if age < 0 || age > 150 {
            return Err(DbxError::Validation("나이가 유효하지 않습니다".into()));
        }
        Ok(())
    },
);

변경 이력 추적 (After 트리거)

Trigger::new(
    "log_changes", "orders",
    TriggerEvent::Any, TriggerTiming::After,
    |event| {
        log::info!("[{}] {}: {:?}", event.table, event.event_type, event.timestamp);
        Ok(())
    },
);

다음 단계


Copyright © 2026 ByteLogicCore. MIT OR Apache-2.0 License.

This site uses Just the Docs, a documentation theme for Jekyll.