# Supabase용 이메일 도구 추천: 인증, 제품 이벤트, 라이프사이클

정식 URL: https://brew.new/ko/blog/best-email-tools-for-supabase-auth-emails-product-events-and-lifecycle-campaigns
글쓴이: Thomas Park
게시일: 2026-09-19
수정일: 2026-09-29

이 비교는 Brew가 직접 작성했어요. 2026년 9월 28일에 링크한 각 제품의 문서를 검토했어요. 문서를 비교한 결과이며, 모든 플랫폼을 직접 테스트했다는 뜻은 아니에요. 현재 요금제 한도는 각 업체의 요금 페이지에서 확인하세요.

Supabase 앱을 출시하자 팀 밖의 첫 사용자들이 가입해요. 그런데 이들에게 가는 인증 메일은 아직 기본 발신 서비스로 나가요. 이 서비스는 미리 승인된 주소로만 메일을 보내기 때문에, 가입한 사람 중 누구도 인증 메일을 받지 못해요. 계획해 둔 웰컴 이메일은 아직 할 일 목록에 메모로만 남아 있고요.

Supabase 앱이 이메일을 보내는 이유는 세 가지예요. 인증 이메일에는 가입 시 이메일 인증, 매직 링크, 비밀번호 재설정이 있어요. 제품 이벤트 이메일은 데이터베이스에서 무언가가 일어날 때 발송돼요. 라이프사이클 캠페인은 온보딩, 넛지, 윈백을 다뤄요. 도구 하나로 여러 가지를 맡을 수도 있지만, Supabase는 인증 메일과 마케팅 메일을 분리하라고 권해요.

이 가이드는 Resend, Loops, Sequenzy, Brew가 각각 이 중 어떤 일을 문서로 안내하는지에 따라 정리했어요.

## 핵심 요약

- Supabase의 기본 이메일 서비스는 테스트용이에요. 미리 승인된 주소로만, 낮은 발송 한도로 보내요. 실서비스의 인증 이메일에는 커스텀 SMTP가 필요해요.
- 인증 이메일의 경우 Resend, Loops, Sequenzy는 각각 Supabase SMTP 설정 방법을 문서로 안내해요. Brew 문서에는 이런 안내가 없어요.
- 제품 이벤트와 라이프사이클 이메일의 경우, Brew는 `auth.users` 테이블의 변경을 수신해 `auth.user.email_confirmed` 같은 이벤트를 발생시켜요. Sequenzy는 선택한 테이블의 행을 동기화해요.
- Supabase는 인증 메일과 마케팅 메일에 서비스와 도메인을 따로 쓰도록 권장해요.

## 세 가지 일, 세 종류의 도구

| 일 | 필요한 것 | 문서로 안내하는 도구 |
| --- | --- | --- |
| 인증 이메일 | Supabase Auth가 호출하는 SMTP 서버나 인증 훅 | Resend, Loops, Sequenzy |
| 제품 이벤트 | 데이터베이스 변경을 트리거로 전환 | Brew(`auth.users`), Sequenzy(원하는 테이블 하나), Loops(연락처 동기화) |
| 라이프사이클 캠페인 | 시퀀스, 디자인된 이메일, 오디언스 | Brew, Loops, Sequenzy |

각 업체의 문서는 2026년 9월 28일에 확인했어요.

## 인증 이메일: 먼저 기본 발신 서비스에서 옮기기

