TechBridge

트리거(Trigger) 완전 정복 — BEFORE/AFTER · 감사 로그 자동화 실전

← 목록으로

📋 실습 안내

✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기 내 코드 실행 결과
🎯 완성 미리보기 목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기 이번 강의 전용
  선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. BEFORE INSERT 트리거에서 RETURN NULL을 하면 어떻게 되는가?
💡 BEFORE 트리거에서 NULL을 반환하면 해당 행에 대한 DML 작업(INSERT/UPDATE)이 취소됩니다. AFTER 트리거에서는 반환값이 무시됩니다. 실수로 RETURN을 생략하면 암묵적으로 NULL을 반환해 모든 INSERT/UPDATE가 무시될 수 있으니 주의하세요.
Q2. UPDATE 트리거에서 OLD와 NEW의 차이는?
💡 UPDATE 트리거에서 OLD는 변경 전 행의 값을, NEW는 변경 후 행의 값을 담습니다. BEFORE UPDATE에서는 NEW의 값을 수정해 실제 저장 값을 바꿀 수 있습니다. DELETE 트리거에서는 OLD만 있고, INSERT 트리거에서는 NEW만 있습니다.
Q3. 감사 로그 트리거에서 TG_OP와 TG_TABLE_NAME은 무엇인가?
💡 TG_OP는 트리거를 유발한 작업(INSERT, UPDATE, DELETE, TRUNCATE)을 문자열로 담습니다. TG_TABLE_NAME은 트리거가 걸린 테이블 이름입니다. 이 특수 변수들을 활용하면 하나의 트리거 함수를 여러 테이블에 범용으로 적용할 수 있습니다.
Q4. WHEN 조건부 트리거의 장점은?
💡 WHEN 조건이 거짓이면 트리거 함수 자체가 호출되지 않아 오버헤드가 최소화됩니다. 예: WHEN (OLD.salary IS DISTINCT FROM NEW.salary)는 salary가 변경된 행에 대해서만 트리거를 실행합니다. 트리거 함수 내에서 IF 조건으로 처리하는 것보다 효율적입니다.
Q5. 대량 데이터 INSERT 시 트리거로 인한 성능 저하를 해결하는 방법은?
💡 ALTER TABLE tablename DISABLE TRIGGER ALL로 트리거를 일시 비활성화하고 대량 데이터를 로드한 후 ENABLE TRIGGER ALL로 다시 활성화할 수 있습니다. 이 방법은 데이터 마이그레이션, 대량 배치 처리, 초기 데이터 로드 시 자주 사용됩니다. 트리거를 삭제하고 다시 만드는 것보다 안전합니다.
🎉

퀴즈 통과!

점수: 0점 — 수고하셨습니다!

다음 강의로 →
😅

아쉽네요!

점수: 0점 — 70점 이상이 되어야 통과합니다.