# Supabase + Brew

Supabase auth.users 데이터베이스 웹훅으로 Brew 자동화를 트리거하세요. 이메일 인증, 비밀번호 변경, 익명 계정의 정식 계정 전환, 차단 또는 차단 해제를 나타내는 파생 이벤트도 포함돼요.

정식 URL: https://brew.new/ko/browse/integrations/supabase

- 방향: 데이터 가져오기
- 연결 방식: 웹훅 시크릿
- 인증 이벤트 트리거

## 사용 가능한 기능

- **이벤트 트리거**: Supabase auth.users 데이터베이스 웹훅으로 Brew 자동화를 트리거해요. 이메일 인증, 비밀번호 변경, 로그인을 나타내는 파생 이벤트도 포함돼요.

## 인증 이벤트를 유용한 이메일로 바꾸세요

Supabase를 연결하면 누군가 가입하거나, 이메일을 인증하거나, 비밀번호를 바꾸거나, 차단될 때 브랜드에 맞는 이메일을 보낼 수 있어요. 설정 스크립트가 auth.users 테이블에 데이터베이스 트리거를 추가하고, Brew는 각 변경 사항을 자동화 트리거 12개 중 하나로 바꿔요.

로그인, 이메일 인증 링크, 매직 링크, 비밀번호 재설정은 계속 Supabase Auth가 담당해요. Brew는 이런 변경에 이어지는 이메일을 만들고 보내요.


## 만들 수 있는 것

- 웰컴 이메일: 첫 이메일이 인증된 주소에만 가도록 auth.user.email_confirmed 이벤트에서 시작하세요. Brew는 email_confirmed_at을 설정하는 업데이트에서만 이 이벤트를 파생하므로, 처음부터 인증된 상태로 행이 생성된 사용자에게서는 auth.user.created 이벤트만 발생해요. 프로젝트가 어느 경우에 해당하는지 확인한 다음, 웰컴 이메일이 중복되지 않도록 트리거는 하나만 고르세요.
- 정식 계정 전환 환영 이메일: auth.user.upgraded_from_anonymous 이벤트는 is_anonymous가 true에서 false로 바뀔 때, 즉 익명 사용자가 정식 계정으로 전환될 때 발생해요.
- 비밀번호 변경 안내: auth.user.password_changed 이벤트는 encrypted_password가 바뀔 때마다 발생해요. 페이로드에는 비밀번호 데이터가 없어요. 사용자가 직접 바꾼 게 아닐 수도 있으니 자체 계정 복구 페이지로 연결하세요.
- 이메일 변경 안내: auth.user.email_changed 이벤트에는 이전 주소가 previousValue에, 새 주소가 newValue에 담겨 있어요. Brew는 새 주소로 발송해요.
- 초대 후속 이메일: auth.user.invited 이벤트는 업데이트로 invited_at이 설정되면 발생해요. 초대 링크는 Supabase Auth가 직접 보내고, Brew 이메일로는 온보딩 안내를 더할 수 있어요. 이 트리거에 의존하기 전에 프로젝트에서 실제 테스트 초대를 보내 보세요.
- 이용 정지 안내: auth.user.banned 이벤트는 banned_until이 설정되면 발생하며 그 값을 newValue에 담아요. auth.user.unbanned 이벤트는 banned_until 값이 지워지면 발생해요.
- 삭제 확인: auth.user.deleted 이벤트는 행이 삭제되면 발생하며, 삭제된 행의 이메일 주소도 그대로 담고 있어요.

## 로그인 이벤트는 재방문을 뜻하지 않아요

auth.user.signed_in 이벤트는 last_sign_in_at이 바뀌면 발생해요. Supabase 토큰 갱신도 이 열을 바꾸기 때문에, 사용자가 로그인 상태를 유지하는 동안 이 이벤트가 여러 번 발생할 수 있어요. 그러니 이 이벤트를 사용자가 오랜만에 돌아왔다는 신호로 볼 수는 없어요.

이 이벤트는 파생 이벤트 중 우선순위도 가장 낮아요. 같은 업데이트로 이메일이 인증되거나 익명 사용자가 정식 계정으로 전환되면, Brew는 auth.user.signed_in 대신 그 이벤트를 발생시켜요.

비활성 사용자에게 안부 이메일을 보내려면, 애플리케이션이 자체 활동 데이터로 비활성 여부를 판단하게 하세요. 조건에 맞는 사용자에게만 별도의 Brew 사용자 지정 이벤트를 보내고, 그 이벤트로 활성 자동화가 안부 이메일을 보내게 하세요.

