D: Supabaseλ Firebaseμ κ°λ ₯ν λμμΌλ‘, μ€νμμ€ κΈ°λ°μ λ°±μλ μλΉμ€λ₯Ό μ 곡ν©λλ€. νΉν μΈμ¦(Authentication) κΈ°λ₯μ κ°λ°μλ€μ΄ μ½κ² λ‘κ·ΈμΈ μμ€ν μ ꡬμΆν μ μλλ‘ λμμ€λλ€. μ΄λ² κΈμμλ 5λΆ μμ Supabaseλ‘ λ‘κ·ΈμΈ μμ€ν μ λ§λλ λ°©λ²μ λ¨κ³λ³λ‘ μ€λͺ λλ¦¬κ² μ΅λλ€! β¨
π₯ 1. Supabase νλ‘μ νΈ μμ±νκΈ°
- Supabase 곡μ μ¬μ΄νΈμ μ μν©λλ€.
- “Start your project” λ²νΌμ ν΄λ¦νκ³ , GitHub λλ Google κ³μ μΌλ‘ λ‘κ·ΈμΈν©λλ€.
- “New Project”λ₯Ό μ ννκ³ , νλ‘μ νΈ μ΄λ¦κ³Ό λ°μ΄ν°λ² μ΄μ€ λΉλ°λ²νΈλ₯Ό μ€μ ν©λλ€.
- (μ: νλ‘μ νΈ μ΄λ¦
my-auth-app
, μ§μSeoul
μ ν)
- (μ: νλ‘μ νΈ μ΄λ¦
- μμ±μ΄ μλ£λλ©΄, API URLκ³Ό Anon(μ΅λͺ ) Keyλ₯Ό νμΈν©λλ€. (μ΄ κ°λ€μ λμ€μ ν΄λΌμ΄μΈνΈμμ μ¬μ©λ©λλ€!)
π 2. μΈμ¦(Auth) μ€μ νκΈ°
Supabaseλ λ€μν λ‘κ·ΈμΈ λ°©μμ μ§μν©λλ€. κΈ°λ³Έμ μΌλ‘ μ΄λ©μΌ/λΉλ°λ²νΈ λ‘κ·ΈμΈμ νμ±νν΄ λ³΄κ² μ΅λλ€.
- μ’μΈ‘ λ©λ΄μμ Authentication β Providersλ‘ μ΄λν©λλ€.
- “Email” μ 곡μλ₯Ό μΌκ³ (ν κΈ λ²νΌ νμ±ν), νμνλ©΄ “Confirm email” μ€μ μ μ‘°μ ν©λλ€.
- (ν μ€νΈ μμλ μ΄λ©μΌ νμΈμ λλ κ²μ΄ νΈλ¦¬ν©λλ€.)
- μΆκ°λ‘ Google, GitHub λ‘κ·ΈμΈλ μ½κ² μ°λν μ μμ΅λλ€!
π» 3. νλ‘ νΈμλμ Supabase μ°κ²°νκΈ° (React μμ)
μ΄μ ν΄λΌμ΄μΈνΈμμ Supabaseλ₯Ό μ¬μ©ν΄ λ³΄κ² μ΅λλ€. React νλ‘μ νΈλ₯Ό κΈ°μ€μΌλ‘ μ€λͺ ν©λλ€.
1) ν¨ν€μ§ μ€μΉ
npm install @supabase/supabase-js
2) Supabase ν΄λΌμ΄μΈνΈ μ΄κΈ°ν
src/supabaseClient.js
νμΌμ μμ±νκ³ , μκΉ νμΈν API URLκ³Ό Anon Keyλ₯Ό μ
λ ₯ν©λλ€.
import { createClient } from '@supabase/supabase-js';
const supabaseUrl = 'YOUR_SUPABASE_URL';
const supabaseKey = 'YOUR_SUPABASE_ANON_KEY';
export const supabase = createClient(supabaseUrl, supabaseKey);
3) λ‘κ·ΈμΈ/νμκ°μ κΈ°λ₯ ꡬν
import { supabase } from './supabaseClient';
// νμκ°μ
async function signUp(email, password) {
const { user, error } = await supabase.auth.signUp({
email: email,
password: password,
});
if (error) console.error('νμκ°μ
μ€λ₯:', error);
else console.log('κ°μ
μ±κ³΅:', user);
}
// λ‘κ·ΈμΈ
async function signIn(email, password) {
const { user, error } = await supabase.auth.signIn({
email: email,
password: password,
});
if (error) console.error('λ‘κ·ΈμΈ μ€λ₯:', error);
else console.log('λ‘κ·ΈμΈ μ±κ³΅:', user);
}
π 4. λ‘κ·ΈμΈ μν νμΈ & λ‘κ·Έμμ
Supabaseλ μ€μκ°μΌλ‘ μ¬μ©μ μνλ₯Ό κ°μ§ν μ μμ΅λλ€.
// νμ¬ μ¬μ©μ κ°μ Έμ€κΈ°
const user = supabase.auth.user();
// λ‘κ·Έμμ
async function signOut() {
await supabase.auth.signOut();
}
// λ‘κ·ΈμΈ μν κ°μ§ (μ€μκ°)
supabase.auth.onAuthStateChange((event, session) => {
console.log('νμ¬ μ΄λ²€νΈ:', event); // 'SIGNED_IN', 'SIGNED_OUT' λ±
console.log('μΈμ
μ 보:', session);
});
π― 5. μΆκ° κΈ°λ₯ & ν
- λΉλ°λ²νΈ μ¬μ€μ :
supabase.auth.api.resetPasswordForEmail(email)
- μμ
λ‘κ·ΈμΈ: Google/GitHub μ°λμ Providersμμ μ€μ ν
supabase.auth.signIn({ provider: 'google' })
- μ¬μ©μ μ 보 μ μ₯:
supabase.from('profiles').insert(...)
λ‘ μΆκ° λ°μ΄ν° μ μ₯ κ°λ₯
β λ§λ¬΄λ¦¬
Supabaseλ₯Ό μ΄μ©νλ©΄ 5λΆ μμ μλ²½ν λ‘κ·ΈμΈ μμ€ν μ ꡬμΆν μ μμ΅λλ€. π
- μ₯μ : μ€νμμ€, λ¬΄λ£ μκΈμ , Firebase λλΉ μ μ°μ±
- μ£Όμμ : μ΄κΈ° μ€μ μ Anon Key 보μμ μ μνμΈμ!
μ§κΈ λ°λ‘ Supabaseλ‘ λλ§μ μΈμ¦ μμ€ν μ λ§λ€μ΄ 보μΈμ! πͺ
π μ°Έκ³ μλ£
νΉμ κΆκΈν μ μ΄ μλ€λ©΄ λκΈλ‘ λ¨κ²¨μ£ΌμΈμ! βοΈ