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를 쓰게 되었는지는 다음편에 계속...
'개발자 강화 > 백엔드' 카테고리의 다른 글
[매일메일] Record를 VO가 아닌 DTO로 사용하는 이유? (BE.250128) (1) | 2025.01.29 |
---|---|
[매일메일] HTTPS란? (BE. 250127) (0) | 2025.01.27 |
[매일메일] WAS와 웹서버의 차이점? (BE.250124) (0) | 2025.01.24 |
[매일메일] Java의 Stack, Queue, Deque란? (BE.2501223) (0) | 2025.01.23 |
[매일메일] SSR vs CSR, SPA vs MPA란? (BE.250122) (0) | 2025.01.22 |