두 경로를 모두 테스트하세요. 비활성 사용자는 안부 이메일을 받고, 확인 전에 활동한 사용자는 받지 않아야 해요.


## Brew에서 Supabase 설정하기

- ‘연동’을 열고 Supabase를 선택한 다음 ‘웹훅 URL 생성’을 누르세요. Brew가 설정 SQL에 그 URL을 미리 채워 넣어요.
- openssl rand -hex 32로 서명 시크릿을 만드세요. 이 시크릿은 Brew도 Supabase도 발급하지 않으며, Brew에서는 16자 이상이어야 해요.
- Supabase에서 SQL Editor를 열고 설정 SQL을 붙여 넣으세요. 시크릿 자리 표시자를 내 시크릿으로 바꾼 다음 실행하세요. 이 SQL은 pgcrypto와 pg_net을 활성화하고, 시크릿을 Supabase Vault에 저장하고, auth.users의 삽입·업데이트·삭제를 감지하는 데이터베이스 트리거를 추가해요.
- 같은 시크릿을 Brew에 붙여 넣고 ‘연결’을 누르세요. ‘연결’을 누르면 이벤트 12개 모두에 대한 자동화 트리거가 만들어져요. 이벤트별로 켜고 끄는 스위치는 없어요.
- 연결한 뒤 Supabase의 Authentication > Users에서 테스트 사용자를 만드세요. Brew의 상태가 ‘테스트 이벤트 대기 중’에서 ‘연결됨’으로 바뀌고, ‘최근 이벤트’에 해당 웹훅이 ‘서명 확인됨’으로 표시돼요.
- 자동화를 만들고 Supabase 이벤트를 선택한 다음, 아직 초안일 때 테스트를 보내 보세요. 일치하는 이벤트가 도착하면 활성 상태인 자동화만 실행돼요.
- auth 스키마에 SQL을 실행하고, 확장 기능을 설치하고, Supabase Vault에 쓸 수 있는 권한이 필요해요. 시크릿을 교체한 뒤 SQL을 다시 실행해도 안전해요.

## 지원되는 Supabase 이벤트

auth.user.created, auth.user.updated, auth.user.deleted 이벤트는 auth.users의 삽입, 업데이트, 삭제에서 발생해요. 나머지 이벤트는 Brew가 업데이트 전후의 행을 비교해 파생해요.

업데이트 하나는 이벤트 하나만 만들어요. 여러 열이 함께 바뀌면 다음 순서에서 먼저 일치하는 항목이 우선해요: email_confirmed, phone_confirmed, upgraded_from_anonymous, email_changed, password_changed, banned, unbanned, invited, signed_in. 이 중 어디에도 해당하지 않는 업데이트는 auth.user.updated 이벤트로 들어와요.

Brew는 다음 이벤트 유형 12개를 지원해요:

- auth.user.created
- auth.user.updated
- auth.user.deleted
- auth.user.email_confirmed
- auth.user.phone_confirmed
- auth.user.email_changed
- auth.user.password_changed
- auth.user.signed_in
- auth.user.banned
- auth.user.unbanned
- auth.user.invited
- auth.user.upgraded_from_anonymous

## 연락처 동기화와 개인화

실제 이메일 주소가 담긴 검증된 이벤트는 자동화에서 쓰이는지와 관계없이, 이메일 주소를 기준으로 Brew 연락처를 만들거나 업데이트해요. 데이터가 있으면 Brew가 이름과 성, supabase_user_id, supabase_phone, supabase_role, supabase_full_name, supabase_avatar_url, supabase_provider를 설정해요.

일부 이벤트는 라이프사이클 필드도 설정해요. supabase_account_status는 active, invited, banned, deleted 중 하나가 돼요. supabase_email_verified_at, supabase_phone_verified_at, supabase_last_sign_in_at은 해당하는 이메일·전화번호 인증 이벤트와 로그인 이벤트에서 채워져요.

개인화 태그에는 선택한 이벤트에 선언된 페이로드 스키마를 사용하세요. 모든 이벤트에는 email이 포함되고, 값이 있으면 firstName, lastName, fullName, displayName, avatarUrl, phone, role, provider, createdAt, lastSignInAt, emailConfirmedAt도 포함돼요. 이름과 아바타는 raw_user_meta_data에서 가져오며, OAuth 가입에 대비한 대체값도 있어요. 세 타임스탬프는 Unix 초 단위예요.

