Procedure vs Trigger
˙Procedure
Procedure는 사전에 DB에 SQL문 등을 사용한 명령문을 저장해 두어서, 특정 동작 시에 해당 Procedure를 호출하여 내부 동작을 처리한다. 마치, 하나의 Function 처럼 생성하여, 다양한 형태의 프로그램에서 사용 가능하다.
즉, Procedure는 일종의 Transaction 언어로, 특정 함수 처럼 사용하도록 하는 기능을 함으로써, IF문과 WHILE 문 등의 제어문을 사용할 수 있고, Procedure 단위로 특정 기능을 효율적으로 관리할 수 있도록 한다. 또한, 재사용이 가능하며, 별도의 로직을 서버에 반영하지 않고, DB적으로만 ALTER 처리 하여 로직을 변경할 수 있다. 하지만, 별도의 관리가 필요하기 때문에, 유지보수나 특정 작업에 대한 부분에서는 오히려 역효과를 가져올 수도 있으며, Debug 등의 작업이 어렵기 때문에, 이슈 발생 시 원인 파악에 제약이 생길 수 있다.
˙Trigger
Trigger는 DB Table에 작성하여, 해당 Table에 특정 동작(CRUD 등)이 이루어지면, Trigger에 설정된 SQL문 등이 자동으로 실행된다. 주로, 무결성 유지가 필요하거나 메시지 출력, 로그 적재 등의 목적으로 사용하기도 한다. 참고로, Trigger 내부에서는 별도의 Procedure를 연결하여 호출 할 수 없다.
즉, 어떠한 Transaction이 발생할 때에, 연결되어 절차형 SQL 처럼 실행 될 수 있도록 기능을 하는 것으로, DDL이나 DML 등의 DB 작업에 주로 사용된다. Trigger는 규칙적으로 관리할 수 있는 동시에, 데이터 무결성을 강화할 수 있도록 하지만, Procedure와 마찬가지로 유지보수나 특정 작업에 대해서는 오히려 역 효과를 가져올 수 있고, 과도하게 사용할 경우에는 복잡한 의존성이 만들어 질 수 있다.
˙Procedure와 Trigger의 차이
▷ Procedure
- CREATE PROCUDURE를 통하여 생성하며, 함수 내 호출을 통한 실행
- 함수 내 호출을 통하여 실행하기 때문에 ROLLBACK 처리 가능
- 내부에서 별도의 Tigger를 선언(정의) 할 수 없음
▷ Trigger
- CREATE TRIGGER를 통하여 생성하며, DB 동작 이후 자동 실행
- DB 동작 이후 자동으로 실행되기 때문에 ROLLBACK 처리 불가
- 내부에서 별도의 Procedure를 선언(정의) 할 수 있음