Vezérlőpult
1. A backend fogalma · Backend elméleti alapok

Backend elméleti alapok · 1. tananyag

A backend fogalma

Eddig olyan oldalakat készítettél, amelyek a böngészőben futottak: ha bezártad a lapot, minden elveszett. Egy webshopban viszont a rendelésed megmarad, egy naplóban a tanár ír be jegyet, te pedig csak olvasod. Mindezt a backend teszi lehetővé — egy program, ami nem a te gépeden fut, tárolja az adatokat, és eldönti, ki mit tehet meg.

2 tanóraElmélet + gyakorlatNem igényel kódolást

A fejezet végén tudni fogod

1Kliens és szerver

A web működésének alapja a kliens–szerver modell:

KLIENS böngésző, mobilapp a felhasználó gépén SZERVER (backend) Node.js + Express üzleti logika, jogosultság MySQL adatbázis HTTP-kérés GET /termekek HTTP-válasz 200 OK + JSON SQL táblasorok A titkok itt maradnak: adatbázis-jelszó, API-kulcsok, jelszó-hashek
1. ábra — A kliens kér, a szerver kiszolgál. Az adatbázishoz csak a backend fér hozzá.
JÓ TUDNI

A „szerver” szó két dolgot is jelenthet: a gépet (egy adatközpontban álló számítógép) és a programot (ami azon fut, és kéréseket szolgál ki). Amikor mi „szervert írunk”, a programra gondolunk. Egy gépen sok szerverprogram futhat egyszerre.

Fontos: a kliens–szerver szerep, nem eszköz. Ugyanaz a program az egyik kapcsolatban szerver, a másikban kliens: a webshop backendje szerver a böngésző felé, de kliens a fizetési szolgáltató API-ja felé.

A címzés három szintje

FogalomMit azonosít?PéldaHasonlat
IP-cím
Internet Protocol
Egy gépet a hálózaton93.184.216.34A ház utcai címe
PortEgy programot a gépen belül3000, 443A lakás ajtószáma
Domain (DNS)
Domain Name System
Emberi nevet ad az IP-nekwebshop.huA telefonkönyv

Fejlesztés közben a saját gépünket a localhost névvel (IP-ben: 127.0.0.1) érjük el, és általában a 3000-es portot használjuk: http://localhost:3000.

PortMire használjuk
80HTTP (titkosítatlan web)
443HTTPS (titkosított web)
3000Node.js fejlesztői szerver (bevett szokás, nem szabály)
3306MySQL adatbázis
5432PostgreSQL adatbázis

2Frontend, backend, full-stack

SzempontFrontendBackend
Hol fut?A felhasználó eszközén, a böngészőbenEgy szerveren, távol a felhasználótól
Mit lát a felhasználó?Mindent: a kódot is megnézhetiSemmit: csak a válaszokat
Fő felelősségMegjelenítés, felhasználói élményAdat, logika, biztonság
TechnológiákHTML, CSS, JavaScript, React, VueNode.js, PHP, Java, Python, C#, Go
Adatbázis-hozzáférésNincs (közvetlenül soha)Van
Ki futtatja?Bárki, a saját gépénA fejlesztő által ellenőrzött gép

A full-stack fejlesztő mindkét oldalhoz ért. Ez a kurzus a backendről szól, de a végén összekötjük egy egyszerű frontenddel is.

EGYSZERŰ ÖKÖLSZABÁLY

„Amit a felhasználó lát és megérinthet, az frontend. Amit a felhasználónak nem szabad megváltoztatnia, az backend.”

Frontend vagy backend?

Döntsd el, melyik oldal felelős a feladatért! Van, ami mindkettőé — nézd meg, miért.

1 / 10 kérdésHelyes: 0
…

3Mi történik, amikor beírsz egy webcímet?

Ez a fejezet legfontosabb ábrája — érdemes a lépéseit fejből tudni.