파생 이벤트에는 previousValue나 newValue, 또는 둘 다가 추가되며, 여기에 열의 이전 값과 새 값이 텍스트로 담겨요. auth.user.password_changed 이벤트에는 둘 다 없어요. provider에는 email, google, github 같은 가입 방식이 담겨 있어서, 가입 방식에 따라 웰컴 플로우를 나눌 수 있어요.

Supabase 사용자 ID는 개인화 태그로 쓸 수 없어요. Brew는 필터링과 세그먼테이션에 쓸 수 있도록 이 ID를 연락처에 supabase_user_id로 저장해요.

Supabase 계정만으로는 마케팅 이메일 수신 동의가 성립하지 않아요. 가입할 때 수신 동의를 기록하고, 프로모션 이메일을 보내기 전에 확인하세요.


## Brew가 Supabase의 인증 이메일을 대체하나요?

아니요. 이메일 인증 링크, 매직 링크, 초대, 비밀번호 재설정 이메일은 여전히 Supabase Auth가 커스텀 SMTP 같은 자체 이메일 설정으로 보내요. Brew는 그런 변경이 auth.users에 반영된 뒤에 자동화를 시작해요. Supabase는 인증 이메일과 마케팅 이메일에 서로 다른 발신 도메인을 쓰도록 권장해요.


## 이벤트는 들어왔는데 이메일이 발송되지 않는 이유는 뭔가요?

이벤트 수신과 이메일 발송은 별개의 단계예요. 일치하는 자동화가 활성 상태인지 확인한 다음, 필터와 실행 기록, 수신자가 발송 대상인지, 발신 도메인을 확인하세요. 아직 이메일을 추가하지 않은 익명 사용자처럼 이메일 주소가 없는 사용자의 이벤트는 연락처를 만들지 않고 자동화도 시작하지 않아요.


## 제한 사항 및 문제 해결

- Brew는 auth.users만 읽어요. 다른 테이블의 이벤트를 쓰려면 Brew에서 사용자 지정 트리거를 만들고, 애플리케이션이나 Supabase Edge Function에서 Brew API로 실행하세요.
- Brew는 Supabase 사용자를 만들거나, 차단하거나, 삭제할 수 없고, Supabase Auth 이메일을 보내지도 않아요.
- 웹훅이 서명 검증에 실패하면 Supabase Vault의 시크릿이 Brew의 시크릿과 일치하지 않는 거예요. 새 시크릿을 만들어 그 값으로 설정 SQL을 다시 실행하고, 같은 값으로 Brew에서 Supabase를 다시 연결하세요.
- 웹훅이 하나도 들어오지 않으면 설정 SQL을 다시 실행한 다음, pgcrypto가 설치돼 있는지, Vault의 시크릿이 Brew의 시크릿과 일치하는지 확인하세요.
- auth.user.email_changed 이벤트가 들어오면 Brew는 새 주소로 연락처를 만들거나 업데이트해요. 이전 주소의 연락처는 그대로 남아요.
- auth.user.deleted 이벤트는 supabase_account_status를 deleted로 설정해요. Brew에서 연락처를 삭제하지는 않아요.
- 각 이메일의 수신 동의와 목적을 검토하세요. Supabase 사용자를 동기화했다고 해서 프로모션 이메일을 보내도 되는 건 아니에요.

## 출처 및 설정 가이드

- [Supabase용 이메일 도구 비교](/ko/blog/best-email-tools-for-supabase-auth-emails-product-events-and-lifecycle-campaigns)
- [Supabase 설정 가이드](https://docs.brew.new/integrations/import/supabase)
- [자동화 만들기](https://docs.brew.new/create-emails/build-an-automation)
- [개인화 태그](https://docs.brew.new/create-emails/merge-tags)
- [Brew로 보낼 수 있는 이메일](https://docs.brew.new/get-started/what-you-can-send)
- [Supabase 데이터베이스 웹훅](https://supabase.com/docs/guides/database/webhooks)
- [Supabase 사용자 필드](https://supabase.com/docs/guides/auth/users)
- [Supabase 커스텀 SMTP](https://supabase.com/docs/guides/auth/auth-smtp)

## 관련 링크

- [전체 연동](https://brew.new/ko/browse/integrations.md)
- [회원가입](https://brew.new/ko/sign-up.md)
- 웹사이트: https://brew.new
