Infrastruktur
Denne side er en perspektivside i den sene del af forløbet. Her bevæger vi os fra at skrive programmer til at se på, hvad der også skal være på plads, når software skal gemme data, deployes og køre stabilt i virkeligheden.
Moderne softwareudvikling kræver mere end bare kode. Der er et helt økosystem af værktøjer og infrastruktur, der understøtter udvikling, test og drift af software.
Databaser
En database er et organiseret system til at gemme og hente data. De fleste applikationer bruger en eller anden form for database.
Relationelle databaser (SQL)
Relationelle databaser organiserer data i tabeller med rækker og kolonner. Data i forskellige tabeller kan relateres til hinanden.
Populære valg: - PostgreSQL - MySQL - SQLite - Microsoft SQL Server
-- Opret en tabel
CREATE TABLE brugere (
id INTEGER PRIMARY KEY,
navn TEXT NOT NULL,
email TEXT UNIQUE
);
-- Indsæt data
INSERT INTO brugere (navn, email) VALUES ('Anna', 'anna@example.com');
-- Hent data
SELECT * FROM brugere WHERE navn = 'Anna';
NoSQL-databaser
NoSQL-databaser er designet til specifikke use cases og bruger ikke det traditionelle tabelformat.
Typer og eksempler: - Dokument: MongoDB, CouchDB - Nøgle-værdi: Redis, DynamoDB - Graf: Neo4j - Kolonne: Cassandra
// MongoDB dokument
{
"_id": "12345",
"navn": "Anna",
"email": "anna@example.com",
"interesser": ["programmering", "musik"]
}
Cloud computing
Cloud computing giver adgang til computerressourcer (servere, storage, databaser) over internettet, så du ikke selv skal købe og vedligeholde hardware.
De store udbydere: - Amazon Web Services (AWS) - Microsoft Azure - Google Cloud Platform (GCP)
Tjenester: - Virtual machines (EC2, Azure VMs) - Serverless functions (Lambda, Azure Functions) - Managed databases (RDS, Azure SQL) - Object storage (S3, Azure Blob Storage)
Containere og Docker
Containere er en måde at pakke en applikation med alle dens afhængigheder, så den kører ens uanset hvor den deployes.
Docker er den mest populære container-teknologi:
# Dockerfile eksempel
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Fordele ved containere: - “Works on my machine” problemet løst - Konsistent miljø fra udvikling til produktion - Nem skalering
CI/CD (Continuous Integration / Continuous Deployment)
CI/CD er praksis for automatisk at bygge, teste og deploye software.
CI (Continuous Integration): - Automatisk kør tests når kode pushes - Find fejl tidligt - Sørg for at ny kode integrerer med eksisterende
CD (Continuous Deployment): - Automatisk deploy til produktion - Hurtigere releases - Mindre risiko per release
Populære værktøjer: - GitHub Actions - GitLab CI/CD - Jenkins - Azure DevOps
# Eksempel: GitHub Actions workflow
name: Test og Deploy
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Kør tests
run: python -m pytest
Monitoring og logging
Når din applikation kører i produktion, skal du kunne overvåge dens sundhed og fejlfinde problemer.
Logging: - Gem information om hvad applikationen laver - Hjælper med fejlfinding - Eksempler: Log4j, Serilog, Python logging
Monitoring: - Overvåg ressourceforbrug (CPU, hukommelse) - Spor fejlrater og svartider - Send alarmer ved problemer - Eksempler: Prometheus, Grafana, Azure Monitor
Sikkerhed
Sikkerhed skal tænkes ind fra starten af udviklingen.
Grundlæggende principper: - Mindste privilegium: Giv kun de nødvendige rettigheder - Defense in depth: Flere lag af sikkerhed - Valider alt input: Stol aldrig på brugerdata
Almindelige trusler: - SQL injection - Cross-site scripting (XSS) - Broken authentication - Sensitive data exposure
# Dårligt - SQL injection sårbar
query = f"SELECT * FROM users WHERE name = '{user_input}'"
# Godt - parameteriseret query
cursor.execute("SELECT * FROM users WHERE name = ?", (user_input,))
Netværk
Forståelse af grundlæggende netværkskoncepter er vigtig for webudvikling.
Vigtige begreber: - IP-adresse: Unik adresse for en enhed på netværket - Port: Nummer der identificerer en specifik tjeneste - HTTP/HTTPS: Protokol for webkommunikation - DNS: Oversætter domænenavne til IP-adresser
https://www.example.com:443/sti/til/side
│ │ │ │
│ │ │ └── Path
│ │ └────── Port (443 for HTTPS)
│ └───────────────────── Domæne
└──────────────────────────── Protokol
Opsummering
Som udvikler behøver du ikke mestre alt dette fra starten, men det er godt at kende til:
- Databaser: Hvordan data gemmes og hentes
- Cloud: Hvordan applikationer hostes
- Containere: Hvordan applikationer pakkes
- CI/CD: Hvordan kode bygges, kontrolleres og deployes automatisk
- Sikkerhed: Grundlæggende sikkerhedspraksis
Start med det grundlæggende og udvid din viden efterhånden som du bygger mere komplekse applikationer.
Se også
- Læs Applikationer, hvis du vil koble infrastrukturen til konkrete softwaretyper.
- Læs Test, hvis du vil forstå selve testbegrebet før du ser på automatisering i CI/CD.
- Læs Versionsstyring, hvis du vil forstå, hvordan kodeændringer hænger sammen med byg, test og deployment.
- Brug Ressourcer, hvis du vil finde dokumentation og steder at læse videre.