Vercel Best Practices: Modern Web Uygulamaları İçin Rehber
Yazar: Burak Balkı | Kategori: Full Stack Development | Okuma Süresi: 9 dk
Vercel üzerinde yüksek performanslı, ölçeklenebilir ve SEO uyumlu web uygulamaları geliştirmek için kapsamlı best practices rehberi. Edge Functions, ISR ve m...
## Vercel Nedir ve Modern Web Geliştirmedeki Rolü
**Vercel**, modern web geliştirme süreçlerini hızlandıran, özellikle **frontend** odaklı ekipler için tasarlanmış bir bulut platformudur. Geleneksel sunucu yönetiminin karmaşıklığını ortadan kaldırarak geliştiricilerin sadece koda odaklanmasını sağlar. **Serverless** mimarisi üzerine kurulu olan Vercel, **Next.js** framework'ünün yaratıcısı olması sebebiyle bu ekosistemle kusursuz bir uyum sergiler.
Modern web uygulamalarında hız, ölçeklenebilirlik ve kullanıcı deneyimi (UX) en kritik faktörlerdir. Vercel, bu ihtiyaçları **Edge Network**, **Global CDN** ve **Automated CI/CD** süreçleriyle karşılar. Bu rehberde, projelerinizi Vercel üzerinde en yüksek verimle nasıl çalıştıracağınızı, maliyetleri nasıl optimize edeceğinizi ve performans darboğazlarını nasıl aşacağınızı detaylandıracağız.
## Vercel Mimarisi: Edge Network ve Serverless Altyapısı
Vercel'in gücü, içeriği kullanıcıya en yakın noktadan sunan **Edge Network** yapısında yatar. Geleneksel sunucular tek bir bölgede (region) bulunurken, Vercel veriyi dünya genelindeki yüzlerce noktaya dağıtır.
- **Edge Runtime:** Node.js runtime'ına göre çok daha hafif ve hızlıdır. Soğuk başlatma (**Cold Start**) sürelerini neredeyse sıfıra indirir.
- **Serverless Functions:** Gerektiğinde çalışan, kullanılmadığında maliyet yaratmayan fonksiyonlardır. Ölçeklendirme otomatik olarak gerçekleşir.
| Özellik | Edge Runtime | Node.js Runtime |
|---------|--------------|-----------------|
| Cold Start | Yok denecek kadar az | Milisaniye/Saniye seviyesinde |
| Kütüphane Desteği | Sınırlı (Web API odaklı) | Tam Node.js desteği |
| Bölgesel Erişim | Global (Kullanıcıya en yakın) | Belirli bir bölge (Region) |
## Proje Yapılandırması ve vercel.json Kullanımı
Vercel projelerinizin davranışını özelleştirmenin en etkili yolu, kök dizinde bulunan `vercel.json` dosyasıdır. Bu dosya ile yönlendirmeler, başlıklar ve çalışma zamanı ayarları yapılandırılır.
```json
{
"version": 2,
"public": true,
"cleanUrls": true,
"trailingSlash": false,
"redirects": [
{
"source": "/old-blog/:path*",
"destination": "/blog/:path*",
"permanent": true
}
],
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "X-Content-Type-Options",
"value": "nosniff"
}
]
}
]
}
```
> **Önemli Not:** `vercel.json` dosyasındaki yapılandırmalar, Next.js projelerinde genellikle `next.config.js` ile yönetilebilir. Ancak framework bağımsız projelerde bu dosya hayati önem taşır.
## Edge Functions ve Middleware ile Dinamik İçerik Yönetimi
**Middleware**, bir istek tamamlanmadan önce çalışan kod parçacıklarıdır. Kimlik doğrulama, A/B testleri veya coğrafi yönlendirmeler için idealdir. Edge runtime üzerinde çalıştığı için inanılmaz hızlıdır.
```typescript
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const country = request.geo?.country || 'US';
if (country === 'TR') {
return NextResponse.rewrite(new URL('/tr', request.url));
}
return NextResponse.next();
}
export const config = {
matcher: '/shop/:path*',
};
```
Bu örnekte, kullanıcının coğrafi konumuna göre dinamik bir yönlendirme yapılmaktadır. Bu işlem sunucu tarafında değil, **Edge** üzerinde gerçekleştiği için gecikme (latency) minimumdur.
## Veri Yönetimi: Vercel KV, Postgres ve Blob
Vercel artık sadece bir hosting platformu değil, aynı zamanda bir veri çözüm ortağıdır. **Vercel KV** (Redis tabanlı), **Vercel Postgres** ve **Vercel Blob** (Dosya depolama) ile full-stack uygulamalar kolayca geliştirilebilir.
### Vercel KV ile Hızlı Veri Erişimi
```typescript
import { kv } from '@vercel/kv';
export async function getProductStock(productId: string) {
const stock = await kv.get(`stock:${productId}`);
return stock;
}
```
### Vercel Postgres Bağlantısı
```typescript
import { sql } from '@vercel/postgres';
export async function getUsers() {
const { rows } = await sql`SELECT * FROM users WHERE active = true`;
return rows;
}
```
## Incremental Static Regeneration (ISR) ile Optimizasyon
**ISR**, statik sayfaların tüm siteyi yeniden derlemeden (rebuild) arka planda güncellenmesini sağlar. Bu, binlerce sayfası olan e-ticaret siteleri için devrim niteliğindedir.
```typescript
export async function getStaticProps() {
const data = await fetch('https://api.example.com/products');
const products = await data.json();
return {
props: {
products,
},
// Sayfayı her 60 saniyede bir arka planda yenile
revalidate: 60,
};
}
```
Bu yöntemle hem statik sitenin hızına sahip olursunuz hem de verileriniz her zaman güncel kalır.
## CI/CD Süreçleri ve Preview Deployments Yönetimi
Vercel'in en güçlü yanlarından biri **Git** entegrasyonudur. Her **Pull Request (PR)** açıldığında, Vercel size özel bir **Preview URL** oluşturur.
- **Production Branch:** Genellikle `main` veya `master` branch'idir. Buraya yapılan push'lar canlı ortamı günceller.
- **Preview Deployments:** Her branch için izole bir ortam sağlar. Ekip içi incelemeler için mükemmeldir.
- **Instant Rollback:** Bir hata durumunda, önceki başarılı bir deployment'a tek tıkla geri dönebilirsiniz.
## Güvenlik Standartları ve Ortam Değişkenleri
Asla API anahtarlarını veya veritabanı şifrelerini kodun içine gömmeyin. Vercel Dashboard üzerindeki **Environment Variables** sekmesini kullanın.
```bash
# Vercel CLI ile ortam değişkenlerini çekme
vercel env pull .env.local
```
Güvenlik için **Content Security Policy (CSP)** başlıklarını mutlaka yapılandırın:
```json
{
"key": "Content-Security-Policy",
"value": "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';"
}
```
## Performans İzleme ve Vercel Analytics
**Vercel Web Analytics** ve **Speed Insights**, gerçek kullanıcı verilerini (RUM) toplar. Google'ın **Core Web Vitals** metriklerini (LCP, FID, CLS) takip etmek SEO başarısı için kritiktir.
- **LCP (Largest Contentful Paint):** Ana içeriğin yüklenme hızı.
- **CLS (Cumulative Layout Shift):** Sayfadaki görsel kaymalar.
- **FID (First Input Delay):** Etkileşim hızı.
## Vercel Best Practices: Ölçeklenebilir Mimari Stratejileri
1. **Image Optimization:** `next/image` kullanarak görselleri otomatik olarak WebP formatına dönüştürün ve boyutlandırın.
2. **Monorepo Kullanımı:** Büyük projelerde **Turborepo** ile monorepo yapısına geçerek derleme sürelerini %90 oranında azaltın.
3. **Caching Strategy:** `Cache-Control` başlıklarını doğru yapılandırarak CDN verimliliğini artırın.
4. **Serverless Function Limits:** Fonksiyonlarınızın çalışma süresini (timeout) ve bellek limitlerini ihtiyaca göre optimize edin.
```typescript
// Vercel Cron Jobs Örneği (vercel.json)
{
"crons": [
{
"path": "/api/cron/cleanup",
"schedule": "0 0 * * *"
}
]
}
```
## Sık Yapılan Hatalar ve Kaçınılması Gerekenler
- **Gereksiz Client-side Rendering:** SEO ve performans için mümkün olduğunca sunucu tarafında (Server Components) render yapın.
- **Büyük Bundle Boyutları:** Kullanılmayan kütüphaneleri temizleyin. `tree-shaking` özelliğinden faydalanın.
- **Hatalı Caching:** Dinamik veriler için yanlışlıkla statik cache kullanmak kullanıcıların eski verileri görmesine neden olur.
- **Region Uyumsuzluğu:** Veritabanınız AWS Frankfurt'ta ise, Vercel fonksiyonlarınızı da `fra1` bölgesine kurun. Latency (gecikme) süresini düşürün.
## Sık Sorulan Sorular (FAQ)
**1. Vercel ücretsiz planı ticari projeler için uygun mu?**
Hayır, Vercel'in ücretsiz (Hobby) planı sadece kişisel projeler ve ticari olmayan kullanım içindir. Ticari projeler için Pro plan gereklidir.
**2. Soğuk başlatma (Cold Start) sorununu nasıl çözerim?**
Edge Runtime kullanarak veya fonksiyonlarınızın boyutunu küçülterek cold start sürelerini minimize edebilirsiniz.
**3. Vercel sadece Next.js mi destekliyor?**
Hayır; Nuxt, SvelteKit, React, Vue, Angular ve hatta Hugo gibi birçok framework ve statik site oluşturucu ile tam uyumludur.
**4. Özel domain eklemek ücretli mi?**
Hayır, tüm planlarda sınırsız özel domain ekleyebilir ve otomatik SSL sertifikasından yararlanabilirsiniz.
**5. Vercel'de veritabanı barındırabilir miyim?**
Evet, Vercel Postgres ve Vercel KV gibi entegre çözümler mevcuttur. Ayrıca harici veritabanlarına (MongoDB, PlanetScale vb.) kolayca bağlanabilirsiniz.
## Özet ve Sonuç
Vercel, modern web ekosisteminin en güçlü araçlarından biridir. Doğru yapılandırılmış bir **vercel.json**, optimize edilmiş **Edge Functions** ve stratejik **ISR** kullanımı ile dünya standartlarında performans gösteren uygulamalar geliştirebilirsiniz. Unutmayın, en iyi uygulama her zaman kullanıcıya en yakın ve en hızlı olanıdır.