MODUL 1 - LEKCIJA 2

Frontend, Backend i Tehnološki Stack

Razumijevanje podjele odgovornosti u modernim web aplikacijama: od DOM manipulacije u browseru do serverske logike i baza podataka.

⏱️ Trajanje: ~50 min 📚 Nivo: Srednji 🎯 Koncepti: Frontend, Backend, DOM, SPA, Node.js, C#

🏛️ Cjelokupna Slika (Big Picture)

Moderne aplikacije (posebno u javnoj upravi) nisu jedan ogroman program, već ekosistem strogo razdvojenih komponenti. Osnovna podjela je na Frontend (ono što korisnik vidi) i Backend (procesorski mozak).

Frontend (Klijent)
Browser (Chrome, Safari)
Renderuje UI, parsira HTML, CSS, vrti JavaScript.
Backend (Server)
Web Server (IIS, Node.js)
Zaprima HTTP zahtjeve, provjerava prava, izvršava C# / JS kod.
Baza (Data)
Baza Podataka (SQL Server)
Trajno čuva podatke o korisnicima i sistemu na diskovima.

🎨 Frontend: Umjetnost i Logika u Browseru

Vaš browser (Klijent) prima sirovi tekst od servera i mora ga pretvoriti u vizuelni interfejs. Tri tehnologije drže cijeli web:

  • HTML (Struktura): Tekstualni jezik koji opisuje *šta* se nalazi na stranici. (Ovo je dugme, ovo je naslov).
  • CSS (Izgled): Skup pravila o bojama, dimenzijama i pozicijama. Prevara vaših očiju.
  • JavaScript (Ponašanje): Programski jezik koji živi u browseru i može mijenjati HTML i CSS u realnom vremenu.

Krunski koncept: DOM (Document Object Model)

Kada browser preuzme HTML, on ga pretvara u hijerarhijsko drvo u memoriji, zvano DOM. JavaScript ne komunicira direktno s tekstom fajla; on komunicira sa DOM stablom.

💻 Vanilla JS - Manipulacija DOM-a i slanje zahtjeva
// 1. JS pronalazi vizuelni HTML element u DOM stablu
const dugme = document.getElementById("btnPosaljiZahtjev");
const porukaDiv = document.getElementById("statusPoruka");

// 2. JS dodaje "Osluškivač" i čeka korisnikov klik
dugme.addEventListener("click", async () => {
    
    // 3. JS mijenja DOM u letu (Korisnik vidi "Učitavam...")
    porukaDiv.innerText = "Slanje zahtjeva na server...";
    dugme.disabled = true;

    try {
        // 4. Pozivanje Backenda u pozadini (Non-blocking)
        const odgovor = await fetch("https://api.vlada.gov.ba/zahtjevi", { method: "POST" });
        
        if(odgovor.ok) {
            porukaDiv.innerText = "Uspješno poslano!";
            porukaDiv.style.color = "green"; // Mijanjanje CSS-a iz JS-a
        }
    } catch (err) {
        porukaDiv.innerText = "Greška u komunikaciji!";
    }
});

SPA (Single Page Application) vs Tradicionalni Web

U javnim sistemima često ćete čuti termin SPA (korištenjem Reacta ili Angulara). U tradicionalnom webu (stari PHP), svaki klik je značio da server šalje potpuno novi HTML fajl, a browser je treptao i učitavao stranicu ispočetka.

U SPA arhitekturi, server pošalje prazan HTML fajl i jedan masivni JavaScript fajl. Nakon toga, browser preuzima kontrolu. Kada korisnik klikće po aplikaciji, browser samo u pozadini skida "čiste podatke" (JSON) sa servera i JavaScript sâm iscrtava DOM elemente po ekranu, bez ikakvog treptanja ili ponovnog učitavanja stranice.

Biblioteka / Framework Opis Svrha
React Napravljen od strane Facebooka. Najpopularnija UI biblioteka koja koristi Virtualni DOM za ekstremnu brzinu iscrtavanja. SPA Portali, Interaktivni Dashboards
Angular Napravljen od strane Googlea. Ogroman, kompletan framework koji prisiljava inženjere na strogu arhitekturu (TypeScript obavezan). Masivni Enterprise softveri za javnu upravu

⚙️ Backend: Poslovna Pravila i Sigurnost

Dok potencijalno kompromitovani browseri šalju zahtjeve, Backend stoji kao neosvojiva tvrđava i provjerava svaki bit. Kod koji se vrti na Backendu napisan je jezicima poput C# (.NET), Java, Python ili Node.js.

🛑 Sigurnosna Paradigma: Ne vjeruj Klijentu nikada (Zero Trust)

Korisnik može kliknuti na dugme "Odobri" u svom browseru. Njegov browser može poslati komandu serveru. Međutim, server nikada ne smije izvršiti tu komandu bez provjere.

  • Autentifikacija: Da li je korisnik prijavljen? (Provjera tokena).
  • Autorizacija: Da li ovaj korisnik ima pravo da odobri ovaj specifični dokument? (Provjera rola u bazi).
  • Validacija: Da li su iznosi poreza unutar granica zakona? (Poslovna logika).

Ako se ove provjere prebace na Frontend umjesto na Backend, aplikacija je ozbiljno hakirana u roku od 5 minuta pomoću Postmana!

Fenomen Node.js i The Event Loop

JavaScript je originalno bio samo za Frontend. Tada (2009. godine) se rodio Node.js – omotač koji vrti V8 JavaScript Engine unutar operativnog sistema servera. Node.js je unio revoluciju kroz model zvan Asinhroni, Non-blocking I/O potpomognut s Event Loop-om.

Node.js Event Loop Model
🔄 Osluškivanje

Jedan pametni konobar umjesto tima sporih konobara

Kako rade tradicionalni serveri (ASP.NET / PHP) vs Node.js:

Ovo čini Node.js ekstremno brzim i skalabilnim za visoko opterećene sisteme (poput chatova, streamova ili API gatewaya), ali jako lošim za teške procesorske kalkulacije (npr. renderovanje videa).

💻 Express.js (Node.js framework) Kreiranje API-ja u 5 linija koda
const express = require('express');
const app = express();

// Ruter koji odgovara na HTTP GET za korisnike
app.get('/api/gradjani/:jmbg', (req, res) => {
    const trazeniJmbg = req.params.jmbg;
    // (Ovdje ide logika čitanja iz baze, asinhrono)
    
    // Server vraća JSON
    res.json({ ime: "Damir", status: "Aktivan", broj: trazeniJmbg });
});

// Paljenje servera na portu 3000
app.listen(3000, () => console.log('API sluša na portu 3000'));

💾 Baze Podataka (Database Layer)

Programski kod ne pamti ništa kad se server ugasi (jer je sve u RAM memoriji). Da bi podaci trajno ostali zabilježeni (npr. stanje poreskog duga), koristimo Sisteme za upravljanje bazama podataka (DBMS).