트리거(Trigger)는 데이터베이스 관리 시스템(DBMS)에서 특정한 이벤트가 발생할 떄 자동으로 실행되는 일종의 저장된 프로시저 또는 코드 블록. 트리거는 데이터의 무결성을 유지하고, 비즈니스 로직을 자동화하며 데이터베이스 작업을 감시하는 데 유용하게 사용. 트리거는 주로 INSERT, UPDATE, DELETE와 같은 데이터 조작 언어(DML) 명령이 실행될 때 동작, 데이터베이스 상태 변경에 반응하여 특정 작업 수행.
but
so
CREATE TRIGGER CheckEmployeeAge
BEFORE INSERT ON Employees
FOR EACH ROW
BEGIN
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '직원의 나이는 18세 이상이어야 합니다.';
END IF;
END;
CREATE TRIGGER LogEmployeeChanges
AFTER UPDATE ON Employees
FOR EACH ROW
BEGIN
INSERT INTO Employees_Log (employee_id, old_salary, new_salary, change_date)
VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
END;
CREATE TRIGGER UpdateCustomerTotal
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN
UPDATE Customers
SET total_order_amount = total_order_amount + NEW.order_amount
WHERE Customers.id = NEW.customer_id;
END;
신입 및 취업 준비생 Java와 Spring 백엔드 개발자 입장에서 트리거와 관련된 실습을 진행하려면 다음과 같은 프로젝트 또는 실습 과제를 수행할 수 있습니다. 이는 트리거의 개념을 이해하고 데이터베이스와 백엔드의 연동을 경험하는 데 도움이 됩니다.
목표: 사용자의 데이터 변경 내역을 자동으로 기록하는 시스템을 구현합니다.
실습 계획:
1. DB 설계:
Users 테이블 (사용자 정보 저장).Users_Log 테이블 (변경 내역 저장).Users 테이블: id, name, email 등의 컬럼 포함.Users_Log 테이블: log_id, user_id, change_type, old_value, new_value, change_date 컬럼 포함.트리거 작성:
AFTER INSERT, AFTER UPDATE 트리거를 작성하여 Users_Log 테이블에 변경 사항 기록.CREATE TRIGGER LogUserChanges
AFTER UPDATE ON Users
FOR EACH ROW
BEGIN
INSERT INTO Users_Log (user_id, change_type, old_value, new_value, change_date)
VALUES (OLD.id, 'UPDATE', OLD.name, NEW.name, NOW());
END;
Spring 연동:
Users와 Users_Log 테이블과 매핑.테스트:
목표: 주문(Order)이 생성되면 고객(Customer)의 총 주문 금액(total_order_amount)을 자동 갱신.
실습 계획:
1. DB 설계:
Customers 테이블: id, name, total_order_amount.Orders 테이블: order_id, customer_id, order_amount, order_date.트리거 작성:
Customers 테이블의 total_order_amount를 업데이트하는 트리거 작성.CREATE TRIGGER UpdateCustomerTotal
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN
UPDATE Customers
SET total_order_amount = total_order_amount + NEW.order_amount
WHERE id = NEW.customer_id;
END;
Spring 연동:
Customer와 Order 엔티티를 작성.Customers 테이블의 total_order_amount가 자동으로 업데이트되는지 확인.테스트:
목표: 입력된 데이터가 비즈니스 규칙을 위반하면 트리거로 차단.
실습 계획:
1. DB 설계:
Employees 테이블: id, name, age, position.트리거 작성:
CREATE TRIGGER PreventUnderageEmployee
BEFORE INSERT ON Employees
FOR EACH ROW
BEGIN
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '직원의 나이는 18세 이상이어야 합니다.';
END IF;
END;
Spring 연동:
테스트:
목표: 특정 테이블의 데이터가 변경되면 실시간 알림을 전송.
실습 계획:
1. DB 설계:
Notifications 테이블: notification_id, message, created_at.트리거 작성:
CREATE TRIGGER NotifyOnNewOrder
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN
INSERT INTO Notifications (message, created_at)
VALUES (CONCAT('새로운 주문이 추가되었습니다. 주문 ID: ', NEW.order_id), NOW());
END;
Spring 연동:
테스트:
목표: 트리거 실행 내역을 기록하고, Spring으로 대시보드를 만들어 실시간으로 확인.
실습 계획:
1. DB 설계:
Trigger_Log 테이블: log_id, trigger_name, action_time, details.트리거 작성:
Trigger_Log 테이블에 기록.CREATE TRIGGER LogTriggerExecution
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN
INSERT INTO Trigger_Log (trigger_name, action_time, details)
VALUES ('LogTriggerExecution', NOW(), 'Orders 테이블에 새로운 데이터 삽입');
END;
Spring 연동:
Trigger_Log 엔티티를 생성하고, 대시보드 API 구현.테스트:
이러한 실습을 통해 데이터베이스 트리거의 개념을 이해하고, Java와 Spring 백엔드와 연동하는 경험을 쌓을 수 있습니다. 실습 후 결과를 블로그나 포트폴리오로 정리하면 취업 준비에도 유용할 것입니다.