Supabase의 [SMTP 가이드](https://supabase.com/docs/guides/auth/auth-smtp)에는 기본 서비스의 한계가 나와 있어요. 미리 승인된 주소로만 메일을 보내요. 발송 한도는 시간당 2통으로 낮고, 예고 없이 바뀔 수 있어요. 전달에 대한 SLA도 없어요. Supabase는 테스트와 데모 이외의 용도라면 커스텀 SMTP를 설정하라고 안내해요.

같은 페이지에서는 인증 메일과 마케팅 메일을 섞지 말라고도 해요. 서비스를 따로 쓰거나, 적어도 `auth.example.com`, `marketing.example.com`처럼 발신 도메인을 나누고, 인증 메시지에는 프로모션 내용을 넣지 마세요.

### Resend

Resend의 [Supabase 가이드](https://resend.com/docs/send-with-supabase-smtp)는 간단한 SMTP 설정 안내예요. Supabase의 Authentication 메뉴에서 호스트는 `smtp.resend.com`, 포트는 `465`, 사용자 이름은 `resend`, 비밀번호는 내 API 키로 입력하면 돼요. Resend에서 인증된 도메인이 필요해요. 그다음부터는 Supabase Auth가 Resend를 통해 메일을 보내요.

### Loops

Loops는 [Supabase 연동 방법 두 가지](https://loops.so/docs/integrations/supabase)를 문서로 안내해요. 인증 훅(Auth Hook)을 쓰면 모든 Supabase Auth 이메일이 Loops를 거쳐 나가고, 대안으로 SMTP도 쓸 수 있어요. 이와 별도로 연락처 동기화를 설정하면 Supabase 사용자가 Loops 오디언스로 들어와요.

### Sequenzy

Sequenzy는 자체 SMTP 서비스로 [Supabase Auth 이메일을 보낼 수 있어요](https://docs.sequenzy.com/integrations/supabase). 비밀번호 재설정, 매직 링크, 초대, 보안 알림용 기본 트랜잭션 템플릿을 설정해 주고, SMTP 인증 정보를 직접 입력할 수도 있어요.

### Brew

Brew의 Supabase 연동은 Supabase Auth 이메일을 보내지 않고, Brew 문서에는 SMTP 릴레이도 없어요. 이메일 인증, 매직 링크, 비밀번호 재설정 이메일은 SMTP 제공업체에 맡겨 두세요. 영수증처럼 앱에서 트리거하는 트랜잭션 이메일은 Brew API로 보낼 수 있어요. 하지만 Supabase Auth가 직접 보내는 메시지에는 여전히 SMTP나 인증 훅이 필요해요.

## 제품 이벤트: 플로우를 시작할 수 있는 데이터베이스 변경

### Brew

Brew의 [Supabase 연동](https://docs.brew.new/integrations/import/supabase)은 설정 스크립트를 실행해 `auth.users` 테이블에 데이터베이스 트리거를 설치해요. 이 트리거는 `pgcrypto`로 각 변경 사항에 서명하고, `pg_net`으로 고유한 Brew 웹훅 URL에 보내며, 공유 시크릿은 Supabase Vault에 보관해요. Brew가 받는 원본 이벤트는 `auth.user.created`, `auth.user.updated`, `auth.user.deleted` 세 가지예요. 여기에 열 변경을 바탕으로 이벤트 9개를 더 파생해요:

- `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`

사용자는 계정 상태, 이메일 인증 시각, 마지막 로그인 같은 `supabase_*` 필드와 함께 연락처로 동기화돼요. Brew 문서에 따르면 토큰 갱신도 `last_sign_in_at` 값을 업데이트하므로, `auth.user.signed_in` 이벤트만으로는 사용자가 “돌아왔다”는 믿을 만한 신호가 되지 않아요.

`auth.users` 테이블 밖의 이벤트(예: `project_created`, `invite_sent`)는 Brew에서 사용자 지정 트리거를 만들고 Supabase Edge Function에서 실행하세요. Brew의 [Lovable 가이드](https://docs.brew.new/integrations/ai-tools/lovable)에서 이 패턴을 보여 줘요. 이 함수는 Supabase 시크릿에서 `BREW_API_KEY` 값을 읽고 `POST /v1/automations/triggers/{triggerEventId}/fire` 엔드포인트를 호출해요.

### Sequenzy

Sequenzy는 OAuth로 Supabase에 연결하고, `pg_net` 트리거로 선택한 테이블 하나(보통 `public.profiles`)를 감시해요. 이메일, 사용자 ID, 이름 열은 자동으로 감지하고, 나머지 열은 세그먼테이션에 쓸 수 있게 동기화해요. 행이 삽입되면 `contact.subscribed` 이벤트가 발생해요. 업데이트는 이벤트 없이 속성만 갱신하고, 행이 삭제되면 `contact.unsubscribed` 이벤트가 발생해요. 연동 하나당 자동 웹훅을 쓰는 테이블은 하나뿐이에요.

### Loops

Loops는 Supabase 사용자를 오디언스로 동기화하고, 이 데이터로 워크플로를 시작할 수 있어요. 연락처 동기화는 인증 이메일 경로와 별도로 설정해요.

## 라이프사이클 캠페인

Brew는 브랜드의 [email-design.md](/ko/blog/email-design-md) 파일을 바탕으로 이메일을 생성하고, 프롬프트로 자동화를 만들고, 인증된 내 도메인에서 발송해요. 웰컴 플로우를 `auth.user.email_confirmed` 이벤트에서 시작하면 첫 이메일이 이메일 인증을 마친 사람에게만 가요. Brew에는 SMS 채널이 없고, Supabase Auth 이메일도 처리하지 않아요.

Loops와 Sequenzy는 인증 이메일뿐 아니라 라이프사이클 캠페인도 지원하므로, 업체 한 곳에서 둘 다 처리할 수 있어요. 그렇게 하더라도 Supabase의 권고대로 인증 메일과 마케팅 메일의 발신 도메인은 나누세요.

## 소규모 Supabase 앱의 구성 예시

가능한 역할 분담 중 하나예요. 처음부터 끝까지 직접 테스트해 보지는 않았어요.

1. Supabase Auth가 `auth.example.com` 도메인에서 커스텀 SMTP(Resend, Loops, Sequenzy 중 하나)로 인증 메일, 매직 링크, 비밀번호 재설정 메일을 보내요.
2. Brew의 Supabase 연동이 `auth.users` 테이블의 변경을 수신해요. 웰컴 자동화는 `auth.user.email_confirmed` 이벤트에서 시작돼요.
3. 애플리케이션이 리마인더 확인 일정을 잡아요. 예정된 시간이 되면 사용자의 현재 프로젝트 상태를 읽고, 아직 프로젝트가 없을 때만 별도의 Brew `project_reminder_eligible` 이벤트를 보내요. 게시된 자동화가 이 이벤트를 받아 넛지 이메일을 보내요. 아니면 Brew에 불리언 타입의 `has_project` 연락처 필드를 정의해 동기화하고, 대기 단계 뒤에 `contact.has_project equals false` 조건을 확인해도 돼요. 이 조건은 Brew 연락처 필드의 현재 값을 읽고, 원래 이벤트의 페이로드는 바뀌지 않아요.
4. 라이프사이클 메일은 수신 거부 헤더를 넣어 마케팅 도메인에서 보내요.

## 자주 묻는 질문

### Supabase의 기본 이메일을 실서비스에서 써도 되나요?

Supabase는 안 된다고 해요. 기본 서비스는 미리 승인된 주소로만, 낮은 발송 한도로 보내고 SLA도 없어요. 커스텀 SMTP를 설정하세요.

### Brew가 Supabase의 이메일 인증이나 비밀번호 재설정 이메일을 대체하나요?

아니요. Brew의 Supabase 연동은 `auth.users` 테이블의 변경으로 자동화를 시작해요. 이메일 인증과 비밀번호 재설정 이메일에는 SMTP 제공업체나 인증 훅이 필요해요.

### 웰컴 이메일을 보내기 전에 왜 `email_confirmed` 이벤트를 기다려야 하나요?

그래야 웰컴 이메일이 실제로 작동하는 주소에만 가고, 인증 메일과 동시에 도착하는 대신 그 뒤에 도착해요.

### 동기화된 Supabase 사용자는 마케팅 수신에 동의한 것으로 보나요?

자동으로 그렇게 되지는 않아요. Brew 문서에 따르면 모든 마케팅 수신자는 가져오기 전에 수신에 동의한 상태여야 해요. 가입할 때 수신 동의를 저장하고, 그 값으로 필터링하세요.

## 다음 단계

내 프로젝트에서 어떤 이벤트가 들어오는지 보려면 [Brew에서 Supabase를 연결](/ko/browse/integrations/supabase)하고 테스트 사용자를 추가한 다음, 플로우를 게시하기 전에 ‘최근 이벤트’ 패널을 확인하세요.
