🎨 Frontend: Tri Stuba
Frontend je sve ono što korisnik vidi i sa čim vrši interakciju u svom browseru. Bilo koja web stranica, od najjednostavnije do Facebook-a, izgrađena je na tri osnovna stuba:
Vizuelni prikaz granice između Klijenta (Frontend) i Servera (Backend)
-
HTML (HyperText Markup Language): Kostur stranice. On definiše
strukturu i sadržaj.
(Naslovi, paragrafi, slike, tabele) -
CSS (Cascading Style Sheets): Šminka stranice. On definiše izgled.
(Boje, fontovi, raspored elemenata, animacije) -
JavaScript (JS): Mozak stranice. On definiše ponašanje i
logiku.
(Šta se desi kad klikneš, validacija forme, učitavanje novih podataka bez osvježavanja)
♿ Pristupačnost (Accessibility - WCAG)
Kada pravite portal za državnu upravu, zakonska je obaveza da sajt bude dostupan svima, uključujući osobe sa oštećenim vidom ili sluhom. Ovo se definiše kroz WCAG (Web Content Accessibility Guidelines) standarde.
- Kontrast boja mora biti dovoljno visok (npr. crni tekst na bijeloj pozadini).
- Slike moraju imati
alt=""atribut kako bi screen readeri (čitači ekrana) znali objašnjavati sliku slijepim osobama. - Sve forme moraju biti upotrebljive isključivo korištenjem tastature (TAB tipka).
📝 Primjer: Frontend Validacija (JMBG)
U javnoj upravi, formulari su najvažniji dio Frontenda. Zamislite da građanin ispunjava zahtjev za dječiji doplatak. Prije nego što se podaci uopšte pošalju na server, Frontend (JavaScript) mora provjeriti da li su uneseni podaci smisleni.
function validirajJMBG(jmbg) {
// JMBG mora imati tačno 13 cifara i sastojati se samo od brojeva
if (jmbg.length !== 13 || isNaN(jmbg)) {
alert("Greška: JMBG mora sadržavati tačno 13 brojeva!");
return false;
}
// Ovdje bi išla napredna logika provjere datuma rođenja iz prvih 7 cifara...
return true;
}
Zašto Frontend validacija nije dovoljna? Korisnik može isključiti JavaScript u browseru ili lažirati zahtjev (koristeći Postman), čime zaobilazi ove provjere. Zato se validacija uvijek mora ponoviti i na Backendu.
🎨 1. CSS vs SCSS i Varijable
Kada radite na velikim projektima, obični CSS postane težak za održavanje. Zato koristimo SCSS (Sassy CSS). To je "nadogradnja" na CSS koja nam omogućava napredne stvari.
Obični CSS (CSS Varijable)
:root {
--glavna-boja: #ff0000;
}
h1 {
color: var(--glavna-boja);
}
CSS Varijable su super jer ih browser razumije nativno i mogu se mijenjati (npr. Dark Mode).
SCSS (Preprocessor)
$glavna-boja: #ff0000;
h1 {
color: $glavna-boja;
&:hover {
color: darken($glavna-boja, 10%);
}
}
SCSS se mora "prevesti" (kompajlirati) u CSS prije nego ga browser razumije. Nudi više opcija kao što su ugnježdivanje i funkcije.
🍦 Vanilla JavaScript
Kada čujete izraz "Vanilla JS", to ne znači neki novi framework. To je jednostavno šaljiv naziv za čisti, obični JavaScript bez ikakvih dodataka ili biblioteka.
Prije nego što počnete učiti React ili Angular, morate znati Vanilla JS. To je kao da učite voziti auto - prvo naučite voziti na mjenjaču (Vanilla), pa tek onda pređete na autopilota (Framework).
⚡ JavaScript (JS) vs TypeScript (TS)
Tokom učenja vidjet ćete nešto što se zove TypeScript. Šta je to?
- JavaScript (JS): Dinamičan jezik. Vi napišete
var ime = "Damir", a kasnije možete rećiime = 5. To je fleksibilno, ali može dovesti do grešaka ("Crash") u produkciji. - TypeScript (TS): To je JavaScript sa tipovima. Vi kažete
let ime: string = "Damir". Ako pokušate staviti broj, program vam javi grešku prije nego ga pokrenete.
React i Node.js mogu koristiti oba. Angular vas prisiljava da koristite TypeScript jer je sigurniji za velike timove.
📚 Biblioteke i Framework-ci
Pisanje čistog JS-a može biti sporo za velike projekte. Zato su programeri napravili alate da ubrzaju stvar.
| Alat | Jezik | Opis | Popularnost |
|---|---|---|---|
| jQuery | JavaScript | Stara škola (2006). Olakšao je rad sa HTML-om prije nego je JS postao dobar. Danas se manje koristi za nove projekte. | 📉 Opada |
| Bootstrap | CSS/SASS | Skup gotovih komponenti (dugmad, meniji). Odličan za brze prototipove, ali sajtovi često liče jedan na drugi. | 😐 Stabilan |
| Tailwind CSS | CSS | "Utility-first". Daje vam potpunu slobodu dizajna bez pisanja novog CSS fajla. Trenutni industrijski standard. | 🚀 Raste eksplozivno |
| React | JS / JSX (TS) | Napravio ga Facebook. Koristi JSX (HTML unutar JS-a). Fleksibilan, može se pisati u običnom JS-u ili TypeScript-u. | 👑 Kralj tržišta |
| Angular | TypeScript | Napravio ga Google. Strogo struktuiran. Prisiljava korištenje TypeScript-a od prvog dana. | 🏢 Enterprise standard |
⚙️ Backend: Serversko Programiranje
Backend je "ispod haube". To je dio aplikacije koji se izvršava na serveru. Korisnik nikada ne vidi ovaj kod, on vidi samo rezultat koji taj kod pošalje (obično u obliku HTML-a).
Glavni zadaci Backenda:
- Sigurnost: Provjera lozinki i prava pristupa. Za državne sisteme, ovo je kritično (štiti od SQL Injection-a, XSS napada).
- Baza Podataka: Čitanje, pisanje i sigurno arhiviranje (Audit log) podataka (Oracle, SQL Server, PostgreSQL).
- Poslovna Logika: Obračun dječijeg doplatka, provjera dugovanja za porez, generisanje zvaničnih PDF rješenja.
- API Integracije: Komunikacija sa drugim državnim institucijama (npr. provjera identiteta u MUP-u preko CIPS baze).
🛡️ Backend Sigurnost u Javnoj Upravi (Ranjivosti)
Kao inženjer e-Uprave, vi ste "čuvar kapije". Vaša nepažnja može dovesti do curenja osjetljivih podataka građana (Data Leak).
- SQL Injection: Najgora noćna mora. Ako korisnik u polje za pretragu upiše
'; DROP TABLE Gradjani;--, a vaš backend nije zaštićen, haker može izbrisati čitavu bazu. Rješenje: Uvijek koristiti parametrizirane upite (ORM alati poput EF Core to rade automatski). - XSS (Cross-Site Scripting): Napadač ubrizgava zlonamjeran JS kod u npr. online prijavu. Kada referent otvori tu prijavu, JS kod se izvršava na računaru referenta i može ukrasti njegovu sesiju. Rješenje: Backend mora očistiti (Sanitize) sav unos korisnika.
- Audit Logging (Revizijski trag): Svako pregledanje JMBG-a građanina od strane referenta mora ostati trajno zabilježeno (Ko, kada, sa koje IP adrese). U javnoj upravi, anonimnih akcija nad podacima građana ne smije biti.
Jezici Serverskog Programiranja
Za razliku od Frontenda (gdje je kralj samo JavaScript), na Backendu postoji mnogo opcija:
| Tehnologija | Opis | Primjeri |
|---|---|---|
| PHP | Tradicionalni kralj weba. Pokreće 70%+ weba (WordPress, Facebook). Jednostavan za početak, radi "request-per-process". | WordPress, Laravel |
| ASP.NET (C#) | Microsoftov moćni framework. Strogo tipiziran, brz, siguran. Odličan za velike sisteme (Enterprise). | Stack Overflow, E-Uprava |
| Node.js (JavaScript) | JavaScript na serveru! Omogućava korištenje istog jezika i na Frontendu i na Backendu. | Netflix, Uber, LinkedIn |
🚀 Fenomen Node.js
Tradicionalno, JavaScript je živio samo u browseru. Međutim, 2009. godine Ryan Dahl je uzeo V8 Engine (motor koji pokreće Chrome) i izvukao ga iz browsera, omogućivši da se JS vrti na serveru.
Node.js Event Loop (Non-blocking) vs Tradicionalni Multi-threaded model
Kako Node.js "kompajlira"? (V8 i JIT)
Mnogi misle da je JS spor jer je "interpretiran" (čita se liniju po liniju). To je nekad bilo tačno. Danas, Node.js koristi moćni V8 C++ Engine koji radi JIT (Just-In-Time) kompajliranje.
Šta je JIT?
Umjesto da čita kod svaki put iznova, V8 engine "u letu" pretvara vaš JavaScript direktno u
mašinski kod (nule i jedinice) dok aplikacija radi. Što duže aplikacija radi, V8
uči koji dijelovi koda se najviše koriste i dodatno ih optimizuje. Zato je Node.js munjevito brz.
🛠️ Da li je Node.js samo "JS Kompajler"?
Ne! Iako koristi V8 engine da "prevodi" kod, prava snaga Node.js-a leži u njegovoj Standardnoj Biblioteci (proširenjima).
Obični JavaScript u browseru NE SMIJE dirati fajlove na vašem disku (radi sigurnosti). Node.js MOŽE.
fs(File System): Omogućava čitanje i pisanje fajlova.http: Omogućava kreiranje web servera.os: Daje informacije o operativnom sistemu i procesoru.
Dakle, Node.js = JavaScript Jezik + Super-moći (C++ moduli) za rad sa sistemom.
🔑 Single Thread & Event Loop
Za razliku od PHP-a ili ASP-a koji za svakog korisnika otvaraju novi "Thread" (što troši memoriju),
Node.js radi na jednom Thread-u ali je Non-blocking (ne čeka).
Primjer: Konobar (Node.js) primi narudžbu, preda je kuhinji (Baza/Fajl sistem) i odmah ide
do sljedećeg stola, ne čekajući da jelo bude gotovo. Kada je jelo gotovo, kuhinja mu "zvoni"
(Callback) i on ga nosi gostu. To ga čini izuzetno brzim za aplikacije sa puno malih podataka (chat,
streaming).
📦 NPM: Najveći App Store za programere
Uz Node.js dolazi i NPM (Node Package Manager). Zamislite ga kao "App Store" ili "Google Play", ali za biblioteke koda.
Umjesto da pišete kod za slanje emailova ili validaciju datuma ispočetka, vi jednostavno "skinete" gotov paket koji je neko drugi već napisao i testirao.
Instalacija paketa je jednostavna komanda:
npm install moment # Instalira biblioteku za rad sa vremenom
npm install express # Instalira web server framework
Sve zavisnosti vašeg projekta se zapisuju u fajl package.json. To je "recept" vašeg
projekta. Ako date taj recept drugom programeru, on samo ukuca npm install i NPM će skinuti
sve potrebne sastojke (biblioteke).
🌐 CDN i Cloudflare
CDN (Content Delivery Network) je mreža servera raspoređenih po cijelom svijetu.
Problem: Ako je vaš server u Sarajevu, a korisnik u New Yorku, podaci moraju putovati
preko okeana (velika latencija/kašnjenje).
Rješenje: Koristite CDN (npr. Cloudflare). Cloudflare kopira vaše
slike, CSS i JS na servere u New Yorku, Londonu, Tokiju...
Kada korisnik iz New Yorka otvori vašu stranicu, slike mu se učitavaju sa servera u New Yorku, a ne iz Sarajeva. Rezultat? Stranica se otvara trenutno.
Node.js vs PHP/ASP
- Node.js: Odličan za Real-time aplikacije (Chat, Notifikacije), SPA (Single Page Applications) backend. Isti jezik (JS) svuda.
- PHP/ASP: Često bolji za teške proračune, stabilne poslovne aplikacije, standardne web stranice. ASP.NET Core je danas brži od Node.js-a u sirovim performansama, ali Node.js ima ogroman ekosistem (NPM).