Setup

Setup #

Pada fase awal pengembangan web application, banyak tim terlalu fokus pada fitur bisnis dan menunda konfigurasi dasar seperti security, performance, dan reliability. Padahal, kesalahan di tahap awal inilah yang paling mahal diperbaiki ketika aplikasi sudah scale.

Artikel ini membahas best practice setup awal web application secara menyeluruh, terlepas dari bahasa pemrograman atau framework yang digunakan (Go, Java, Node.js, PHP, Ruby, Python, dll). Tujuannya adalah memberikan mental model dan checklist praktis agar aplikasi:

  • Aman sejak hari pertama
  • Siap di-scale
  • Mudah dioperasikan
  • Tidak rapuh di production

HTTP & Network Fundamentals #

Layer HTTP adalah fondasi dari web application. Kesalahan di layer ini akan berdampak ke semua fitur di atasnya.

Response Compression #

Tujuan: Mengurangi ukuran response agar lebih cepat dikirim ke client.

Best practice:

  • Aktifkan Gzip atau Brotli
  • Gunakan Brotli jika aplikasi sudah full HTTPS
  • Compress hanya untuk response berbasis teks

Jangan compress:

  • File binary yang sudah terkompresi (jpg, png, mp4, zip)
  • Streaming response

Rule of thumb:

Text-based response → compress

HTTP Security Headers #

Banyak serangan web berhasil bukan karena bug logic, tetapi karena HTTP header tidak diset dengan benar.

Minimal header yang direkomendasikan:

  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY atau SAMEORIGIN
  • Referrer-Policy: strict-origin-when-cross-origin
  • Strict-Transport-Security (jika HTTPS)
  • Content-Security-Policy (mulai dari versi sederhana)

Header ini membantu mencegah:

  • Clickjacking
  • MIME sniffing
  • XSS
  • Downgrade attack

Security Layer (Non‑Negotiable) #

Security bukan fitur tambahan, tetapi bagian dari desain sistem.

CSRF Protection #

Wajib digunakan jika:

  • Menggunakan session-based authentication
  • Menggunakan cookie untuk auth

Best practice:

  • Gunakan CSRF token per session atau per request

  • Rotate token secara berkala

  • Set cookie dengan:

    • HttpOnly
    • Secure
    • SameSite=Lax atau Strict

Catatan penting:

  • API stateless dengan Bearer Token biasanya tidak memerlukan CSRF
  • Jangan mematikan CSRF hanya karena “API”

Authentication & Session Management #

Session-based auth:

  • Regenerate session ID setelah login
  • Set idle timeout
  • Simpan session di Redis atau database (bukan memory lokal)

JWT-based auth:

  • Access token short-lived
  • Refresh token terpisah
  • Hindari menyimpan JWT di localStorage (XSS risk)

Rate Limiting #

Rate limiting sering disalahartikan sebagai performance feature, padahal ini adalah security feature.

Minimum penerapan:

  • Per IP
  • Per user (jika login)
  • Per endpoint sensitif (login, register, OTP)

Manfaat:

  • Mencegah brute force
  • Mencegah abuse
  • Menjaga stabilitas sistem

Asset & Static Content Management #

Asset Versioning & Caching #

Masalah klasik: user mendapatkan asset lama setelah deploy.

Solusi:

  • Gunakan versioning berbasis hash

    app.4f3a2c.js
    
  • Cache asset dengan agresif:

    Cache-Control: public, max-age=31536000, immutable
    

Static vs Dynamic Content #

Best practice:

  • Static asset → CDN / object storage
  • Dynamic request → application server

Ini mengurangi beban server dan mempercepat response time.

CORS Configuration #

Kesalahan umum:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Best practice:

  • Whitelist origin
  • Batasi method dan header
  • Jangan enable credentials tanpa kebutuhan jelas

Performance Baseline #

Caching Strategy #

Gunakan layered caching:

  1. Browser cache
  2. CDN cache
  3. Application cache
  4. Database cache

Cocok untuk:

  • Config
  • Feature flag
  • Read-heavy endpoint

Database Connection Management #

Ini adalah sumber masalah production paling sering.

Wajib:

  • Gunakan connection pool

  • Set:

    • max open connection
    • max idle connection
    • connection lifetime

Tanpa ini, aplikasi rentan terhadap:

  • Connection leak
  • Broken pipe
  • Deadlock

Error Handling & Observability #

Error Handling #

Best practice:

  • Jangan expose stack trace ke client
  • Gunakan format error response konsisten
  • Log detail error hanya di server

Logging #

Minimal logging yang sehat:

  • Structured logging (JSON)
  • Request ID / Correlation ID
  • Level-based logging (INFO, WARN, ERROR)

Health Check & Metrics #

Endpoint wajib:

  • /health → service hidup
  • /ready → siap menerima traffic

Metrics penting:

  • Request count
  • Latency
  • Error rate

Configuration & Environment #

Configuration Management #

Best practice:

  • ENV untuk secret
  • Config file untuk non-secret
  • Jangan hardcode credential

Environment Separation #

Pisahkan:

  • Development
  • Staging
  • Production

Ini mencegah:

  • Config bocor
  • Testing di production

Deployment & Runtime Safety #

Graceful Shutdown #

Aplikasi harus:

  • Menangkap SIGTERM
  • Stop menerima request baru
  • Menyelesaikan request aktif

Penting untuk container dan orchestrator (Docker, Kubernetes).

Resource & Timeout Limit #

Wajib diset:

  • Memory limit

  • CPU limit

  • Timeout:

    • HTTP
    • Database
    • External API

Tanpa ini, satu request bermasalah bisa menjatuhkan seluruh sistem.


Checklist Praktis Setup Awal #

[ ] HTTPS + security headers
[ ] Compression (gzip/brotli)
[ ] CSRF protection
[ ] Rate limiting
[ ] Asset versioning & cache
[ ] DB connection pool
[ ] Structured logging
[ ] Health & readiness check
[ ] Graceful shutdown

Penutup #

Best practice setup awal web application bukan soal menambah kompleksitas, tetapi soal membuat sistem tetap hidup dalam kondisi buruk.

Semakin awal fondasi ini diterapkan, semakin murah biaya operasional, debugging, dan scaling di masa depan.

Sistem yang baik bukan yang tidak pernah gagal, tetapi yang gagal dengan cara yang terkendali.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact