Gå til indholdet

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"]
# Byg og kør container
docker build -t min-app .
docker run -p 5000:5000 min-app

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:

  1. Databaser: Hvordan data gemmes og hentes
  2. Cloud: Hvordan applikationer hostes
  3. Containere: Hvordan applikationer pakkes
  4. CI/CD: Hvordan kode bygges, kontrolleres og deployes automatisk
  5. 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.