본문 바로가기

개발자 강화/백엔드

[개발] DB Trigger란?

DB Trigger란 무엇일까... 살면서 가장 쿼리를 많이 써보고 있어 지금...사람살려...

 

DB Trigger란?

  • DB에서 특정 이벤트(INSERT, UPDATE, DELETE)가 발생하면, 별도의 호출 없이 자동으로 실행됨
  • 특정 작업을 자동화하거나, 변경 사항 기록에 사용함
  • 데이터 무결성 보장: 특정 비즈니스 규칙을 강제해서 데이터 일관성을 유지함

Trigger의 구성 요소

  • Event: 트리거가 실행되는 조건 INSERT, UPDATE, DELETE
  • Timing: 트리거가 이벤트 전 or 후 언제 실행되는지
  • Table: 트리거가 적용될 테이블
  • Trigger Body: 트리거가 실행도리 때 수행할 SQL 문이나 로직.

Trigger 사용 예시

CREATE TABLE EmployeeLogs (
    log_id INT AUTO_INCREMENT PRIMARY KEY,
    emp_id INT,
    operation VARCHAR(10),
    change_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TRIGGER LogEmployeeChanges
AFTER UPDATE ON Employee
FOR EACH ROW
BEGIN
    INSERT INTO EmployeeLogs (emp_id, operation) VALUES (OLD.emp_id, 'UPDATE');
END;

사용자가 테이블 데이터 수정할 때, 변경 기록을 다른 테이블에 저장함

CREATE TRIGGER UpdateInventory
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN
    UPDATE Inventory
    SET stock_quantity = stock_quantity - NEW.order_quantity
    WHERE product_id = NEW.product_id;
END;

신규 주문이 추가되면, 재고를 자동으로 감소함

 

CREATE TRIGGER ValidateSalary
BEFORE INSERT ON Employee
FOR EACH ROW
BEGIN
    IF NEW.salary < 30000 OR NEW.salary > 200000 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Salary must be between 30,000 and 200,000';
    END IF;
END;

특정 범위를 벗어나는 데이터를 입력하면 에러를 발생시킴

 

Trigger 사용 시 주의할 점

  • 디버깅 어려움: 자동으로 실행되므로, 실행 과정과 결과 디버깅이 어려움
  • 성능 저하: 빈번하게 발생하거나, 로직이 복잡하면 DB 성능에 부정적인 영향을 줄 수 있음
  • 의존성 증가: 트리거가 많아지면 시스템의 복잡도가 높아져 유지보수가 어려워짐(<- 이거 ㄹㅇ)

 

Trigger와 프로시저 차이

구분 트리거 Trigger 스토어드 프로시저 Stored Procedure
실행 방식 이벤트 발생 시 자동 실행 개발자가 명시적으로 호출
사용 목적 데이터 무결성 유지, 자동화 복잡한 작업이나 다중 쿼리 실행
호출 방식 이벤트 기반(자동) 수동 호출
적용 대상 테이블의 데이터 변경 이벤트 단일 작업이나 비즈니스 로직

 

 

내가 왜 DB Trigger를 쓰게 되었는지는 다음편에 계속...