Supabase ili Firebase: koju backend platformu da izaberete
Ukoliko se bavite razvojem web aplikacija, onda već znate da je, osim izgleda aplikacije, podjednako važno i ono što se dešava u njenom backendu. Izgled je važan, ali je još važnije kako će korisnici da upisuju i čitaju podatke iz baze, kako će da se registruju i na koji način će aplikacija da izvršava sve ostale operacije koje se odvijaju u pozadini.
Svaki backend možete da napravite i sami, ali to zahteva dodatno vreme i resurse koje možda nemate ili jednostavno ne želite da ih trošite na razvoj funkcionalnosti koje već negde postoje kao gotova rešenja.
U ovom tekstu ćemo vam predstaviti upravo dva takva rešenja, odnosno dve trenutno popularne platforme: Supabase i Firebase. Obe platforme su namenjene sličnim poslovima, ali se značajno razlikuju po načinu na koji su napravljene i po tehnologijama na kojima se zasnivaju.
Šta je Supabase

Supabase je platforma otvorenog koda koja vam omogućava da napravite backend aplikacije bez potrebe da sami postavljate bazu podataka, autentifikaciju i API.
U njegovoj osnovi nalazi se PostgreSQL, pa će način rada biti poznat svima koji su već koristili relacione baze. Podaci se čuvaju u tabelama, a njihove međusobne veze određuju se pomoću stranih ključeva.
Ako, recimo, razvijate aplikaciju za upravljanje projektima, podatke o korisnicima, projektima i zadacima možete da čuvate odvojeno, ali da ih istovremeno jasno povežete. Na taj način lako možete da odredite kom projektu pripada određeni zadatak i ko je za njega zadužen.
Ovakav model je pregledan i može relativno lako da se proširuje kako aplikacija dobija nove funkcije.
Pored baze, Supabase nudi i sistem za registraciju i prijavljivanje korisnika, prostor za čuvanje datoteka i automatski generisan API. To znači da aplikacija može odmah da pristupi podacima iz nove tabele, bez potrebe da za osnovne operacije sami razvijate poseban REST API.
Na primer, aktivne projekte možete da preuzmete ovako:
const { data, error } = await supabase
.from('projects')
.select('*')
.eq('status', 'active');
Na sličan način možete da dodajete, menjate i brišete podatke.
Supabase podržava i praćenje promena u realnom vremenu. Ako jedan korisnik promeni status zadatka, ostali korisnici mogu odmah da vide novu vrednost, bez ponovnog učitavanja stranice.
Šta je Firebase

