Dobrodošli u prvi deo serijala „Arhitektura modernih web aplikacija“ na ITNetwork.rs! U ovom uvodnom tekstu ćemo postaviti čvrste temelje – razumećemo šta je arhitektura softvera, kako se razvijala kroz vreme, i uporediti tri ključna pristupa: monolit, SOA (Service-Oriented Architecture) i mikroservise. Na kraju ćemo videti praktičan primer monolitne aplikacije u Node.js + Express-u.
Šta je arhitektura softvera?
Arhitektura softvera je visokonivojski dizajn sistema – način na koji organizujemo komponente aplikacije, njihove međusobne veze i principe koji upravljaju njihovim ponašanjem.
„Arhitektura je ono što ostaje kada uklonite sav kod.“ – Grady Booch
Dobra arhitektura omogućava:
- Skalabilnost – rast sistema sa opterećenjem
- Održivost – lako dodavanje novih funkcionalnosti
- Performanse – brzi odgovori korisnicima
- Otpornost – oporavak od grešaka
- Timsku produktivnost – više timova rade paralelno
Evolucija arhitekture web aplikacija (1995–2025)
| Godina | Pristup | Ključne karakteristike |
|---|---|---|
| 1995–2005 | Monolit | Cela aplikacija u jednom deploy-u (PHP, ASP, Java Servleti) |
| 2005–2015 | SOA / ESB | Servisi komuniciraju preko centralnog bus-a |
| 2010–danas | Mikroservisi | Nezavisni servisi, polyglot, cloud-native |
| 2020–danas | Serverless / Edge | Funkcije po pozivu, izvršavanje na ivici mreže |
Definicija
Cela aplikacija je jedan izvršni fajl ili jedan deploy paket:
- UI + logika + baza = jedan kodni repozitorijum
- Primeri: WordPress, klasični Laravel/PHP projekti, Spring Boot aplikacije
Prednosti
| + | Objašnjenje |
|---|---|
| Jednostavan razvoj | Sve je na jednom mestu |
| Lako debugovanje | Jedan proces, jedan log |
| Brzi lokalni razvoj | npm start i gotovo |
| Jednostavan deployment | Jedan fajl na server |
| – | Objašnjenje |
|---|---|
| Teško skaliranje | Ceo sistem se skalira zajedno |
| Dugotrajni buildovi | Promena jedne linije → rebuild svega |
| Tehnološki lock-in | Menjaš jezik → pišeš sve iz početka |
| Rizik od „spaghetti“ koda | Sve je povezano |
- Startup u ranoj fazi (MVP)
- Mali tim (1–3 developera)
- Projekat sa ograničenim opsegom
2. SOA (Service-Oriented Architecture)
Definicija
Aplikacija je podeljena na servise koji komuniciraju preko standardizovanih protokola (SOAP, XML-RPC, kasnije REST).
Centralni ESB (Enterprise Service Bus) upravlja rutiranjem, transformacijom i orkestracijom.
Prednosti
- Ponovna upotreba servisa
- Jasnije granice između domena
- Lakše održavanje velikih sistema
Mane
- Kompleksnost ESB-a („magija u kutiji“)
- Performansni overhead
- Teško praćenje grešaka kroz lance poziva
SOA je bila korak napred, ali je često postala „distribuirani monolit“.
3. Mikroservisna arhitektura
Definicija
Aplikacija je podeljena na male, nezavisne servise, gde svaki:
- Ima svoju bazu podataka
- Deploy-uje se samostalno
- Komunicira preko laganih protokola (HTTP, gRPC, message queues)
- Vlasništvo ima jedan tim („You build it, you run it“ – Amazon)
Prednosti
| + | Objašnjenje |
|---|---|
| Nezavisno skaliranje | Samo servis pod opterećenjem se skalira |
| Tehnološka sloboda | JS, Python, Go, Rust – po servisu |
| Brži release ciklus | Deploy 10 puta dnevno |
| Otpornost | Pad jednog servisa ne ruši sve |
| – | Objašnjenje |
|---|---|
| Distribuirana kompleksnost | Mrežni pozivi, latency, failover |
| Upravljanje podacima | Nema globalnih transakcija |
| Operativni overhead | Više servera, logova, monitoringa |
| Potreban DevOps | Bez automatizacije – haos |
- Veliki timovi (>6 developera)
- Kompleksni domeni (e-commerce, fintech)
- Potreba za brzim eksperimentisanjem
Poređenje: Monolit vs. SOA vs. Mikroservisi
| Kriterijum | Monolit | SOA | Mikroservisi |
|---|---|---|---|
| Veličina tima | Mali | Srednji | Veliki |
| Brzina razvoja (početak) | ★★★★★ | ★★★ | ★★ |
| Skalabilnost | ★★ | ★★★ | ★★★★★ |
| Kompleksnost | ★ | ★★★★ | ★★★★★ |
| Deployment | Jedan klik | Više klikova | Automatizacija obavezna |
| Primer kompanije | Startup.rs | Banka 2008 | Netflix, Uber, Shopify |
Napravimo jednostavnu TODO aplikaciju kao monolit.
Struktura projekta
todo-monolith/
├── server.js
├── package.json
├── db.js
└── routes/
└── todos.js
1. package.json
{
"name": "todo-monolith",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.18.2",
"body-parser": "^1.20.2"
}
}
2. db.js – In-memory baza
// db.js
let todos = [
{ id: 1, title: "Kupi mleko", completed: false },
{ id: 2, title: "Nauči mikroservise", completed: true }
];
let nextId = 3;
module.exports = { todos, nextId };
3. routes/todos.js
// routes/todos.js
const express = require('express');
const router = express.Router();
const db = require('../db');
router.get('/', (req, res) => {
res.json(db.todos);
});
router.post('/', (req, res) => {
const { title } = req.body;
if (!title) return res.status(400).json({ error: 'Title required' });
const todo = {
id: db.nextId++,
title,
completed: false
};
db.todos.push(todo);
res.status(201).json(todo);
});
module.exports = router;
4. server.js
// server.js
const express = require('express');
const bodyParser = require('body-parser');
const todoRoutes = require('./routes/todos');
const app = express();
const PORT = 3000;
app.use(bodyParser.json());
app.use('/api/todos', todoRoutes);
app.get('/', (req, res) => {
res.send('<h1>TODO Monolit API</h1><p>POST /api/todos → kreiraj</p>');
});
app.listen(PORT, () => {
console.log(`Monolit radi na http://localhost:${PORT}`);
});
Pokretanje
npm install
npm start
Testiranje (cURL)
# Dohvati sve
curl http://localhost:3000/api/todos
# Kreiraj novi
curl -X POST http://localhost:3000/api/todos \
-H "Content-Type: application/json" \
-d '{"title": "Pročitaj ITNetwork serijal"}'
Sve je u jednom procesu. Jedna greška = pad celog sistema.
Dijagram: Monolitna arhitektura
Celokupna logika je u jednom procesu. Lako za početak – teško za skaliranje.
Kada krenuti od monolita?
| Situacija | Preporuka |
|---|---|
| MVP, 1–2 developera | Monolit |
| 10+ funkcionalnosti, 5+ timova | Mikroservisi |
| Enterprise sa legacy sistemima | SOA ili postepena migracija |
Zlatno pravilo: Počni sa monolitom. Refaktoriši u mikroservise kada osetiš bol.
Šta dalje?
U drugom delu ćemo ući u frontend arhitekturu:
- SPA vs. SSR vs. SSG
- React Server Components
- Next.js App Router
Tvoj izazov
- Pokreni gornji primer lokalno
- Dodaj PUT /api/todos/:id za ažuriranje
- Komentariši ispod: „Da li bi tvoj trenutni projekat bio monolit ili mikroservisi?“
Serijal nastavlja uskoro na ITNetwork.rs Prati nas!
Autor: Dušan Antonijević – saradnik ITNetwork.rs
Hvala na čitanju! Ako ti se svideo tekst – podeli ga sa timom.



