Home SOFTWAREPomoć i savetiArhitektura modernih web aplikacija – Deo 2: Frontend arhitektura: SPA, SSR, SSG i izomorfni pristup

Arhitektura modernih web aplikacija – Deo 2: Frontend arhitektura: SPA, SSR, SSG i izomorfni pristup

od Saša Ristić
Single Page Application

Dobrodošli u drugi deo serijala na ITNetwork.rs! U prethodnom delu smo upoznali monolit, SOA i mikroservise. Sada ulazimo u srce korisničkog iskustva – frontend arhitekturu. Danas ćemo razjasniti tri ključna pristupa: SPA (Single Page Application), SSR (Server-Side Rendering) i SSG (Static Site Generation), kao i moderni izomorfni (univerzalni) pristup koji kombinuje sve prednosti.

Zašto je frontend arhitektura bitna?

Frontend više nije samo „lepa šminka“. On je:

  • Prvi dodir korisnika sa aplikacijom
  • Ključ za SEO i performanse
  • Mesto gde se dešava 80% interakcije

Loš izbor arhitekture = spori load, loš SEO, frustrirani korisnici.

1. SPA (Single Page Application)

Definicija

Cela aplikacija se učitava jednom (index.html + JS bundle), a sve dalje promene se dešavaju u browseru preko JavaScript-a.

Tehnologije

  • React + React Router
  • Vue + Vue Router
  • Angular

Kako radi?

spaPrednosti

+ Objašnjenje
Munjevita interakcija Nema reload-a strane
Odličan UX Animacije, real-time
Offline podrška Service Workers
Lako razvijanje Komponentni model
Mane
– Objašnjenje
Spor prvi load Veliki JS bundle
Loš SEO Google indeksira, ali ne idealno
SEO zahteva SSR Bez dodatnog rada – prazna stranica
Kada koristiti?
  • Admin paneli
  • Aplikacije za registrovane korisnike
  • Real-time dashboardi (npr. analytics)

2. SSR (Server-Side Rendering)

Definicija

HTML se generiše na serveru za svaki zahtev i šalje gotov browseru.

Tehnologije

  • Next.js (React)
  • Nuxt.js (Vue)
  • Remix, Angular Universal

Kako radi?

ssrPrednosti

+ Objašnjenje
Odličan SEO Google vidi pun HTML
Brzi First Paint Korisnik vidi sadržaj odmah
Bolji Core Web Vitals LCP, FCP
Mane
– Objašnjenje
Sporiji TTI (Time to Interactive) Hydration traje
Veće opterećenje servera Render po zahtevu
Kompleksniji deployment Node.js server obavezan
Kada koristiti?
  • Blogovi, e-commerce
  • Marketing stranice
  • Bilo šta gde je SEO ključan

3. SSG (Static Site Generation)

Definicija

HTML se generiše u vreme build-a (npr. npm run build) i servira kao statički fajlovi preko CDN-a.

Tehnologije

  • Next.js (getStaticProps)
  • Gatsby, Astro, 11ty, Hugo

Kako radi?

ssgPrednosti

+ Objašnjenje
Munjeviti load Statički fajlovi sa CDN-a
Najbolji SEO Puni HTML odmah
Jeftino skaliranje Nema servera
Sigurnost Nema runtime koda
Mane
– Objašnjenje
Statičan sadržaj Nema dinamike po korisniku
Dug build za velike sajtove 10.000 strana = 5+ min
Potreban rebuild za promene CMS webhook → rebuild
Kada koristiti?
  • Blogovi, dokumentacija
  • Marketing sajtovi
  • Landing page-ovi

4. Izomorfni (univerzalni) pristup – najbolje iz svih svetova

Definicija

Kombinuje SSR + SSG + SPA po stranici ili ruti.

Primer: Next.js App Router

Ruta Režim Objašnjenje
/ SSG Statički homepage
/blog/[slug] SSG Generisano u build-u
/dashboard SSR Autentifikovan, dinamički
/chat SPA Real-time, WebSocket

