Negli ultimi anni il modo di sviluppare applicazioni web è cambiato radicalmente. Fino a non molto tempo fa qualsiasi progetto web richiedeva un server dedicato o un backend tradizionale: un'istanza su cui far girare il codice, gestire i processi, mantenere la sicurezza, configurare l'ambiente, monitorare le performance e occuparsi della scalabilità. Questo approccio funziona ma presenta costi di gestione elevati e richiede competenze specifiche di amministrazione dei sistemi.
La crescita dei servizi cloud ha introdotto una nuova modalità di sviluppo: l'architettura serverless. Non significa che i server siano scomparsi ma che lo sviluppatore non deve più occuparsene. L'infrastruttura viene gestita automaticamente dal provider cloud e noi ci concentriamo soltanto su ciò che conta: il codice e le funzionalità.
JavaScript, grazie al suo ruolo centrale nel web e all'espansione di Node.js, è diventato uno dei linguaggi più adatti al paradigma serverless. Oggi è possibile sviluppare applicazioni web moderne, API, microservizi e automazioni senza configurare un server, semplicemente scrivendo funzioni che vengono eseguite su richiesta.
In questo articolo analizzeremo cosa significa davvero serverless, perché JavaScript è particolarmente adatto a questo modello, quando conviene scegliere architetture serverless e quando no. Vedremo anche degli esempi concreti di utilizzo, benefici e limiti reali.
Cosa significa Serverless (senza fraintendimenti)
La parola "serverless" può trarre in inganno: i server ci sono, solo che non sei tu a doverli configurare, gestire o mantenere. Non devi configurare macchine virtuali, gestire aggiornamenti di sistema, monitorare memoria e CPU, installare librerie di sistema e occuparti della scalabilità.
Con il serverless, tu scrivi una funzione, ad esempio una funzione che riceve una richiesta HTTP, e il cloud provider la esegue solo quando serve. Quando non c'è traffico l'applicazione non consuma risorse e non costa nulla. Quando c'è molto traffico, il provider scala automaticamente. Questo modello è chiamato Function as a Service (FaaS).
Perché JavaScript è una soluzione ideale per il serverless
JavaScript è oggi uno dei linguaggi più usati nelle piattaforme serverless. I motivi sono chiari:
- È già conosciuto da chi sviluppa frontend;
- Node.js è ottimizzato per esecuzioni rapide e asincrone;
- Il modello serverless si basa su eventi e callback, proprio come JavaScript;
- La maggior parte degli strumenti cloud supporta nativamente JavaScript.
In altre parole, con JavaScript puoi scrivere sia il frontend che la logica lato server nello stesso linguaggio riducendo la complessità del progetto.
Come funziona una funzione serverless
Immagina di voler creare un'API che restituisce un messaggio di benvenuto. Ecco una funzione serverless di esempio basata su JavaScript (e Node.js):
exports.handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({ messaggio: "Benvenuto nell'API serverless!" })
};
};
Questa non è un'app Express, nessun server da avviare. La funzione viene eseguita solo quando riceve una richiesta. Se la piattaforma riceve 0 richieste il costo è costo 0, se ne riceve 1 milione scala automaticamente.
Dove si inserisce la logica nella pipeline di un'app?
In un'app serverless tipica:
- Il frontend può essere statico.
- Le API sono funzioni serverless.
- I database sono cloud managed (come Firestore, DynamoDB, PlanetScale, Supabase..).
- L'autenticazione può essere demandata a servizi esterni (Auth0, Firebase Auth, Clerk, Cognito..).
Questo significa che una grande parte delle responsabilità tradizionali del backend sparisce o si riduce drasticamente.
Vantaggi delle architetture serverless
Innanzitutto nessuna manutenzione del server, non devi pensare alla macchina che esegue il codice perché il provider lo fa per te. I costi sono proporzionati all'uso e paghi solo quando il codice viene eseguito. Non serve mantenere un server sempre attivo, non devi prevedere picchi di traffico e la piattaforma scala istantaneamente.
Lo sviluppo diventa più rapido grazie a meno configurazioni, meno complicazioni e più focus sulle funzionalità. Si tratta infine di uno strumento perfetto per microservizi perché ogni funzione è indipendente, isolata e sostituibile facilmente.
Quando il serverless è la scelta migliore
Il modello serverless brilla quando:
- stai costruendo un frontend moderno (React, Vue, Svelte..);
- devi creare API leggere;
- gestisci webhook o operazioni event-driven;
- il traffico è variabile o imprevedibile;
- vuoi ridurre i costi infrastrutturali;
- preferisci concentrarti sui prodotti e non sulle infrastrutture.
Alcuni esempi perfetti sono:
- landing page con form che inviano email;
- sistemi di notifiche;
- API CRUD leggere;
- automazioni interne di un team;
- prototipi che potrebbero scalare.
Quando il serverless non è ideale
Ci sono casi in cui un backend tradizionale può essere più adatto:
- applicazioni che richiedono connessioni persistenti (come WebSocket continui senza gateway appositi);
- processi pesanti o lunghi (analisi video locali, compressioni massive..);
- sistemi altamente personalizzati a livello di rete o sistema operativo.
Il serverless è progettato per esecuzioni brevi e scalabili, non per processi complessi e continui.
Un esempio reale: inviare email senza backend tradizionale
Partiamo dal form:
<textarea id="messaggio"></textarea>
<button type="submit">Invia</button>
JavaScript del frontend
document.getElementById("contatto").addEventListener("submit", async (e) => {
e.preventDefault();
const email = document.getElementById("email").value;
const messaggio = document.getElementById("messaggio").value;
await fetch("/api/inviaEmail", {
method: "POST",
body: JSON.stringify({ email, messaggio })
});
});
Funzione serverless
const nodemailer = require("nodemailer");
exports.handler = async (event) => {
const { email, messaggio } = JSON.parse(event.body);
// invio email
// ...
return { statusCode: 200, body: "Email inviata" };
};
Non serve configurare un server SMTP o un backend dedicato, la funzione si occupa di tutto.
Conclusione
Il modello serverless rappresenta un cambiamento di paradigma nello sviluppo web moderno. Non elimina i server ma elimina la necessità di gestirli direttamente permettendo agli sviluppatori di concentrarsi sull'esperienza utente e sulla logica applicativa. JavaScript, grazie alla sua natura event-driven e alla diffusione di Node.js, si adatta perfettamente a questa filosofia.
Adottare il serverless significa ridurre costi, evitare configurazioni complesse, automatizzare la scalabilità e ottenere un'infrastruttura più semplice da mantenere. Non è la scelta ideale per ogni progetto, soprattutto quelli che richiedono processi persistenti e controlli di basso livello, ma per la maggior parte delle applicazioni web moderne rappresenta una soluzione elegante, economica e sostenibile.
La trasformazione principale è mentale: passiamo dal gestire un server al scrivere funzioni che rispondono a eventi. Questo sposta il focus dall'infrastruttura al prodotto. E quando lo sviluppo diventa più rapido e meno complicato anche la creatività e l'innovazione aumentano.
Chi sviluppa oggi in JavaScript ha il vantaggio di poter entrare nel mondo serverless senza cambiare linguaggio, sfruttando uno stack unificato e coerente tra frontend e backend. È un'opportunità per costruire applicazioni flessibili, scalabili e orientate al futuro.