데이터베이스를 다루다 보면 트리거(Trigger)와 프로시저(Procedure)라는 두 가지 저장 객체를 자주 접하게 됩니다. 두 기능은 이름은 비슷하지만 동작 방식과 용도가 확연히 다릅니다. 이 글에서는 트리거와 프로시저의 차이점을 항목별로 살펴보겠습니다.
트리거(Trigger)란?
- 테이블에
INSERT,DELETE,UPDATE와 같은 이벤트가 발생하면 암묵적으로(자동으로) 실행됩니다. - 트리거의 중첩(Nesting)은 테이블을 통해 구현할 수 있습니다.
- 다른 트리거 내부에서 호출하거나 정의할 수 없습니다.
COMMIT,ROLLBACK,SAVEPOINT와 같은 트랜잭션 제어문을 사용할 수 없습니다.- 참조 무결성(referential integrity)을 유지하는 데 활용됩니다.
- 테이블에서 수행된 작업 이력을 기록하는 방식으로 감사(audit) 목적에도 사용됩니다.
- 값을 반환하지 않습니다.
- 매개변수를 전달받을 수 없습니다.
트리거 정의 문법
CREATE TRIGGER trigger_name
프로시저(Procedure)란?
EXEC,EXECUTE또는 프로시저 이름을 직접 명시하는 방식으로 사용자나 애플리케이션이 명시적으로 호출합니다.- 다른 프로시저 내부에서 호출하고 정의할 수 있습니다.
COMMIT,ROLLBACK,SAVEPOINT와 같은 트랜잭션 제어문을 사용할 수 있습니다.- 사용자가 지정한 특정 작업을 수행하기 위해 사용됩니다.
- 매개변수를 전달받을 수 있습니다.
- 0개부터 n개까지 원하는 만큼 값을 반환할 수 있습니다.
프로시저 정의 문법
CREATE PROCEDURE procedure_name
핵심 차이점 요약
| 구분 | 트리거 | 프로시저 |
|---|---|---|
| 호출 방식 | 이벤트 발생 시 자동 실행 | 사용자·애플리케이션이 명시적 호출 |
| 매개변수 | 전달 불가 | 전달 가능 |
| 반환값 | 없음 | 0~n개 반환 가능 |
| 트랜잭션 제어문 | 사용 불가 | 사용 가능 |
| 중첩 정의 | 다른 트리거 내 정의 불가 | 다른 프로시저 내 정의 가능 |
| 주요 용도 | 참조 무결성 유지, 변경 이력 기록 | 사용자 지정 업무 로직 처리 |
정리하면, 트리거는 데이터 변경 이벤트에 자동으로 반응하는 객체이고, 프로시저는 필요할 때 호출해 사용하는 객체입니다. 데이터 무결성 검증이나 감사 로그 기록에는 트리거가 적합하고, 반복적으로 수행해야 하는 비즈니스 로직 처리에는 프로시저가 더 알맞습니다. 두 기능의 특성을 정확히 이해하고 상황에 맞게 활용하면 데이터베이스의 안정성과 효율성을 모두 높일 수 있습니다.