Next.js App Router – moderan standard

Struktura (App Directory)

app/
├── layout.tsx          → Glavni layout
├── page.tsx            → Homepage (SSG)
├── blog/
│   └── [slug]/page.tsx → SSG + ISR
├── dashboard/
│   └── page.tsx        → SSR (server component)
└── api/
    └── todos/route.ts  → Serverless API

Primer: app/page.tsx (SSG)

// app/page.tsx
export default function Home() {
  return (
    <main>
      <h1>Dobrodošli na ITNetwork.rs</h1>
      <p>Ovo je statički generisana stranica.</p>
    </main>
  );
}

// SSG po defaultu u App Router-u
Primer: app/dashboard/page.tsx (SSR)
// app/dashboard/page.tsx
import { cookies } from 'next/headers';

export default async function Dashboard() {
  const token = cookies().get('auth')?.value;
  const res = await fetch('https://api.itnetwork.rs/user', {
    headers: { Authorization: `Bearer ${token}` }
  });
  const user = await res.json();

  return (
    <div>
      <h1>Zdravo, {user.name}!</h1>
      <p>Tvoj dashboard – renderovan na serveru.</p>
    </div>
  );
}

React Server Components (RSC) – kod se izvršava samo na serveru, ne šalje se klijentu → manji bundle!

State Management u modernom frontendu

Alat Kada koristiti
React Context Jednostavan globalni state
Zustand Lagani, bez boilerplate-a
Jotai Atomski state, odličan za forme
Redux Toolkit Veliki timovi, složena logika
TanStack Query Server state (API keširanje)
Primer: Zustand store
// lib/store.ts
import { create } from 'zustand';

type State = {
  todos: string[];
  addTodo: (text: string) => void;
};

export const useTodoStore = create<State>((set) => ({
  todos: [],
  addTodo: (text) => set((state) => ({ todos: [...state.todos, text] })),
}));
Performanse: Code Splitting & Lazy Loading

Automatski u Next.js

// Dinamički import
const HeavyChart = dynamic(() => import('../components/HeavyChart'), {
  loading: () => <p>Učitavanje grafika...</p>
});

Bundle analiza

npx next build
# → Analiziraj .next/analyze

Cilj: Prvi bundle < 100 KB (gzipped)

Dijagram: SPA vs SSR vs SSG

dijagram spa vs ssr vs ssgPoređenje: SPA vs SSR vs SSG

Kriterijum SPA SSR SSG
Prvi load ★★ ★★★★ ★★★★★
SEO ★ ★★★★★ ★★★★★
Interaktivnost ★★★★★ ★★★ ★★
Skalabilnost ★★★ ★★ ★★★★★
Dinamički podaci ✓ ✓ ISR
Trošak servera Nizak Visok Minimalan
Zaključak: Koji pristup izabrati?
Tip aplikacije Preporuka
Blog / Dokumentacija SSG (Next.js + MDX)
E-commerce SSR + SSG (kategorije statički, proizvod SSR)
Admin panel SPA ili SSR sa autentifikacijom
SaaS aplikacija Izomorfni (Next.js App Router)

Zlatno pravilo: Počni sa SSG gde možeš. Dodaj SSR gde moraš.

Šta dalje?

U trećem delu ulazimo u backend arhitekturu:

  • REST vs GraphQL vs gRPC
  • API Gateway
  • Verzionisanje i HATEOAS

Tvoj izazov

  1. Napravi Next.js aplikaciju sa:
    • app/page.tsx → SSG
    • app/profile/page.tsx → SSR (dohvati korisnika sa /api/user)
  2. Postavi na Vercel
  3. Komentariši ispod: „Koju arhitekturu koristiš trenutno i zašto?“

Autor: Dušan Antonijević – saradnik ITNetwork.rs
Hvala na čitanju! Podeli tekst sa kolegama.

Banner

Banner

Možda će vam se svideti i