SZERVEROLDAL 1 Beírod a címsorba: https://webshop.hu/termekek 2 DNS-feloldás: a névből IP-cím lesz (webshop.hu → 93.184.216.34) 3 Kapcsolat felépítése (TCP + TLS-titkosítás, mert https) 4 A böngésző elküldi a kérést: GET /termekek 5 A webszerver fogadja a kérést 6 Melyik útvonal ez? — a routing dönt 7 Jogosultság-ellenőrzés — szabad ezt látnod? 8 Adatbázis-lekérdezés — SQL a MySQL felé 9 Válasz összeállítása — HTML vagy JSON 10 Válasz vissza a böngészőnek: 200 OK + tartalom 11 A böngésző megjeleníti (és további kéréseket indít: CSS, JS, képek) Mindez jellemzően néhány század másodperc alatt lezajlik.
2. ábra — Egy HTTP-kérés életútja. Az 5–9. lépés a mi felelősségünk lesz.
JÓ TUDNI

Egyetlen weboldal megnyitása jellemzően több tucat HTTP-kérést jelent: külön kérés megy a HTML-ért, minden CSS- és JS-fájlért, képért, betűtípusért. Ezt a böngésző fejlesztői eszközeiben (F12 → Network fül) végig is nézheted.

4Mit csinál pontosan egy backend?

FeladatPélda a webshopból
Adattárolás és -lekérdezésTermékek, vásárlók, rendelések mentése MySQL-be
Üzleti logikaKosárérték számítása, kedvezmény alkalmazása, készlet csökkentése
Hitelesítés (authentication)„Ki vagy te?” — bejelentkezés jelszóval, JWT (JSON Web Token) kiadása
Jogosultság (authorization)„Mit tehetsz meg?” — csak admin törölhet terméket
ValidációAz ár nem lehet negatív, az e-mail formátuma helyes
Külső szolgáltatások hívásaBankkártyás fizetés, e-mail küldés, szállítmánykövetés
FájlkezelésTermékképek feltöltése, számla PDF generálása
Ütemezett feladatokÉjszakai készletriport, lejárt kosarak törlése
Naplózás, monitorozásHibák rögzítése, ki mit csinált és mikor
BiztonságJelszavak hashelése, támadások kivédése, kérésszám-korlátozás
EGY MONDATBAN

A backend az egyetlen igazságforrás (single source of truth). Ha a frontend és a backend mást állít, mindig a backendé az utolsó szó.

5Miért nem lehet mindent a frontendben megcsinálni?

Ez a fejezet gerince — sok kezdő itt hibázik. A böngészőben futó kód teljesen a felhasználó kezében van. Megnyithatja a fejlesztői eszközöket, elolvashatja a JavaScript-forrást, átírhatja a memóriában lévő értékeket, és akár a böngésző megkerülésével is küldhet kérést a szervernek.

1) Titkokat nem lehet elrejteni a kliensen

Ha az adatbázis jelszava vagy egy fizetési API kulcsa bekerül a frontend kódjába, azt bárki elolvashatja. A titkoknak a szerveren a helyük.

2) A kliensoldali ellenőrzés megkerülhető

Az űrlap-validáció (required, „az ár legyen pozitív”) kényelmi funkció, nem védelem. Aki akar, közvetlenül küld kérést a szervernek, űrlap nélkül.

VESZÉLY

Minden kliensoldali ellenőrzést meg kell ismételni a szerveren. A frontend validáció a felhasználót segíti; a backend validáció az adatokat védi.

3) Az adatbázis nem érhető el közvetlenül a böngészőből

Ha az lenne, bárki írhatna SQL-t a te adataidra. A böngésző csak HTTP-kérést küldhet a backendnek, amely aztán ellenőrzött módon fordul az adatbázishoz.

4) Kell egy közös, megbízható igazság

Ha három ember nézi ugyanazt a terméket, mindenkinek ugyanazt a készletet kell látnia. A közös állapot csak egy központi helyen tárolható.

Nézzük konkrétan

