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: nosniffX-Frame-Options: DENYatauSAMEORIGINReferrer-Policy: strict-origin-when-cross-originStrict-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:
HttpOnlySecureSameSite=LaxatauStrict
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.jsCache 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:
- Browser cache
- CDN cache
- Application cache
- 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.