Firebase je Google platforma koja kao i Supabase nudi veliki broj servisa potrebnih za razvoj web i mobilnih aplikacija.
Za razliku od Supabase-a, koji je izgrađen oko PostgreSQL baze, Firebase predstavlja širi skup međusobno povezanih Google servisa. Možete da koristite Google-ov sistem za autentifikaciju, skladištenje datoteka, serverske funkcije, push obaveštenja, analitiku i praćenje grešaka.
Za čuvanje podataka najčešće se koristi Cloud Firestore.
Firestore nije relaciona baza. Podaci se čuvaju u dokumentima, a dokumenti se zatim raspoređuju u kolekcije. Jedan dokument može da predstavlja korisnika, poruku, proizvod ili bilo koji drugi zapis koji je potreban aplikaciji.
Na primer, podaci o projektu mogu da izgledaju ovako:
{
"name": "Novi projekat",
"status": "active",
"ownerId": "user-123"
}
Dokumenti iz iste kolekcije ne moraju uvek da imaju potpuno ista polja. To vam daje više slobode tokom razvoja, ali istovremeno može i da oteža održavanje strukture kada vaša aplikacija postane veća i složenija.
Firestore nema klasične veze između tabela niti podržava JOIN upite. Ako želite da povežete projekat sa korisnikom, u dokumentu projekta najčešće čuvate identifikator tog korisnika. Kada su vam potrebni i njegovi podaci, morate da ih preuzmete posebnim upitom ili da ih delimično sačuvate u samom dokumentu projekta.
Takav pristup nije nužno loš, ali zahteva drugačiji način planiranja podataka.
Relaciona ili dokumentna baza
Razlika između Supabasea i Firebasea najbolje se vidi kada aplikacija počne da radi sa većim brojem povezanih podataka.
Recimo da razvijate internet prodavnicu. U relacionoj bazi možete da imate posebne tabele za kupce, proizvode, porudžbine i stavke porudžbine.
Svaka porudžbina pripada određenom kupcu, dok stavke porudžbine određuju koji su proizvodi kupljeni i u kojoj količini.
Kada želite da prikažete celu porudžbinu, PostgreSQL može jednim upitom da poveže sve potrebne podatke.
SELECT
orders.id,
customers.full_name,
products.name,
order_items.quantity
FROM orders
JOIN customers
ON customers.id = orders.customer_id
JOIN order_items
ON order_items.order_id = orders.id
JOIN products
ON products.id = order_items.product_id
WHERE orders.id = 1001;
U Firestore-u biste iste podatke uglavnom preuzimali kroz više zahteva. Prvo biste učitali porudžbinu, zatim kupca, a potom proizvode koji se u njoj nalaze.
Druga mogućnost je da deo podataka sačuvate na više mesta. Na primer, u dokumentu porudžbine možete da sačuvate ime kupca i osnovne podatke o proizvodima kako ne biste svaki put slali dodatne upite.
Ovakvo dupliranje podataka je uobičajeno u dokumentnim bazama. Problem je što morate da odlučite šta će se dogoditi kada se neki od tih podataka kasnije promeni.
Ako kupac promeni ime, da li treba da ga promenite i na starim porudžbinama ili one treba da sačuvaju podatak koji je važio u trenutku kupovine? Odgovor zavisi od poslovne logike aplikacije, ali o tome morate da razmišljate već prilikom projektovanja baze.
U relacionoj bazi se ime kupca najčešće čuva samo na jednom mestu, dok ostale tabele sadrže njegov identifikator. Zbog toga je lakše da podatke održavate usklađenim.
Za koje aplikacije je bolji izbor Supabase
Supabase je obično bolji izbor kada aplikacija koristi jasno strukturisane i međusobno povezane podatke.
Supabase je posebno pogodan za aplikacije koje rade sa većim brojem međusobno povezanih podataka. To su najčešće poslovne aplikacije, kao što su SaaS platforme, CRM sistemi, marketplace rešenja, sistemi za rezervacije i administrativni portali.
Kod ovakvih aplikacija odnosi između podataka predstavljaju osnov sistema. Nije dovoljno samo da sačuvate podatak, već je potrebno da znate i kome pripada, sa čim je povezan i ko sme da mu pristupi.
PostgreSQL je napravljen upravo za takvu vrstu rada. Možete da koristite složene upite, transakcije, indekse i druge mogućnosti koje su standardne u relacionim bazama.
Supabase je praktičan i kada aplikacija treba da pravi izveštaje. Možete da izračunate prihod po klijentu, broj aktivnih korisnika, prosečno vreme rešavanja zahteva ili bilo koji drugi podatak koji nastaje povezivanjem većeg broja tabela.
Takve rezultate dobijate direktno iz baze, bez potrebe da prvo učitate veliki broj zapisa i obrađujete ih u frontend aplikaciji.
Za koje aplikacije je bolji izbor Firebase
Firebase više odgovara aplikacijama kod kojih su rad u realnom vremenu, mobilni uređaji i sinhronizacija važniji od složenih odnosa između podataka.
Najbolji primer su chat aplikacije. Svaka poruka može da bude poseban dokument, dok Firebase automatski obaveštava sve korisnike kada se u razgovoru pojavi nova poruka.
Aplikacija ne mora stalno da proverava da li je nešto promenjeno. Firebase SDK održava vezu sa bazom i dostavlja novu vrednost čim se promena dogodi.
Ovakav način rada nije ograničen samo na chat aplikacije. Firebase dobro odgovara i drugim sistemima u kojima korisnici treba odmah da vide promene koje prave drugi učesnici.
Firebase je bolji izbor i u slučajevima kada aplikacija mora da radi bez stabilne internet veze. Za čuvanje podataka najčešće koristi Firestore, Googleovu dokumentnu bazu koja može da sačuva deo podataka i na samom uređaju. Zahvaljujući tome, korisnik može da nastavi sa radom i kada veza privremeno nestane, a promene se šalju serveru čim se uređaj ponovo poveže.
Ovo je korisno recimo kod terenskih aplikacija, dostave i drugih sistema koji ne mogu da zavise od stalne veze.
Autentifikacija i kontrola pristupa
I Supabase i Firebase nude gotov sistem za registraciju i prijavljivanje korisnika. Možete da koristite e-mail adresu i lozinku, Google nalog, Apple nalog i druge načine prijavljivanja. Razlika je više u načinu na koji određujete kojim podacima korisnik sme da pristupi.
Supabase koristi PostgreSQL Row Level Security pravila pomoću kojih možete da odredite koje redove iz određene tabele korisnik sme da vidi ili menja.
Ako tabela projekata sadrži podatak o vlasniku, možete da postavite pravilo po kojem korisnik vidi samo svoje projekte.
CREATE POLICY "Users can view their projects"
ON projects
FOR SELECT
USING (owner_id = auth.uid());
Čak i ako korisnik pokuša ručno da promeni zahtev koji aplikacija šalje, baza mu neće vratiti podatke za koje nema odgovarajuću dozvolu.
Firebase koristi Security Rules pravila koja imaju sličnu svrhu, ali su prilagođena dokumentnom modelu Firestorea.
match /projects/{projectId} {
allow read: if request.auth != null
&& resource.data.ownerId == request.auth.uid;
}
Kod jednostavnijih aplikacija ova pravila se lako postavljaju i održavaju. Međutim, kako broj korisničkih uloga i povezanih podataka raste, pravila mogu da postanu znatno složenija.
Rad u realnom vremenu
I Supabase i Firebase podržavaju rad sa podacima u realnom vremenu, ali Firebase u ovoj oblasti ima dužu istoriju i bolju podršku.
Firebase može odmah da obavesti aplikaciju kada se neki podatak promeni. Pošto Firestore deo podataka čuva i na uređaju, korisnik može da nastavi sa radom i bez internet veze, a izmene će se sinhronizovati kada se veza ponovo uspostavi.
Supabase takođe može da prati promene u PostgreSQL tabelama i prosleđuje ih povezanim klijentima.
const channel = supabase
.channel('project-changes')
.on(
'postgres_changes',
{
event: '*',
schema: 'public',
table: 'projects'
},
payload => {
console.log(payload);
}
)
.subscribe();
U suštini, Supabase je dobar izbor ukoliko vam je potrebno da se promene odmah prikažu na sajtu – recimo na admin stranici ili kroz notifikacije korisnicima. Firebase ima više smisla u situacijama kada veliki broj mobilnih uređaja mora stalno da razmenjuje i usklađuje podatke.
Serverske funkcije
Kao iskusni developeri, znate da osetljive operacije ne treba da se izvršavaju direktno u browseru ili mobilnoj aplikaciji. Obrada plaćanja, rad sa tajnim API ključevima, slanje elektronske pošte i slični poslovi moraju da se prebace na server, gde mogu bezbednije da se izvrše.
Supabase za ovakve poslove koristi Edge Functions, dok Firebase nudi Cloud Functions. U oba slučaja radi se o manjim delovima serverskog koda koji se pokreću kada ih aplikacija pozove ili kada se dogodi unapred definisan događaj.
Na primer, funkcija može da se pokrene kada korisnik pošalje zahtev za plaćanje, registruje nalog ili kada se u bazi promeni određeni podatak. Kod se tada izvršava na serveru, pa tajni API ključevi i druge osetljive informacije ne moraju da budu izloženi u frontend aplikaciji.
Edge Functions u Supabaseu rade u Deno okruženju i često se koriste za obradu HTTP zahteva, povezivanje aplikacije sa spoljnim servisima i izvršavanje dodatne logike nad podacima iz PostgreSQL baze.
Cloud Functions u Firebaseu rade u okviru Google Cloud infrastrukture i posebno su praktične kada funkcija treba da reaguje na događaje iz drugih Firebase servisa. Može, recimo, automatski da se pokrene kada se novi korisnik registruje, kada se dokument promeni u Firestoreu ili kada iz aplikacije stigne određeni zahtev.
Za korisnika razlika uglavnom nije vidljiva, jer u oba slučaja aplikacija dobija serversku logiku bez potrebe da sami postavljate i održavate poseban server. Izbor zato najviše zavisi od toga da li vam više odgovara neposredan rad sa PostgreSQL bazom ili povezanost sa ostalim servisima iz Google Cloud ekosistema.
Skladištenje datoteka
Obe platforme omogućavaju da u okviru aplikacije čuvate slike, dokumente, video-zapise i druge datoteke.
Kod Supabasea se pristup tim datotekama kontroliše preko pravila povezanih sa bazom, dok Firebase Storage koristi sopstvena sigurnosna pravila.
Nije dovoljno samo da korisniku omogućite da pošalje datoteku. Treba da odredite koje tipove datoteka prihvatate, kolika može da bude njihova veličina i ko kasnije sme da ih preuzme, izmeni ili obriše.
Ovo je posebno važno kada aplikacija čuva privatne dokumente. Sakrivanje linka u korisničkom interfejsu nije dovoljna zaštita, jer pristup mora da bude ograničen i na nivou samog servisa.
AI funkcije i vektorska pretraga
Supabase može da koristi PostgreSQL ekstenziju pgvector, koja omogućava da u istoj bazi čuvate i klasične podatke i vektorske zapise koje koriste AI funkcije.
To je korisno kada aplikacija treba da razume značenje upita, pronađe sličan sadržaj ili vrati rezultate na osnovu semantičke sličnosti, a ne samo tačnog poklapanja reči.
Pošto se vektori nalaze u PostgreSQL bazi, ovakvu pretragu možete da kombinujete sa običnim SQL upitima i pravilima pristupa. Tako, na primer, korisniku možete da prikažete samo dokumente koji su povezani sa njegovim nalogom ili kompanijom.
Firebase nema isti pristup vektorskoj pretrazi unutar same baze, ali može da se poveže sa Google AI servisima, među kojima je i Vertex AI. To više odgovara projektima koji već koriste Google Cloud i žele da AI funkcije razvijaju u okviru tog ekosistema.
Cena
Obe platforme imaju besplatne pakete koji su sasvim dovoljni za razvoj, testiranje i manje projekte, ali se način naplate znatno razlikuje.
Firebase nema fiksnu mesečnu cenu za Firestore, već trošak obračunava prema korišćenju. Besplatan paket uključuje 1 GB prostora u bazi, 50.000 čitanja, 20.000 upisivanja i 20.000 brisanja dokumenata dnevno, kao i 10 GB odlaznog saobraćaja mesečno.
Kada aplikacija pređe ove limite, svaka operacija počinje da se naplaćuje. U regionu us-central1, milion čitanja košta oko 0,30 dolara, milion upisivanja oko 0,90 dolara, dok milion brisanja košta oko 0,10 dolara. Cena može da se razlikuje u zavisnosti od lokacije baze.
Na prvi pogled ove cene deluju veoma nisko, ali broj operacija može brzo da poraste. Jedno otvaranje ekrana može da pokrene više čitanja, dok se kod praćenja podataka u realnom vremenu svaka nova ili izmenjena stavka ponovo obračunava kao čitanje.
Supabase nudi besplatan paket sa dve aktivne aplikacije, bazom veličine 500 MB, prostorom od 1 GB za datoteke, 5 GB odlaznog saobraćaja i do 50.000 aktivnih korisnika mesečno. Projekti koji se ne koriste sedam dana automatski se pauziraju.
Plaćeni Pro paket počinje od 25 dolara mesečno. U cenu ulaze baza od 8 GB, 100 GB prostora za datoteke, 250 GB odlaznog saobraćaja i do 100.000 aktivnih korisnika mesečno. Paket uključuje i 10 dolara kredita za serverske resurse, što je dovoljno za jednu najmanju Micro instancu.
Dodatna potrošnja se naplaćuje kada aplikacija prekorači limite paketa. Na primer, dodatni prostor u bazi košta 0,125 dolara po gigabajtu, dok se dodatni odlazni saobraćaj naplaćuje 0,09 dolara po gigabajtu. Edge Functions u Pro paketu uključuju dva miliona poziva mesečno, a svaki naredni milion košta dva dolara.
Zbog ovakvog modela Supabase obično daje jasniju predstavu o minimalnom mesečnom trošku, dok kod Firebasea račun više zavisi od broja operacija koje korisnici naprave. To ne znači da je jedna platforma uvek jeftinija. Firebase može da bude veoma povoljan za aplikaciju sa malim brojem zahteva, dok Supabase može lakše da se planira kada je opterećenje stabilnije.
Zato cenu ne treba procenjivati samo prema besplatnom paketu. Pre izbora izračunajte koliko će aplikacija približno imati korisnika, koliko puta će učitavati podatke i koliki će saobraćaj i prostor za skladištenje biti potrebni kada projekat počne ozbiljnije da se koristi.
Open source i prelazak na drugi sistem
Supabase je platforma otvorenog koda koja koristi standardnu PostgreSQL bazu. Zbog toga podatke kasnije možete da prebacite na drugi PostgreSQL server ili da ceo sistem postavite na sopstvenu infrastrukturu.
To vam daje više slobode, ali samostalno hostovanje nije nužno jednostavnije ni jeftinije. U tom slučaju sami vodite računa o ažuriranjima, rezervnim kopijama, bezbednosti i dostupnosti sistema.
Firebase je vlasnička Google platforma i ne može da se postavi na sopstveni server. Ako kasnije odlučite da pređete na drugo rešenje, moraćete da migrirate podatke i zamenite delove aplikacije koji zavise od Firebase servisa.
To ne mora da bude problem ako vam Google ekosistem odgovara i planirate da ga koristite dugoročno. Ipak, dobro je da ovu zavisnost uzmete u obzir pre nego što aplikacija postane velika i migracija znatno složenija.
Supabase ili Firebase
Kao što ste videli, ove dve platforme imaju sličnu namenu, ali se u praksi koriste na prilično različit način.
Supabase će vam više odgovarati ako razvijate aplikaciju u kojoj se veliki broj podataka međusobno povezuje. To je čest slučaj kod poslovnih sistema, gde podaci o korisnicima, projektima, dokumentima i pravima pristupa ne mogu da se posmatraju odvojeno.
Firebase je bolji izbor kada aplikacija treba brzo da razmenjuje podatke između velikog broja korisnika, posebno na mobilnim uređajima. To važi za aplikacije u kojima su važni trenutna sinhronizacija, rad bez stabilne internet veze, push obaveštenja i povezivanje sa ostalim Google servisima.
Na kraju, nema univerzalno boljeg rešenja. Supabase će više odgovarati aplikacijama koje se oslanjaju na povezane podatke i složeniju poslovnu logiku, dok Firebase prednost ima tamo gde su najvažniji rad u realnom vremenu i pouzdano korišćenje na mobilnim uređajima. Zato je najbolji izbor onaj koji prirodnije odgovara načinu na koji je vaša aplikacija zamišljena.