Képzeld el, hogy a webshopban a fizetendő összeget a böngésző számolja ki, és így küldi el:

// A böngészőből érkező kérés törzse — a felhasználó átírta!
{
  "termekId": 42,
  "darab": 1,
  "fizetendo": 1        // ← 34 990 Ft helyett 1 Ft
}

Ha a backend elhiszi neki, a bolt tönkremegy. A helyes viselkedés: a backend az árat mindig az adatbázisból veszi ki, és az összeget maga számolja ki — a klienstől érkező összeget egyszerűen figyelmen kívül hagyja.

// Nagyjából így fog kinézni a szerveroldali logika (a részleteket később tanuljuk).
// A "rendeles" a böngészőből érkezett kérés törzse — vagyis a fenti JSON.
const termek = await adatbazisbolLekerdez(rendeles.termekId);  // az igazi ár innen jön
const fizetendo = termek.ar * rendeles.darab;               // a szerver maga számol
// A rendeles.fizetendo mezőt MEG SEM NÉZZÜK.

Hihető-e a kliens?

Érkezik egy rendelés a böngészőből. Döntsd el minden mezőről, hogy bemenetként elfogadható-e (persze ellenőrzés után), vagy a szervernek magának kell előállítania. Ha kész vagy, kérd a kiértékelést.

POST /api/orders
{
  "termekId": 42,        "darab": 2,
  "egysegar": 34990,     "vegosszeg": 69980,
  "felhasznaloId": 7,    "kedvezmeny": 0.5
}
MezőA te döntésedKiértékelés

6Hogyan épül fel egy backend?

ArchitektúraLényegeElőnyHátrányMikor?
MonolitEgy alkalmazás, egy kódbázis, minden benne Egyszerű fejleszteni, indítani, hibát keresniNagy méretnél nehezen kezelhető Kis/közepes projekt, tanulás — mi ezt használjuk
Moduláris monolitEgy alkalmazás, de tiszta modulhatárokkal Rendezettség monolit-egyszerűséggelFegyelem kell hozzáNövekvő projekt (a Nest.js ezt támogatja)
MikroszolgáltatásokSok kicsi, önállóan futó szolgáltatás Külön skálázható, külön csapatokBonyolult üzemeltetés, hálózati hibákNagy rendszer, nagy csapat
Serverless
FaaS – Function as a Service
Csak függvényeket írsz, a szolgáltató futtat Nincs szerver-üzemeltetés, használat alapú díjHidegindítás, szolgáltatóhoz kötöttségRitka, tüskés terhelés
BaaS (pl. Firebase)
Backend as a Service
Kész backend-szolgáltatás Nagyon gyors indulásKevés kontrollPrototípus, kis alkalmazás
TIPP

Kezdd monolittal. A mikroszolgáltatás nem „fejlettebb”, hanem más problémára való megoldás. Sok cég a szükségesnél korábban vágott bele, és megbánta.

Rétegek egy monoliton belül

Ezt a felosztást fogjuk használni a webshopnál:

HTTP-kérés Router Melyik URL melyik funkcióhoz tartozik? GET /api/products Middleware Hitelesítés, naplózás, validáció — közbeékelt lépések Controller Kicsomagolja a kérést, összerakja a választ Service Az üzleti logika: mennyi a végösszeg? Adatréteg (Prisma) Adatbázis-műveletek — csak ez a réteg lát MySQL-t
3. ábra — Minden rétegnek egy dolga van. Ha az árszámítás hibás, tudod, hol keresd.

Miért jó ez? Mert ha az árszámítás hibás, tudod, hol keresd (service). Ha rossz URL-en van a végpont, tudod, hol keresd (router). És a service-t tesztelni tudod anélkül, hogy HTTP-kérést kellene küldened.

7Hogyan beszélhet a frontend a backenddel?

