Trigger

김기현·2025년 6월 12일

Database

목록 보기
7/24

트리거란?

트리거는 INSERT, UPDATE, DELETE 같은 데이터 조작 이벤트가 발생할 때 자동으로 실행되는 DB 객체(프로시저) 입니다.


트리거의 주요 구성 요소

구성 요소설명
이벤트(Event)트리거가 반응할 조건 (INSERT, UPDATE, DELETE)
시점(Timing)이벤트 전(BEFORE) 또는 후(AFTER)
작업(Task)이벤트 발생 시 수행할 SQL 문 또는 로직

트리거의 종류

  1. DML 트리거 (Data Manipulation Language Trigger)

    • 행 단위 또는 문 단위로 작동.
    • 아래에서 설명할 BEFORE 트리거와 AFTER 트리거는 DML 트리거의 하위 유형이다.
  2. BEFORE 트리거

    • 데이터 변경 전에 실행.
    • 주로 검증, 값 자동 설정 등에 사용.
  3. AFTER 트리거

    • 데이터 변경 후 실행.
    • 주로 로그 기록, 알림 전송, 관련 테이블 동기화 등에 사용.
  4. INSTEAD OF 트리거

    • 주로 뷰(View) 에서 사용됨.
    • 원래의 DML 동작을 대체함.

예시 (MySQL-InnoDB)

-- 테이블 스키마
CREATE TABLE users
(
    id         INT AUTO_INCREMENT PRIMARY KEY,
    username   VARCHAR(50),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE user_create_logs
(
    log_id   INT AUTO_INCREMENT PRIMARY KEY,
    user_id  INT,
    action   VARCHAR(50),
    log_time DATETIME
);

-- 트리거
DELIMITER $$

CREATE TRIGGER trg_after_insert_user
    AFTER INSERT
    ON users
    FOR EACH ROW
BEGIN
    INSERT INTO user_create_logs(user_id, action, log_time)
    VALUES (NEW.id, 'INSERT', NOW());
END $$

DELIMITER;

이 트리거는 users 테이블에 데이터가 추가될 때마다 user_create_logs에 로그를 자동 저장합니다.


트리거의 장점

  • 데이터 무결성 보장
  • 반복 작업 자동화
  • 감시 및 로깅 시스템 구현 용이

주의 사항

  • 복잡한 로직 피하기: 디버깅 어렵기 때문에 복잡한 로직을 피해야 한다.
  • 성능 저하: 과도한 트리거 사용은 성능에 악영향을 미친다.
  • 트리거 순서 지정: 트리거 순서는 지정이 어렵기 때문에 의도하지 않게 동작할 수 있다.

트리거는 언제 쓰나?

사용 사례설명
로그 기록사용자가 테이블에 어떤 작업을 했는지 추적
감사(Audit)보안 및 변경 이력 관리
자동 값 계산입력 시 자동으로 특정 필드를 계산
관련 테이블 동기화다른 테이블의 데이터를 자동으로 갱신
profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글