이 섹션에서는 데이터베이스의 일부 특정 데이터가 변경될 때마다 트리거 되는 이벤트인 데이터베이스 트리거 이벤트에 대해 설명합니다.
- 데이터베이스 트리거 이벤트는 데이터베이스의 특정 데이터가 변경될 때마다 트리거 되는 일종의 백엔드 이벤트입니다. 이것이 의미하는 바는 무언가가 생성, 변경 또는 삭제될 때마다 이벤트가 트리거 된다는 것입니다.
- 이 이벤트를 동적 표현식(Dynamic expression)과 결합하면 이벤트에서 감시하려는 변경Type을 정확하게 지정할 수 있습니다.
(1) 데이터베이스 트리거 이벤트 생성
1. 이벤트 만들기
여기서는 사용자의 이메일변경에 대한 예제를 설정해보겠습니다.
- 사용자가 이메일 주소를 변경할 때마다 감시하고 그럴 때마다 Action을 수행하는 트리거를 설정하려고 합니다.
- 데이터베이스 트리거 이벤트는 Bubble' 백엔드의 일부입니다. 즉, 이를 설정하는 첫 번째 단계는 백엔드 편집기로 이동하는 것입니다.
아래의 사진과 같이, New database trigger event... 를 클릭하고 새 데이터베이스 트리거 이벤트를 선택합니다.
데이터베이스 트리거 이벤트가 생성되는 즉시 Bubble은 해당 이벤트에 대한 설정을 표시합니다.
- 먼저 설명이 포함된 이름을 지정해 보겠습니다. 이것은 참조용이며 작동 방식에는 아무런 영향을 미치지 않습니다.
- type필드에서 이벤트가 감시할 데이터 유형을 선택해야 합니다. 사용자가 이메일을 변경할 때마다 이벤트가 트리거 되기를 원하므로 user로 설정합니다. (데이터베이스 user의 필드에 email 정보가 있음)
2. 표현식 만들기
다음 단계는 동적 표현식(Dynamic expression)을 작성하는 것입니다. 이벤트가 어떤 종류의 변화에 반응하기를 원하는지 Bubble에게 알려주는 부분입니다.
다른 곳에서 사용되는 표현식과 구조적으로 유사하지만 데이터베이스 트리거 이벤트에 사용되는 표현식은 두 개의 데이터 소스에만 액세스 할 수 있다는 점에서 다릅니다.
- 변경 전의 데이터
- 변경 후의 데이터
이 예제에서 두 데이터 소스는 다음 데이터를 나타냅니다.
- 데이터베이스의 변경되기 전의 사용자 데이터
- 데이터베이스의 변경된 후의 사용자 데이터
- 다시 말하면; 이벤트는 사용자의 변경에 반응대기하고 있으며 변경이 발생하기 전과 후에 사용자에 대한 반응변경을 모두 동일한 워크플로우에서 제공합니다.
이것은 우리의 표현식이 무엇을 의미한다는 것일까요?
즉, 사용자의 데이터가 변경되기 전과 변경된 후의 두 가지 값을 비교할 수 있다는 것입니다.
- 이것이 우리가 어떤 종류의 데이터를 볼지 Bubble에게 알려주는 표현식을 작성하는 방법입니다.
- 변경 전 사용자에게 저장된 이메일이 변경 후 사용자의 것과 동일한지 확인하여 그렇지 않은 경우 워크플로가 트리거 됩니다.
표현식은 다음과 같아야 합니다.
: 이 표현식에서 User before change/User after change는 모두 데이터 소스이고 email은 연산자이고 is not 은 비교표현입니다.
(2) 데이터베이스 트리거 이벤트 이해
1. 이벤트는 표현식으로 인해 이벤트가 중지될 수 있습니다.
데이터베이스 트리거 이벤트는 데이터 유형에 대한 모든 변경 사항을 확인하고 , 이벤트가 발생하는 경우 이벤트를 트리거합니다.
그런 다음 Bubble은 Only when 표현식을 확인하고 음수 값( no )을 반환하는 경우 나머지 워크플로 실행을 중지합니다.
이는 몇 가지 이유로 알아두면 유용합니다.
- 해당 데이터 유형이 변경될 때마다 표현식이 실행되는 경우에만 데이터베이스 트리거 이벤트가 발생합니다.
- 실행 조건 없이 많은 데이터베이스 트리거 이벤트를 설정하면 의도한 것보다 더 많은 용량을 소비하게 될 수 있습니다. 사용 시 주의를 기울이고 표현식을 사용하여 불필요한 워크플로 실행을 중지하십시오
2. 데이터베이스 트리거 이벤트의 제한사항
데이터베이스 트리거 이벤트에는 다음의 몇 가지 제한사항이 있습니다.
1) 전체 관리 권한으로 실행됩니다.
- 위의 예제설정처럼, "현재 이메일 데이터를 변경한 사용자"로 국한한 사용자를 확인할 수 있지만 트리거가 실행되는 동안에는 전체 관리권한으로 실행되기 때문에 트리거 워크플로는 개인 정보 보호역할이 적용되지 않으므로 검색 시에 현재 사용자의 결과뿐만 아니라 모든 결과를 반환합니다.
2) 하나의 데이터베이스 트리거 이벤트는 두 번째 또는 그 자체를 트리거하지 않습니다.
- 데이터베이스 트리거에 데이터를 변경하는 작업이 있는 경우 해당 변경은 두 번째 트리거 이벤트(동일한 트리거 이벤트 포함)를 트리거하지 않습니다.
- 이것은 트리거의 영원한 무한루프로 이어질 수 있기 때문인데, 데이터베이스 트리거 이벤트에 의해 시작된 워크플로가 보조 이벤트를 트리거하도록 하려면, Action을 API 워크플로로 이동하고 트리거 워크플로에서 해당 워크플로를 예약할 수 있습니다. (무한루프 방지를 위해 Schedule API 사용)
3) 동일한 워크플로에서 동일한 항목을 여러 번 변경하면 이벤트가 한 번만 트리거 됩니다.
- 이벤트를 트리거해야 하는 여러 작업이 포함된 워크플로가 있는 경우 해당 워크플로에 대해 한 번만 실행됩니다.