데이터베이스 트리거 (Database Trigger)
이 페이지는 바이브 코딩 문맥에서 자주 쓰이는 데이터베이스 트리거 (Database Trigger)의 뜻과 쓰임을 중급 난이도 기준으로 정리한 AI 용어사전 항목입니다. 정의와 맥락, 관련 용어 5개 순서로 묶었으니, 아래 설명을 먼저 읽고 연결된 개념과 글까지 이어서 보면 이해가 빨라집니다.
데이터베이스 트리거(Database Trigger)는 테이블의 삽입·수정·삭제 같은 지정된 사건이 발생할 때 데이터베이스가 연결된 함수를 실행하는 장치입니다. 실행 시점과 대상 사건, 행마다 실행할지 문장마다 실행할지를 설정합니다. 데이터 변경과 함께 검증이나 기록을 처리할 때 쓰이며, 자동화 도구에서 작업을 시작하는 일반적인 트리거와는 실행 위치가 다릅니다.
데이터 변경 사건과 실행 함수
PostgreSQL의 트리거 동작 설명은 특정 종류의 작업이 수행될 때 지정한 함수가 자동 호출되는 구조를 설명합니다. 애플리케이션에서 함수를 직접 부르지 않아도 해당 테이블에서 조건에 맞는 사건이 발생하면 실행됩니다. 같은 테이블을 여러 API나 관리 도구가 변경하더라도 데이터베이스에 등록된 동작을 공유할 수 있다는 의미입니다.
상품 정보가 바뀔 때 변경 내역을 다른 테이블에 기록하는 기능을 생각할 수 있습니다. API에 기록 코드를 넣으면 그 API를 거친 변경만 처리하지만, 데이터베이스 트리거는 등록된 사건을 기준으로 실행됩니다. 다만 어느 컬럼의 변경을 기록하고 무엇을 제외하는지는 함수와 조건에 달려 있습니다. 트리거를 등록한 사실만으로 모든 변경의 의미를 완전하게 보존하는 감사 기록이 생기지는 않습니다.
SQL 제약 조건으로 표현할 수 있는 규칙과 실행 함수가 필요한 처리는 구별합니다. 값이 비어 있지 않아야 하거나 키가 중복되지 않아야 하는 조건은 데이터베이스의 해당 제약 기능으로 표현할 수 있습니다. 트리거는 그보다 절차적인 처리를 수행할 수 있지만 조사할 코드와 실행 관계도 늘어납니다. 규칙의 위치가 어디인지 알아야 저장이 거부되거나 추가 값이 생긴 이유를 찾을 수 있습니다.
실행 시점과 호출 단위
PostgreSQL의 CREATE TRIGGER 문서는 BEFORE, AFTER, INSTEAD OF 같은 실행 시점을 구분합니다. BEFORE는 대상 동작 전에, AFTER는 동작 이후에 실행하는 방식입니다. INSTEAD OF는 정해진 조건에서 원래 동작을 대신 수행하는 용도로 쓰입니다. 지원되는 대상과 사건의 조합은 데이터베이스와 트리거 종류에 따라 제한됩니다.
FOR EACH ROW와 FOR EACH STATEMENT는 함수가 호출되는 단위가 다릅니다. 한 번의 수정 문장이 여러 행을 바꾸면 행 단위 트리거는 각 행에서 실행되고, 문장 단위 트리거는 그 문장을 기준으로 실행됩니다. 같은 SQL 한 번이라는 이유로 함수도 한 번만 호출된다고 가정하면 처리량을 잘못 예상할 수 있습니다. 행 수와 함수 내부 작업량을 함께 보아야 합니다.
조건식 WHEN을 사용하면 트리거 함수를 호출할지 판단하는 조건을 둘 수 있습니다. 특정 상태로 바뀌었을 때만 기록하는 식의 동작을 구성할 수 있지만, 조건식에서 사용할 수 있는 정보에는 종류별 제한이 있습니다. 어떤 변경이든 발생하면 실행하는지, 값이 실제로 달라졌을 때만 실행하는지를 나누어 읽습니다. 컬럼이 수정 대상에 언급된 것과 값이 달라진 것은 별개의 조건입니다.
트랜잭션과 숨은 실행 경로
트리거 동작 설명은 트리거가 원래 문장과 같은 트랜잭션의 일부로 실행되며, 오류가 나면 그 효과가 함께 취소될 수 있음을 설명합니다. 저장 요청이 실패했을 때 API 코드만 읽어서는 트리거 함수에서 난 오류를 놓칠 수 있습니다. 오류 기록에서 원래 문장과 이어진 함수 호출을 함께 찾으면 실패 경로를 좁힐 수 있습니다.
트리거 함수가 다른 테이블을 변경하면 그 테이블에 설정된 트리거도 실행될 수 있습니다. 이런 연쇄 관계는 필요한 자동 처리를 만들지만, 같은 변경이 되풀이되는 재귀나 예상하지 못한 실행량의 원인이 될 수도 있습니다. PostgreSQL 문서는 무한 재귀를 피할 책임이 작성자에게 있다고 설명합니다. 관계를 기록할 때는 어떤 테이블의 어떤 사건이 다음 작업을 일으키는지 드러내는 것이 유용합니다.
시간이 오래 걸리는 처리나 외부 서비스 호출을 붙일 때는 원래 저장 작업과 어떤 실패 관계를 맺는지 검토합니다. 데이터베이스 내부 변경의 취소와 외부 서비스에서 이미 수행한 작업의 취소는 같은 기능이 아닙니다. 트리거를 끄거나 함수를 바꾸는 수정도 기존 저장 경로에 영향을 줍니다. 검증에는 정상 저장뿐 아니라 조건 불일치, 여러 행 변경, 함수 오류 때의 결과가 포함됩니다.
관련 용어
데이터베이스 트리거 (Database Trigger)와 함께 자주 언급되는 개념들입니다. 비슷한 말처럼 보여도 역할과 쓰임은 다를 수 있습니다.
