Serverless z Next.js i Supabase: Case Study

Kluczowe Wnioski

  • Migracja na Vercel Edge obniżyła koszty infrastruktury o 70%.
  • Row Level Security (RLS) w Supabase pozwala przenieść logikę autoryzacji z API do bazy.
  • Architektura Serverless eliminuje potrzebę zarządzania łatkami bezpieczeństwa systemu operacyjnego.

Tradycyjne serwery VPS dają pełną kontrolę, ale wymagają ciągłego utrzymania. W projekcie Kwintesencja API zdecydowałem się na pełną migrację do architektury Serverless, wykorzystując Vercel oraz Supabase jako backend-as-a-service. Decyzja ta była podyktowana specyfiką ruchu – wysokimi pikami podczas premier i niskim zużyciem w pozostałe dni.

1. Dlaczego Serverless?

Kwintesencja to pismo literackie. Premiera nowego numeru generuje tysiące zapytań w ciągu kilku godzin, po czym ruch spada niemal do zera. Utrzymywanie dedykowanego VPS (nawet małego) oznacza płacenie za zasoby, które przez 90% czasu leżą odłogiem.

Vercel Edge Functions skalują się automatycznie od zera do tysięcy instancji w sekundy, a model płatności "pay-as-you-go" oznacza, że gdy nikt nie czyta, rachunek wynosi 0 PLN.

2. Porównanie Kosztów

Poniższa tabela przedstawia szacunkowe miesięczne koszty utrzymania infrastruktury dla projektu o podobnej skali (ok. 50k requestów/miesięcznie).

Rozwiązanie Koszt (Est.) Czas Utrzymania
Tradycyjny VPS (DigitalOcean) $6 - $12 Wysoki (Updates, Security)
Managed PostgreSQL (AWS RDS) $15+ Średni
Vercel + Supabase $0 (Free Tier) Bliski zeru

3. Supabase i RLS

Supabase to nie tylko baza danych PostgreSQL. To kompletny backend. Kluczową funkcją, która zmieniła architekturę API, jest Row Level Security (RLS). Zamiast pisać skomplikowane "middleware" sprawdzające, czy użytkownik X może edytować post Y, definiujemy to w SQL.

-- Policy: Użytkownik widzi tylko swoje szkice
CREATE POLICY "View own drafts" ON posts
FOR SELECT
USING (auth.uid() = user_id);

Dzięki temu, nawet jeśli API zostanie skompromitowane (lub zapomnimy dodać `where` w kodzie JS), baza danych sama odmówi wydania danych, do których użytkownik nie ma praw.

4. Edge Functions vs Node.js

Standardowe funkcje serverless (AWS Lambda) mają problem "Cold Start" – uruchomienie kontenera może trwać nawet 1-2 sekundy. Vercel Edge Functions działają na silniku V8 (jak przeglądarka), co skraca start do milisekund.

// api/magazines.ts (Edge Runtime)
export const config = {
  runtime: 'edge',
};

export default async function handler(req) {
  // To zapytanie wykonuje się błyskawicznie blisko użytkownika
  return new Response(JSON.stringify({ data: '...' }));
}

Podsumowanie

Dla projektów o zmiennym obciążeniu, takich jak media cyfrowe, stack Serverless jest bezkonkurencyjny. Pozwala skupić się na kodzie aplikacji ("Jaki feature dodać?"), a nie na infrastrukturze ("Czy serwer wytrzyma?").