StílusLényegTipikus felhasználás
REST
Representational State Transfer
Erőforrások URL-eken, HTTP-metódusokkalÁltalános web-API — ezt tanuljuk
GraphQL
Graph Query Language
A kliens írja le, pontosan milyen adatot kérSokféle kliens, túl sok/kevés adat problémája
gRPC
Remote Procedure Call
Bináris, gyors, szigorú szerződésselSzolgáltatások közti belső kommunikáció
WebSocketKétirányú, folyamatos kapcsolatChat, valós idejű játék, élő értesítés
SSE
Server-Sent Events
A szerver küld folyamatosan, a kliens hallgatÉlő eredmény, tőzsdei árfolyam
ÜzenetsorNem közvetlen hívás: üzenetek sorbanHáttérfeladatok, rendszerek összekötése

A következő fejezet teljes egészében a REST-ről szól.

Kapcsolódó kérdés: hol áll össze az oldal?

ModellKi állítja elő a HTML-t?A backend szerepe
SSR — szerveroldali renderelés
Server-Side Rendering
A szerverKész HTML-t küld
CSR / SPA — böngészőoldali renderelés
Client-Side Rendering / Single Page Application
A böngésző JavaScriptjeCsak JSON-adatot ad (API)
SSG — statikus generálás
Static Site Generation
Előre, buildeléskorCsak a dinamikus részeknél kell

Mi a SPA + REST API modellre készülünk: a backend JSON-t szolgáltat, a megjelenítés a frontend dolga. Ennek az az előnye, hogy ugyanazt az API-t használhatja weboldal, mobilalkalmazás és külső partner is.

8A Node.js mint backend-platform

A Node.js egy futtatókörnyezet, amely lehetővé teszi, hogy JavaScript-kód a böngészőn kívül, közvetlenül az operációs rendszeren fusson.

Böngészőben van, Node-ban nincsNode-ban van, böngészőben nincs
window, document, DOMprocess, globalThis
alert, promptfs (fájlrendszer), http, path, os
localStorageKörnyezeti változók (process.env)
JÓ TUDNI

A JavaScript nyelv ugyanaz a két helyen. Ami eltér, az a környezet: milyen beépített objektumok érhetők el. Ezért nem tudsz Node-ban document.querySelector-t használni — nincs weboldal, amin dolgozhatna.

Az eseményhurok — a lényeg röviden

A Node.js egy szálon futtatja a te JavaScript-kódodat, mégis képes egyszerre több ezer felhasználót kiszolgálni. A titok: nem várakozik.

Hasonlat — a pincér:

BLOKKOLÓ — egy szál, egyszerre egy kérés A: kód várakozás az adatbázisra B: kód várakozás a fájlra C: kód A szaggatott szakaszokon a szerver nem csinál semmit — mégis foglalt. NEM BLOKKOLÓ (Node.js) — egy szál, sok kérés A: kód háttérben: adatbázis B: kód háttérben: fájl C: kód Mindhárom kérés ennyi idő alatt kész. idő
4. ábra — A várakozás nem foglalja a szálat, ezért a Node közben más kérést vesz fel.
FIGYELEM — a csapda

Ha a te kódod hosszan számol (pl. milliós ciklus, nagy kép átméretezése), az blokkolja az egy szálat, és közben senki mást nem tud kiszolgálni a szerver. Ezért a Node.js kiváló I/O-igényes (Input/Output — be- és kimenet: adatbázis, API-hívás, fájl) feladatokra, és kevésbé jó nyers CPU-számításra. Az aszinkron kódot (Promise, async/await) külön fejezetben tanuljuk majd — most elég, ha a fogalmat érted.

Mikor jó választás a Node.js?

✅ Jól illik rá❌ Kevésbé illik rá
REST API-k, mikroszolgáltatásokNehéz matematikai/tudományos számítás
Valós idejű alkalmazások (chat, értesítés)Nagy méretű videó- vagy képfeldolgozás
Sok párhuzamos, rövid kérésHosszan futó, CPU-t terhelő batch-feladat
Frontenddel közös nyelv (JavaScript)Ahol a nyelvi szigorúság elsődleges

