- ์ธ์ฆ ๋ฉ์ผ ๊ตฌ์ฑ์ ์ธ์ฆ ์ฒ๋ฆฌ, ๋ฉ์ผ ๋ฐ์ก, ๋๋ฉ์ธ ๊ฒ์ฆ, ์ธ์ฆ ๊ฒฐ๊ณผ ์น ํ๋ฉด์ ์ฐ๊ฒฐํ ๊ตฌ์กฐ
- ์ฑ์ด ์์ฒญํ ํ์๊ฐ์ ํ์ธยท๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋ฉ์ผ์ ์์ฒด ๋๋ฉ์ธ์์ ๋ฐ์กํ๊ธฐ ์ํ ๊ตฌ์ฑ
- ์น์ฌ์ดํธ ์ฃผ์์ ๋ฉ์ผ ๋ฐ์ ์ฃผ์๊ฐ ํ๋์ ์์ ๋๋ฉ์ธ ์๋์์ ์๋ก ๋ค๋ฅธ ์ญํ ์ ๋งก๋ ๊ตฌ์ฑ
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
Supabase Auth๋ฅผ ์ฐ๊ฒฐํ๋ฉด ๋ณ๋์ ๋ฉ์ผ ์๋น์ค๋ฅผ ์ค์ ํ์ง ์์๋ ํ์๊ฐ์ ํ์ธ ๋ฉ์ผ์ ์ํํด ๋ณผ ์ ์๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ SMTP๋ ํ๋ก์ ํธ ํ์ ๋ฑ๋ก๋ ์ฃผ์๋ก๋ง ๋ฐ์กํ๊ณ , ํ์ฌ ํ๋ก์ ํธ๋น ์๊ฐ๋น 2ํต์ผ๋ก ์ ํ๋๋ค. ์ ์ก SLA๋ ์ ๊ณตํ์ง ์์ ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ ๋ฉ์ผ์ ๋ณด๋ด๋ ์ถ์ ํ๊ฒฝ์๋ ์ ํฉํ์ง ์๋ค. Supabase Custom SMTP ๋ฌธ์
๋ฉ์ผ ๋ด์ฉ์ ๋ฐ๊พธ๋ ค๋ ๊ฒฝ์ฐ์๋ ์กฐ๊ฑด์ด ์๋ค. 2026๋ 6์ 3์ผ ์ดํ ์์ฑ๋ Supabase Free ํ๋ก์ ํธ๊ฐ ๊ธฐ๋ณธ SMTP๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ์ฆ ๋ฉ์ผ ํ ํ๋ฆฟ์ ์์ ํ ์ ์๋ค. ์ด๊ฒ์ โFree ํ๋์์๋ ํ ํ๋ฆฟ ์์ ์ด ์ ๋ถ ๋ถ๊ฐ๋ฅํ๋คโ๋ ๋ป์ด ์๋๋ค. Free ํ๋ก์ ํธ์ Custom SMTP๋ฅผ ์ฐ๊ฒฐํ๋ฉด ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ์์ ํ ์ ์๋ค. ๊ธฐ์กด Free ํ๋ก์ ํธ์ ์ ๋ฃ ํ๋ก์ ํธ์๋ ๊ฐ์ ์ ํ์ด ์ผ๊ด ์ ์ฉ๋๋ ๊ฒ์ ์๋๋ค. Supabase ํ ํ๋ฆฟ ์ ์ฑ ๋ณ๊ฒฝ
AS-IS
sequenceDiagram autonumber participant App as ์ฑ participant Auth as Supabase Auth participant Default as Supabase ๊ธฐ๋ณธ SMTP participant Inbox as ์ฌ์ฉ์ ๋ฉ์ผํจ App->>Auth: ํ์๊ฐ์ ๋๋ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์์ฒญ Auth->>Default: ์ธ์ฆ ๋ฉ์ผ ๋ฐ์ก ์์ฒญ Note over Default: ํ๋ก์ ํธ ํ ์ฃผ์๋ง ํ์ฉ<br/>ํ์ฌ ํ๋ก์ ํธ๋น ์๊ฐ๋น 2ํต Default-->>Inbox: ์ ํ๋ ํ ์คํธ ๋ฉ์ผ
TO-BE
sequenceDiagram autonumber participant App as ์ฑ participant Auth as Supabase Auth participant DNS as Cloudflare DNS participant Resend as Resend SMTP participant Inbox as ์ฌ์ฉ์ ๋ฉ์ผํจ participant User as ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ participant Firebase as Firebase Hosting Note over DNS,Resend: ์ฌ์ ์ค์ : DNS์ Resend๊ฐ ์๋ดํ DKIMยท๋ฐ์ก ๋ ์ฝ๋๋ฅผ ๋ฑ๋ก Note over DNS,Firebase: ์ฌ์ ์ค์ : DNS์ Firebase๊ฐ ์๋ดํ ์นยท์์ ๊ถยท์ธ์ฆ์ ๋ ์ฝ๋๋ฅผ ๋ฑ๋ก Resend->>DNS: ๋ฐ์ ๋๋ฉ์ธ DNS ๋ ์ฝ๋ ์กฐํ DNS-->>Resend: DKIMยท๋ฐ์ก ๋ ์ฝ๋ ์๋ต Resend->>Resend: ๋ฐ์ ๋๋ฉ์ธ ๊ฒ์ฆ Firebase->>DNS: ์น ๋๋ฉ์ธยท์ธ์ฆ์ ๋ ์ฝ๋ ์กฐํ DNS-->>Firebase: AยทTXT ๋ ์ฝ๋ ์๋ต Firebase->>Firebase: ๋๋ฉ์ธ ์ฐ๊ฒฐ ๋ฐ HTTPS ์ธ์ฆ์ ํ์ธ App->>Auth: ๊ฐ์ ํ์ธ ๋๋ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์์ฒญ Auth->>Auth: ํ ํฐ ์์ฑ ๋ฐ ํ ํ๋ฆฟ ๋ ๋๋ง Auth->>Resend: SMTP๋ก ์ธ์ฆ ๋ฉ์ผ ์ ๋ฌ Resend->>Inbox: ์ธ์ฆ ๋ฉ์ผ ๋ฐ์ก Inbox-->>User: ์ธ์ฆ ๋ฉ์ผ ๋์ฐฉ User->>Firebase: ๋ฉ์ผ์ ์ธ์ฆ ๋งํฌ ์ด๊ธฐ Firebase->>Auth: ํ ํฐ ๊ฒ์ฆ ์์ฒญ Auth-->>Firebase: ๊ฒ์ฆ ๊ฒฐ๊ณผ ์ ๋ฌ alt ํ์๊ฐ์ ํ์ธ Firebase-->>User: ๊ฐ์ ํ์ธ ์๋ฃ ํ๋ฉด ํ์ else ๋น๋ฐ๋ฒํธ ์ฌ์ค์ Firebase-->>User: ์ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ํ๋ฉด ํ์ User->>Firebase: ์ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ Firebase->>Auth: ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์์ฒญ Auth-->>Firebase: ๋ณ๊ฒฝ ๊ฒฐ๊ณผ ์ ๋ฌ Firebase-->>User: ๋ณ๊ฒฝ ์๋ฃ ํ๋ฉด ํ์ end
๋ค ์๋น์ค๋ ๊ฐ๊ฐ ๋ฌด์์ ํ๋๊ฐ
| ์ปดํฌ๋ํธ | ๋งก์ ์ญํ | ์ ๋ ฅ | ๊ฒฐ๊ณผยท๋ค์ ๋จ๊ณ |
|---|---|---|---|
| Supabase Auth | ๊ณ์ ์ธ์ฆ, ํ์ธยท์ฌ์ค์ ํ ํฐ ์์ฑ, ์ธ์ฆ ๋ฉ์ผ์ ์ ๋ชฉยท๋ณธ๋ฌธยท๋งํฌ ๊ตฌ์ฑ | ์ฑ์ ๊ฐ์
ยท์ฌ์ค์ ์์ฒญ, ์ฌ์ฉ์ ์ด๋ฉ์ผ๊ณผ language ๋ฉํ๋ฐ์ดํฐ | ํ ํ๋ฆฟ์ ๋ง์ถ ๋ฉ์ผ์ SMTP๋ก ์ ๋ฌํ๊ณ , ๋งํฌ์์ ๋์์จ ํ ํฐ์ ํ์ธ |
| Resend | SMTP ์ค๊ณ์ ์ค์ ์ด๋ฉ์ผ ๋ฐ์ก, ๋ฐ์ ๋๋ฉ์ธ์ ์ด๋ฉ์ผ ์ธ์ฆ ์ํ ํ์ธ | Supabase์ SMTP ์ฐ๊ฒฐ๊ณผ ๋ฉ์ผ ๋ด์ฉ, DNS์ ๋ฑ๋ก๋ ๋ฐ์ ๋๋ฉ์ธ ๋ ์ฝ๋ | ์ฌ์ฉ์ ๋ฉ์ผํจ์ผ๋ก ์ด๋ฉ์ผ ์ ๋ฌ, ๋ฐ์ ๋๋ฉ์ธ ๊ฒ์ฆ ์ํ ์ ๊ณต |
| Cloudflare DNS | ๋๋ฉ์ธ ์ด๋ฆ๋ณ DNS ๋ ์ฝ๋ ์ ์ฅ ๋ฐ ์กฐํ ์๋ต | Resend๊ฐ ์ ์ํ๋ ๋ฉ์ผ ๋ ์ฝ๋, Firebase๊ฐ ์ ์ํ๋ ์นยท์ธ์ฆ์ ๋ ์ฝ๋ | ๋ฉ์ผ ์๋ฒ์๋ ๋ฐ์ ์ธ์ฆ ๋ ์ฝ๋๋ฅผ, ์น ์์ฒญ์๋ Hosting ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์๋ต |
| Firebase Hosting | ๊ฐ์ ํ์ธ ๋ฐ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์น ํ์ด์ง ์ ๊ณต, HTTPS ์ฒ๋ฆฌ | ์ฌ์ฉ์๊ฐ ์ฐ ์ธ์ฆ URL, URL์ ํฌํจ๋ ์ธ์ฆ ์ ๋ณด | ๊ฐ์ ์๋ฃ ํ๋ฉด ํ์ ๋๋ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ์ Supabase Auth์ ๋ณ๊ฒฝ ์์ฒญ |
๋ฐ๋ผ์ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ๋ฐ๊ฟ ๋๋ Supabase Auth์ Email Templates๋ฅผ ์์ ํ๋ค. Resend๋ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์ ์ ๋ฌํ๋ฉฐ ๋ฉ์ผ ํ ํ๋ฆฟ์ ํธ์ง ์ฅ์๊ฐ ์๋๋ค. Supabase ์ด๋ฉ์ผ ํ ํ๋ฆฟ ๋ฌธ์
Cloudflare DNS๋ ์น์ฌ์ดํธ๋ฅผ ํธ์คํ ํ๊ฑฐ๋ ์ด๋ฉ์ผ์ ๋ฐ์กํ์ง ์๋๋ค. DNS ๋ ์ฝ๋๋ฅผ ๋ณด๊ดํ๊ณ ์กฐํ์ ์๋ตํ๋ค. Cloudflare Pages๋ฅผ ์ฌ์ฉ ์ค์ด์ด๋ ๊ฐ์ ๋๋ฉ์ธ์ DNS๊ฐ Firebase Hosting์ ๊ฐ๋ฆฌํค๋๋ก ๊ตฌ์ฑํ ์ ์๋ค. Cloudflare DNS FAQ, Firebase ์ปค์คํ ๋๋ฉ์ธ ๋ฌธ์
๋๋ฉ์ธ์ ์ด๋์ ์ค๋นํด์ผ ํ๋๊ฐ
๋ฉ์ผ์ noreply@auth.example.com์์ ๋ณด๋ด๋ ค๋ฉด ๋จผ์ ์์ ๋๋ฉ์ธ example.com์ ์์ ํ๊ณ ์์ด์ผ ํ๋ค. Resend์ auth.example.com์ ์
๋ ฅํ๋ ๊ฒ๋ง์ผ๋ก example.com์ ์์ ๊ถ์ด ์๊ธฐ์ง๋ ์๋๋ค. example.com์ DNS๋ฅผ ์์ ํ ์ ์์ด์ผ Resend๊ฐ ์๊ตฌํ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ ๊ฒ์ฆ์ ํต๊ณผํ ์ ์๋ค.
๋๋ฉ์ธ ๊ตฌ๋งคยท๊ฐฑ์ , DNS ๊ด๋ฆฌ, ๋ฉ์ผ ๋ฐ์ก์ ๋ณ๊ฐ์ ์ผ์ด๋ค. Cloudflare Registrar ๋๋ ๋ค๋ฅธ ๋ฑ๋ก์ ์ฒด์์ ๋๋ฉ์ธ์ ๊ตฌ์ ํ๊ณ , DNS๋ Cloudflare์์ ๊ด๋ฆฌํ๋ฉฐ, ๋ฉ์ผ์ Resend์์ ๋ณด๋ด๋ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค. Cloudflare์ ๋ฌด๋ฃ DNS ์ด์ฉ๊ณผ ๋๋ฉ์ธ์ ๋ฑ๋กยท๊ฐฑ์ ๋น์ฉ๋ ๊ตฌ๋ถํด์ผ ํ๋ค. Cloudflare Registrar
example.com ํ๋๋ฅผ ์์ ํ๋ค๋ฉด dev.example.com, auth-dev.example.com, auth.example.com ๋ฑ์ ํ์ ๋๋ฉ์ธ์ ์ฉ๋์ ๋ฐ๋ผ ๋ง๋ค ์ ์๋ค. ๊ฐ ํ์ ๋๋ฉ์ธ์ ๋ณ๋๋ก ๊ตฌ๋งคํ๋ ๋ฐฉ์์ด ์๋๋ค. ๋ฐ๋ฉด Firebase๊ฐ ์ ๊ณตํ ํ๋ก์ ํธ๋ช
.web.app ๋๋ ํ๋ก์ ํธ๋ช
.firebaseapp.com์ ๋ด ์์ ๋๋ฉ์ธ์ด ์๋๋ฏ๋ก, ๊ทธ ์๋ ์์์ ์ฃผ์๋ฅผ Resend ๋ฐ์ ๋๋ฉ์ธ์ผ๋ก ๊ฒ์ฆํ๋ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
์น ์ฃผ์์ ๋ฉ์ผ ์ฃผ์๋ฅผ ๋ถ๋ฆฌํ๋ ์ด์
| ์ฉ๋ | ๊ฐ๋ฐ ํ๊ฒฝ ์์ | ์ด์ ํ๊ฒฝ ์์ |
|---|---|---|
| ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ ์น ์ฃผ์ | dev.example.com | example.com |
| ์ธ์ฆ ๋ฉ์ผ ๋ฐ์ ๋๋ฉ์ธ | auth-dev.example.com | auth.example.com |
| ์ธ์ฆ ๋ฉ์ผ ๋ฐ์ ์ฃผ์ | noreply@auth-dev.example.com | noreply@auth.example.com |
| ๊ฐ์ ํ์ธ ํ๋ฉด | dev.example.com/auth/verified | example.com/auth/verified |
| ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ํ๋ฉด | dev.example.com/auth/reset-password | example.com/auth/reset-password |
auth.example.com์ ๋ฉ์ผ ๋ฐ์ ์ฃผ์์ ๋๋ฉ์ธ์ด๋ค. ๋ฉ์ผ ์ ๋งํฌ๊ฐ ์ด๋ฆด ์น์ฌ์ดํธ๊น์ง ๋ฐ๋์ auth.example.com์ด์ด์ผ ํ๋ค๋ ๋ป์ ์๋๋ค. ์ ์์์์๋ ์น ํ๋ฉด์ example.com๊ณผ dev.example.com์ Firebase Hosting์์ ์ ๊ณตํ๋ค.
๊ฐ๋ฐยท์ด์์ Resend ๊ณ์ ํ๋์ ๋ฐ์ ๋๋ฉ์ธ ๋ ๊ฐ๋ฅผ ๋ฑ๋กํ ์ ์๋ค. ํ์ฌ Resend Free๋ ๊ฒ์ฆ๋ ๋๋ฉ์ธ 3๊ฐ๋ฅผ ํ์ฉํ๋ค. ๋ ํ๊ฒฝ์ ๋ฐ์ก๋์ ๊ฐ์ Resend ๊ณ์ ์ ์ผยท์ ํ๋๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค. Resend ์๊ธ์ , ๋ฌด๋ฃ ๋๋ฉ์ธ ํ๋ ๋ณ๊ฒฝ
์ค์ ์ค์ ์์
1. Resend์์ ๋ฐ์ ๋๋ฉ์ธ ๋ฑ๋ก
Resend์ Domains์์ ๊ฐ๋ฐ์ฉ auth-dev.example.com๊ณผ ์ด์์ฉ auth.example.com์ ๋ฑ๋กํ๋ค. Resend๊ฐ ๊ฐ ๋๋ฉ์ธ์ ๋ํด ์ ์ํ๋ DNS ๋ ์ฝ๋๋ฅผ ํ์ธํ๋ค. ๋๋ฉ์ธ์ ๋ฑ๋กํ๋ค๊ณ ์ฆ์ ๋ฐ์กํ ์ ์๋ ๊ฒ์ ์๋๋ฉฐ, DNS ๋ ์ฝ๋๋ฅผ ๊ฒ์ํ ๋ค Resend์ ๊ฒ์ฆ์ ํต๊ณผํด์ผ ํ๋ค.
2. Cloudflare DNS์ ๋ฉ์ผ ๋ ์ฝ๋ ๊ฒ์
Resend๊ฐ ๋ณด์ฌ ์ฃผ๋ DKIM TXT์ ๋ฐ์ก์ฉ CNAME ๋ฑ์ Cloudflare์ ์ถ๊ฐํ๋ค. ๋ ์ฝ๋์ ์ด๋ฆ๊ณผ ๊ฐ์ Resend ํ๋ฉด์ ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค. ์ง์ญ๊ณผ ๋๋ฉ์ธ ์ค์ ์ ๋ฐ๋ผ ๊ฐ์ด ๋ฌ๋ผ์ง ์ ์๋ค. ๋ฉ์ผ ๊ฒ์ฆ์ฉ CNAME์ Cloudflare์ ํ๋ก์๋ฅผ ๋๊ณ DNS only๋ก ๋๋ค. ํ๋ก์๋ฅผ ์ผ๋ฉด ๊ฒ์ฆ ๊ณผ์ ์์ ์๋ CNAME ๊ฐ์ด ๋ณด์ด์ง ์์ ์ ์๋ค. Cloudflare CNAME ๊ฒ์ฆ ์๋ด
3. Firebase Hosting์ ์น ๋๋ฉ์ธ ์ฐ๊ฒฐ
Firebase Hosting์ ์ปค์คํ ๋๋ฉ์ธ ์ค์ ์์ ๊ฐ๋ฐยท์ด์ ์น ์ฃผ์๋ฅผ ๊ฐ๊ฐ ์ฐ๊ฒฐํ๋ค. Firebase๊ฐ ์๊ตฌํ๋ ์์ ๊ถ TXT, HTTPS ์ธ์ฆ์ ํ์ธ์ฉ ๋ ์ฝ๋, ์น ์ฐ๊ฒฐ์ฉ A ๋ ์ฝ๋๋ฅผ Cloudflare DNS์ ์ถ๊ฐํ๋ค.
DNS๋ฅผ ์ถ๊ฐํ๋ค๋ ์ฌ์ค๊ณผ Firebase ํ๋ฉด์ Connected๋ก ํ์๋๋ ๊ฒ์ ๋ค๋ฅด๋ค. DNS ์ ํ์ ์ธ์ฆ์ ๋ฐ๊ธ์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค. Firebase์์ Connected ์ํ๋ฅผ ํ์ธํ๊ณ , ์ค์ https:// ์ฃผ์์์ ์์ํ ์น ํ์ด์ง๊ฐ ์ด๋ฆฌ๋์ง ํ์ธํด์ผ ํ๋ค. Firebase์ ์ผ๋ฐ์ ์ธ A ๋ ์ฝ๋ ์์๋ 199.36.158.100์ด์ง๋ง, ์ค์ ํ ๋๋ Firebase ์ฝ์์ด ํด๋น ๋๋ฉ์ธ์ ์ ์ํ ๊ฐ์ ๋ฐ๋ฅธ๋ค. Firebase ์ปค์คํ
๋๋ฉ์ธ ์ค์
4. Resend API key ์ค๋น
Supabase๊ฐ Resend SMTP์ ์ ์ํ ๋ ์ฌ์ฉํ๋ Password๋ Resend ๊ณ์ ๋ก๊ทธ์ธ ๋น๋ฐ๋ฒํธ๊ฐ ์๋๋ผ Resend API key๋ค. SMTP ์ค์ ๊ฐ์ Host smtp.resend.com, Port 465, Username resend, Password Resend API key๋ค. Resend SMTP ์๋ด
๋ฉ์ผ ๋ฐ์ก๋ง ํ์ํ๋ฏ๋ก API key ๊ถํ์ Sending access๋ฉด ๋๋ค. ํ๋์ ํค์ All domains๋ฅผ ํ์ฉํ๋ฉด ๋ฑ๋ก๋ ๋ฐ์ ๋๋ฉ์ธ๋ค์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค. ๊ฐ๋ฐยท์ด์ ํค๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ณ ๊ฐ๊ฐ ํด๋น ๋๋ฉ์ธ์ผ๋ก ๋ฒ์๋ฅผ ์ ํํ๋ฉด ํค๋ฅผ ๊ต์ฒดํ๊ฑฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ์ํฅ ๋ฒ์๋ฅผ ์ขํ๊ธฐ ์ฝ๋ค. ํค์ ์ค์ ๊ฐ์ ๋ฌธ์ยท์ ์ฅ์ยท์คํฌ๋ฆฐ์ท์ ๊ธฐ๋กํ์ง ์๋๋ค.
5. Supabase Custom SMTP์ ํ ํ๋ฆฟ ์ค์
๊ฐ ํ๊ฒฝ์ Supabase Auth์์ Emails โ SMTP Settings๋ก ์ด๋ํด Custom SMTP๋ฅผ ์ผ ๋ค. ๋ฐ์ ์ฃผ์์ ์ด๋ฆ์ ์ ๋ ฅํ๊ณ , Resend์ SMTP ์ค์ ๊ฐ ๋ฐ API key๋ฅผ ์ ์ฅํ๋ค.
๋ฉ์ผ์ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ Emails โ Templates์์ Confirm sign up, Reset password๋ฅผ ๊ฐ๊ฐ ์์ ํ๋ค. Supabase๋ Go ํ
ํ๋ฆฟ์ ์ง์ํ๋ฏ๋ก ์ฑ์ด ํ์๊ฐ์
๋ ์ ๋ฌํ language ๋ฉํ๋ฐ์ดํฐ์ ๋ฐ๋ผ ํ๊ตญ์ด์ ์์ด๋ฅผ ๋๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด ko์ผ ๋ ํ๊ตญ์ด, ๊ทธ ๋ฐ์ ๊ฐ๊ณผ ๊ฐ์ด ์์ ๋ ์์ด๋ก ์ฒ๋ฆฌํ๋ฉด ํ๋์ค์ด ๊ฐ์ ๋ฏธ์ง์ ์ธ์ด๊ฐ ํ๊ตญ์ด๋ก ํ์๋๋ ์ผ์ ๋ง๋๋ค. ์ฑ์ด kr, ko-KR ๋ฑ์ ์
๋ ฅ์ ๋ฐ๋๋ค๋ฉด ํ
ํ๋ฆฟ๊ณผ ํด๋ผ์ด์ธํธ ์ค ์ด๋์์ ko๋ก ์ ๊ทํํ ์ง๋ ์ ํด์ผ ํ๋ค. Supabase ์ธ์ด๋ณ ํ
ํ๋ฆฟ ์๋ด
{{ if eq .Data.language "ko" }}
<p>์ด๋ฉ์ผ ์ฃผ์๋ฅผ ํ์ธํด ์ฃผ์ธ์.</p>
{{ else }}
<p>Please confirm your email address.</p>
{{ end }}6. ์ธ์ฆ ๋งํฌ์ ์น ํ๋ฉด ์ฐ๊ฒฐ
Supabase์ URL Configuration์๋ ๊ธฐ๋ณธ Site URL๊ณผ ํ์ฉํ Redirect URL์ ์ค์ ํ๋ค. ์ฑ์ด ํ์๊ฐ์
ํ์ธ์๋ /auth/verified, ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์๋ /auth/reset-password๋ฅผ ์ง์ ํ๋ค๋ฉด, ๋ ์ฃผ์๊ฐ ๊ฐ๊ฐ ์ค์ ์น ํ๋ฉด์ผ๋ก ์ฐ๊ฒฐ๋์ด์ผ ํ๋ค.
๊ฐ์ ํ์ธ ํ๋ฉด์ ํ ํฐ์ ํ์ธํ ๋ค ์๋ฃ ์๋ด๋ฅผ ๋ณด์ฌ ์ค๋ค. ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ํ๋ฉด์ ํ ํฐ์ ํ์ธํ๊ณ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ณ๊ฒฝํ ๋ค ์๋ฃ ์๋ด๋ฅผ ๋ณด์ฌ ์ค๋ค. ๋ ๋งํฌ๋ฅผ ๊ฐ์ ์๋ฃ ํ๋ฉด์๋ง ์ฐ๊ฒฐํ๋ฉด, ์ฌ์ค์ ๋ฉ์ผ์ ๋์ฐฉํด๋ ์ฌ์ฉ์๊ฐ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํ ์ ์๋ค.
์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฑ์์ ์์ฒญํ ๋ค ๋ค๋ฅธ ๊ธฐ๊ธฐ์ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ฉ์ผ์ ์ด์ด๋ ์ฌ์ค์ ์ ๋ง์น ์ ์๋ค. ์ฑ ์๋ ์คํ์ ๋ณ๋์ App Links ์ค์ ์ ๋ฌ๋ ค ์์ผ๋ฏ๋ก, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ ์๋ฃํ๋ ๋ฐ ํ์ ์กฐ๊ฑด์ผ๋ก ๋์ง ์๋๋ค.
Cloudflare DNS ํ๋ฉด์ 12๊ฐ ๋ ์ฝ๋ ์ฝ๊ธฐ
๊ฐ๋ฐยท์ด์์ ๊ฐ์ ์ข ๋ฅ์ ๋ ์ฝ๋๋ฅผ ๊ฐ๊ฐ ํ๋์ฉ ๋๋ฉด ์ด 12๊ฐ๊ฐ ๋๋ค. Firebase ๊ด๋ จ 6๊ฐ์ Resend ๊ด๋ จ 6๊ฐ๋ก ๋๋ ์ ์๋ค.
| ํ๋ฉด์ ๋ณด์ด๋ ํํ | ์๊ตฌํ ์๋น์ค | ์๋ฏธ |
|---|---|---|
์น ๋๋ฉ์ธ์ A, ๊ฐ 199.36.158.100 | Firebase Hosting | ํด๋น ์ฃผ์์ ์น ์์ฒญ์ Firebase Hosting์ผ๋ก ์ฐ๊ฒฐ |
์น ๋๋ฉ์ธ์ TXT, ๊ฐ hosting-site=... | Firebase Hosting | ๋๋ฉ์ธ์ ์ด๋ Hosting ์ฌ์ดํธ์ ์ฐ๊ฒฐํ ์ง ์ฆ๋ช |
_acme-challenge... TXT | Firebase Hosting | HTTPS ์ธ์ฆ์ ๋ฐ๊ธ ๊ณผ์ ์์ ๋๋ฉ์ธ ์ ์ด ๊ถํ ํ์ธ |
resend._domainkey... TXT, ๊ฐ p=... | Resend | ์์ ์ธก์ด DKIM ์๋ช ์ ๊ฒ์ฆํ ๋ ์ฐ๋ ๊ณต๊ฐ ํค |
rsend... CNAME | Resend | Resend๊ฐ ์ ์ํ ๋ฐ์ก ๊ด๋ จ ํธ์คํธ ์ฐ๊ฒฐ |
send... CNAME | Resend | Return-Path ๋ฑ ๋ฐ์ก ๋๋ฉ์ธ ์ค์ ์ ํ์ํ ํธ์คํธ ์ฐ๊ฒฐ |
hosting-site=...์ _acme-challenge...๋ ์น์ฌ์ดํธ๋ฅผ ์ํ ๊ฐ์ด๋ค. resend._domainkey..., rsend..., send...๋ ๋ฉ์ผ ๋ฐ์ก์ ์ํ ๊ฐ์ด๋ค. ์ด๋ฆ์ด ๋น์ทํด ๋ณด์ฌ๋ ์๋ก ๋์ฒดํ ์ ์๋ค. resend._domainkey์ p=...๋ DNS์ ๊ณต๊ฐํ๋ DKIM ๊ณต๊ฐ ํค์ด๋ฉฐ API key์ ๋ค๋ฅด๋ค. Firebase ์ปค์คํ
๋๋ฉ์ธ ์ค์ , Resend Return-Path ์ค๋ช
ํ๋ฉด์ DNS only๋ Cloudflare๊ฐ ํธ๋ํฝ์ ํ๋ก์ํ์ง ์๊ณ DNS ๊ฐ๋ง ์๋ตํ๋ค๋ ์๋ฏธ๋ค. TTL์ DNS ์๋ต์ ์ผ๋ง๋ ์บ์ํ ์ง ์ ํ๋ ๊ฐ์ด๋ค. Auto์ 1 hr๊ฐ ํจ๊ป ์์ด๋ ๊ทธ ์ฐจ์ด ์์ฒด๊ฐ ์ค์ ์ค๋ฅ๋ ์๋๋ค. ๋ ์ฝ๋๋ฅผ ๋ฐ๊พผ ๋ค ์ ๊ฐ์ด ๋ณด์ด๊ธฐ๊น์ง์ ์๊ฐ์ ์ํฅ์ ์ค๋ค. Cloudflare ํ๋ก์ ์ํ, Cloudflare TTL
ํ๋ฉด์ DMARC ๋ ์ฝ๋๊ฐ ์๋๋ผ๋ ์ 12๊ฐ๋ฅผ ์ค๋ช ํ๋ ๋ฐ ๋น ์ง ํ์ด ์๋ ๊ฒ์ ์๋๋ค. DMARC๋ ๋ฐ์ ๋๋ฉ์ธ์ ๋ฉ์ผ ์ธ์ฆ ์ ์ฑ ์ ์๋ฆฌ๋ ๋ณ๋ ๊ถ์ฅ ์ค์ ์ผ๋ก ๊ฒํ ํ ์ ์๋ค. ๊ฐ์ ์ด์ํ ๋ฉ์ผ ์ ์ฑ ์ ๋ง์ถฐ ์ ํด์ผ ํ๋ค. Supabase ๋ฐ์ ๋๋ฉ์ธ ๊ถ์ฅ์ฌํญ
๋ฌด๋ฃ ์ฌ์ฉ ๋ฒ์์ ์ ํ
| ์๋น์ค | ํ์ฌ ํ์ธํ ๋ฒ์ |
|---|---|
| Supabase ๊ธฐ๋ณธ SMTP | ํ๋ก์ ํธ ํ ์ฃผ์๋ก๋ง ๋ฐ์ก, ํ์ฌ ํ๋ก์ ํธ๋น ์๊ฐ๋น 2ํต |
| Supabase Custom SMTP | ํ์ฑํ ํ ๊ธฐ๋ณธ๊ฐ ์๊ฐ๋น 30ํต. Auth Rate Limits์์ ์กฐ์ ๊ฐ๋ฅ |
| Resend Free | ์ 3,000ํตยท์ผ 100ํต, ๊ฒ์ฆ๋ ๋๋ฉ์ธ 3๊ฐ |
| Cloudflare DNS | ๋๋ฉ์ธ ๋ฑ๋กยท๊ฐฑ์ ๊ณผ ๊ตฌ๋ถ๋๋ DNS ๊ด๋ฆฌ |
| ๋๋ฉ์ธ ๋ฑ๋ก | ์์ ๋๋ฉ์ธ์ ๊ตฌ๋งค ๋ฐ ๊ฐฑ์ ๋น์ฉ ๋ฐ์ |
Custom SMTP๋ฅผ ์ฐ๊ฒฐํด๋ ๋ฐ์ก๋์ด ๋ฌด์ ํ์ด ๋๋ ๊ฒ์ ์๋๋ค. Supabase Auth์ ์๊ฐ๋น ์ ํ๊ณผ Resend ๊ณ์ ์ ์ผยท์ ํ๋๋ฅผ ๋ชจ๋ ํ์ธํด์ผ ํ๋ค. ๊ฐ๋ฐยท์ด์ ๋๋ฉ์ธ์ ํ Resend ๊ณ์ ์ ๋ฑ๋กํ๋ฉด ๋๋ฉ์ธ ์๋ ๊ฐ๊ฐ ์ฐจ์งํ์ง๋ง ๋ฐ์ก๋์ ๊ณ์ ํ๋๋ฅผ ๊ณต์ ํ๋ค. Supabase SMTP ์ ํ, Resend ์๊ธ์
์ค์ ์๋ฃ๋ฅผ ํ์ธํ๋ ์์
- Cloudflare์ ๊ฐ ์๋น์ค๊ฐ ์๊ตฌํ DNS ๋ ์ฝ๋๊ฐ ์๋์ง ํ์ธํ๋ค.
- Resend์์ ๋ฐ์ ๋๋ฉ์ธ์ด Verified์ธ์ง ํ์ธํ๋ค.
- Firebase Hosting์์ ์น ๋๋ฉ์ธ์ด Connected์ธ์ง ํ์ธํ๊ณ , HTTPS๋ก ๊ฐ์ ํ์ธยท๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๊ฒฝ๋ก๊ฐ ์ด๋ฆฌ๋์ง ํ์ธํ๋ค.
- Supabase์์ Custom SMTP์ ๋ฐ์ ์ฃผ์์ ํ ํ๋ฆฟ์ ํ์ธํ๋ค.
- ์ค์ ํ์๊ฐ์ ๋ฉ์ผ์ ๋ฐ์ ์ธ์ดยท๋ฐ์ ์ฃผ์ยท๊ฐ์ ํ์ธ ํ๋ฉด์ ํ์ธํ๋ค.
- ์ค์ ์ฌ์ค์ ๋ฉ์ผ์ ๋ฐ์ ์ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ, ๋ณ๊ฒฝ ์๋ฃ, ์ ๋น๋ฐ๋ฒํธ ๋ก๊ทธ์ธ๊น์ง ํ์ธํ๋ค.
DNS ํ๋ฉด์ ๋ ์ฝ๋๊ฐ ๋ณด์ด๋ ๊ฒ๋ง์ผ๋ก ๋ฉ์ผ ๋ฐ์ก๊ณผ ์ธ์ฆ ํ๋ฆ ์ ์ฒด๊ฐ ์๋ฃ๋ ๊ฒ์ ์๋๋ค. ๋ง์ง๋ง ๋ ๋จ๊ณ๊ฐ ์ฌ์ฉ์ ๊ด์ ์ ๊ฒ์ฆ์ด๋ค.