λͺ©. 8μ›” 14th, 2025

D: SupabaseλŠ” Firebase의 κ°•λ ₯ν•œ λŒ€μ•ˆμœΌλ‘œ, μ˜€ν”ˆμ†ŒμŠ€ 기반의 λ°±μ—”λ“œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 특히 인증(Authentication) κΈ°λŠ₯은 κ°œλ°œμžλ“€μ΄ μ‰½κ²Œ 둜그인 μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” 5λΆ„ μ•ˆμ— Supabase둜 둜그인 μ‹œμŠ€ν…œμ„ λ§Œλ“œλŠ” 방법을 λ‹¨κ³„λ³„λ‘œ μ„€λͺ…λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€! ✨


πŸ”₯ 1. Supabase ν”„λ‘œμ νŠΈ μƒμ„±ν•˜κΈ°

  1. Supabase 곡식 μ‚¬μ΄νŠΈμ— μ ‘μ†ν•©λ‹ˆλ‹€.
  2. “Start your project” λ²„νŠΌμ„ ν΄λ¦­ν•˜κ³ , GitHub λ˜λŠ” Google κ³„μ •μœΌλ‘œ λ‘œκ·ΈμΈν•©λ‹ˆλ‹€.
  3. “New Project”λ₯Ό μ„ νƒν•˜κ³ , ν”„λ‘œμ νŠΈ 이름과 λ°μ΄ν„°λ² μ΄μŠ€ λΉ„λ°€λ²ˆν˜Έλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
    • (예: ν”„λ‘œμ νŠΈ 이름 my-auth-app, μ§€μ—­ Seoul 선택)
  4. 생성이 μ™„λ£Œλ˜λ©΄, API URLκ³Ό Anon(읡λͺ…) Keyλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. (이 값듀은 λ‚˜μ€‘μ— ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€!)

πŸ”‘ 2. 인증(Auth) μ„€μ •ν•˜κΈ°

SupabaseλŠ” λ‹€μ–‘ν•œ 둜그인 방식을 μ§€μ›ν•©λ‹ˆλ‹€. 기본적으둜 이메일/λΉ„λ°€λ²ˆν˜Έ λ‘œκ·ΈμΈμ„ ν™œμ„±ν™”ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. 쒌츑 λ©”λ‰΄μ—μ„œ Authentication β†’ Providers둜 μ΄λ™ν•©λ‹ˆλ‹€.
  2. “Email” 제곡자λ₯Ό 켜고(ν† κΈ€ λ²„νŠΌ ν™œμ„±ν™”), ν•„μš”ν•˜λ©΄ “Confirm email” 섀정을 μ‘°μ •ν•©λ‹ˆλ‹€.
    • (ν…ŒμŠ€νŠΈ μ‹œμ—λŠ” 이메일 확인을 λ„λŠ” 것이 νŽΈλ¦¬ν•©λ‹ˆλ‹€.)
  3. μΆ”κ°€λ‘œ 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둜 λ‚˜λ§Œμ˜ 인증 μ‹œμŠ€ν…œμ„ λ§Œλ“€μ–΄ λ³΄μ„Έμš”! πŸ’ͺ

πŸ“Œ μ°Έκ³  자료

ν˜Ήμ‹œ κΆκΈˆν•œ 점이 μžˆλ‹€λ©΄ λŒ“κΈ€λ‘œ λ‚¨κ²¨μ£Όμ„Έμš”! ✍️

λ‹΅κΈ€ 남기기

이메일 μ£Όμ†ŒλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œλŠ” *둜 ν‘œμ‹œλ©λ‹ˆλ‹€