Node.js más nyelvek mellett

PlatformErősségeJellemző környezet
Node.jsEgy nyelv a teljes stackre, hatalmas npm-ökoszisztémaStartupok, API-k, valós idejű app
PHP (Laravel)Elterjedt webhoszting, gyors CRUD-fejlesztésKlasszikus weboldalak, CMS
Java (Spring)Stabilitás, szigorú típusok, vállalati eszközökBank, biztosító, nagyrendszer
Python (Django, FastAPI)Adattudomány és AI közelsége, olvasható kódAdatelemzés, gépi tanulás mögötti API
C# (.NET)Erős eszköztár, Microsoft-ökoszisztémaVállalati rendszerek
GoNagy teljesítmény, egyszerű párhuzamosságInfrastruktúra, nagy terhelésű szolgáltatás
TIPP

Nincs „legjobb” backend-nyelv. A választást a feladat, a csapat tudása és a meglévő rendszer határozza meg. Amit itt megtanulsz — HTTP, REST, adatbázis, hitelesítés, rétegezés — minden nyelvben ugyanúgy érvényes.

9Hol fut a backend éles környezetben?

Fejlesztés közben a saját gépeden fut (localhost:3000). Élesben („production”) valahol folyamatosan futnia kell:

MegoldásMit jelent?Példa
VPS / dedikált szerver
Virtual Private Server
Bérelt gép, mindent te állítasz beHetzner, DigitalOcean
PaaS
Platform as a Service
Feltöltöd a kódot, a többit ők intézikRender, Railway
KonténerAz alkalmazás „dobozban”, mindenütt egyformán futDocker + Kubernetes
ServerlessCsak függvények, igény szerint indulAWS Lambda, Cloudflare Workers

10Gyakori félreértések

TévhitValóság
„A Node.js egy programozási nyelv.”Nem: a nyelv a JavaScript. A Node egy futtatókörnyezet.
„A Node.js többszálú, azért gyors.”A te kódod egy szálon fut; a gyorsaság a nem blokkoló I/O-ból jön.
„Ha a frontend validál, a backendnek nem kell.”A kliensoldali ellenőrzés megkerülhető — a backendé a valódi védelem.
„Az API és a backend ugyanaz.”Az API a backend felülete; a backend ennél több.
„A mikroszolgáltatás jobb, mint a monolit.”Más problémára való. Kis projektnél csak bonyolít.
„A .env fájlban biztonságban vannak a titkok.”Csak akkor, ha nem tölti fel senki a GitHubra. Ez az egyik leggyakoribb hiba.

11Feladatok

Elméleti feladatok
F1⭐ alap

Besorolás. Döntsd el minden feladatról, hogy frontend, backend vagy mindkettő, és indokold egy mondatban!

  • a) A jelszó erősségének jelzése gépelés közben
  • b) Annak eldöntése, hogy egy felhasználó törölhet-e egy terméket
  • c) A termékkép megjelenítése
  • d) Számlaszám generálása egy rendeléshez
  • e) „Nincs találat” üzenet kiírása
  • f) Annak ellenőrzése, hogy van-e még készleten a termék
F2⭐ alap

Útvonal. Írd le saját szavaiddal, mi történik attól a pillanattól, hogy beírod a https://webshop.hu/termekek címet, addig, amíg megjelenik az oldal! Legalább 6 lépés legyen.

F3⭐⭐ haladó

Támadás. Egy webshopban a frontend így küldi el a rendelést: { "termekId": 42, "darab": 2, "egysegar": 100, "vegosszeg": 200 }. Melyik mezőket nem szabad elhinnie a backendnek, és honnan szerezze meg helyettük az adatot? Írd le, mit ellenőrizzen a szerver!

F4⭐⭐ haladó

Pincér-hasonlat. Magyarázd el egy nem programozó ismerősödnek, miért tud a Node.js egy szálon sok felhasználót kiszolgálni! Találj ki saját hasonlatot a pincér helyett.

F5⭐⭐⭐ kihívás

Felelősségtérkép. Készíts listát arról, milyen feladatai lennének egy iskolai napló backendjének! Csoportosítsd őket: adattárolás, üzleti logika, hitelesítés, jogosultság, külső szolgáltatás. Legalább 10 elem legyen.

Gyakorlati feladatok (számítógépnél, kódolás nélkül)
G1⭐ alap

Hálózati fül. Nyiss meg egy tetszőleges weboldalt, majd F12 → Network. Frissítsd az oldalt, és válaszolj:

  • Hány kérés indult összesen? Mennyi adat töltődött le?
  • Mi volt az első kérés, és milyen státuszkódot adott vissza?
  • Keress egy olyan kérést, amely nem HTML-t, hanem JSON-t adott vissza!
G2⭐⭐ haladó

API a valóságban. Nyisd meg a böngészőben: https://jsonplaceholder.typicode.com/users

  • Milyen formátumú a válasz? Hány felhasználó van benne?
  • Nézd meg a /users/1 és a /posts?userId=1 címeket is. Mit vettél észre az URL felépítésében?
  • Ez egy backend válasza — hol van hozzá a frontend?
G3⭐⭐⭐ kihívás

Nyomozás. Válassz egy általad ismert webhelyet vagy alkalmazást. Írj róla fél oldalt: mit gondolsz, mi zajlik a backendjén, amikor bejelentkezel, feltöltesz egy képet, vagy kedvelsz egy bejegyzést?

12Önellenőrző kvíz

Nyolc kérdés. Válassz, és azonnal megtudod, jó volt-e — magyarázattal.

13Összegzés

  1. A web kliens–szerver modellen működik: a kliens kér, a szerver kiszolgál.
  2. A frontend a felhasználó gépén fut és megjelenít; a backend a szerveren fut, és az adatokért, a logikáért és a biztonságért felel.
  3. A backend az egyetlen igazságforrás: a klienstől érkező adat mindig gyanús. Minden ellenőrzést meg kell ismételni a szerveren.
  4. Titkok (jelszavak, API-kulcsok, adatbázis-hozzáférés) soha nem kerülhetnek a frontendbe.
  5. A Node.js egy JavaScript-futtatókörnyezet a böngészőn kívül; a V8 motorra épül, és nem blokkoló, eseményvezérelt módon dolgozik — ezért bír el sok párhuzamos kérést.
  6. A Node.js erőssége az I/O-igényes feladat; a hosszú CPU-számítás blokkolja a szálat.
  7. Monolittal kezdünk, rétegekre bontva: router → middleware → controller → service → adatréteg.

14Fogalomtár

FogalomJelentés
KliensA kérést küldő program (böngésző, mobilapp, másik szerver)
SzerverA kérést kiszolgáló program vagy gép
BackendA szerveroldali alkalmazás: adat, logika, biztonság
FrontendA felhasználó eszközén futó, megjelenítésért felelős rész
API
Application Programming Interface
Programozói felület: két program „szerződése” arról, hogyan beszélnek
Végpont (endpoint)Az API egy konkrét elérési pontja (pl. GET /api/products)
PortSzámmal azonosított „ajtó”, amelyen egy program a hálózaton hallgatózik
localhostA saját géped (IP: 127.0.0.1)
Node.jsJavaScript-futtatókörnyezet a böngészőn kívül, V8 motorral
EseményhurokA Node.js működési elve: nem várakozik a lassú műveletekre
Nem blokkoló I/OA lassú műveletek a háttérben zajlanak, a szerver közben más kérést szolgál ki
MonolitEgyetlen alkalmazásban megvalósított backend
Hitelesítés„Ki vagy?” (bejelentkezés)
Jogosultság„Mit tehetsz meg?” (szerepkörök, engedélyek)
Single source of truthAz adat egyetlen mérvadó helye — a backend
← Vissza Vezérlőpult