Yükleniyor...

Vercel Rehberi: Modern Web Dağıtımı ve Veritabanı Çözümleri

Yazar: Burak Balkı | Kategori: Database | Okuma Süresi: 10 dk

Vercel'in sunduğu Postgres, KV ve Blob gibi modern veritabanı çözümlerini, deployment stratejilerini ve performans optimizasyon tekniklerini içeren kapsamlı ...

## Vercel Nedir? Modern Web Geliştirme Ekosistemi **Vercel**, frontend geliştiriciler için optimize edilmiş, bulut tabanlı bir dağıtım (deployment) ve barındırma platformudur. Özellikle **Next.js** framework'ünün yaratıcısı olan ekip tarafından geliştirilen Vercel, sadece statik site barındırma değil, aynı zamanda **Serverless Functions**, **Edge Network** ve son dönemde eklenen **Vercel Storage** (Postgres, KV, Blob) çözümleriyle tam kapsamlı bir uygulama platformuna dönüşmüştür. Bu rehberde, Vercel'in sunduğu veritabanı çözümlerine, performans optimizasyonlarına ve modern mimari yapılarına odaklanarak, projelerinizi nasıl ölçeklendirebileceğinizi inceleyeceğiz. ## Vercel Storage: Sunucusuz Veritabanı Mimarisi Vercel, geleneksel veritabanı yönetiminin karmaşıklığını ortadan kaldırmak için "Storage" başlığı altında üç ana ürün sunar. Bu ürünler, altyapı yönetimi gerektirmeden, doğrudan kod içerisinden erişilebilen ölçeklenebilir çözümlerdir. | Hizmet | Teknoloji | Kullanım Durumu | | :--- | :--- | :--- | | **Vercel Postgres** | PostgreSQL (Neon) | İlişkisel veriler, karmaşık sorgular | | **Vercel KV** | Redis (Upstash) | Cache, session yönetimi, sayaçlar | | **Vercel Blob** | S3-compatible | Görsel, video ve dosya depolama | | **Edge Config** | Global Store | Feature flags, yönlendirme kuralları | ## Vercel CLI Kurulumu ve Proje Başlatma Vercel ekosistemine dahil olmanın en profesyonel yolu komut satırı arayüzünü (CLI) kullanmaktır. Bu araç, yerel geliştirme ortamı ile bulut ortamını senkronize eder. ```bash # Vercel CLI kurulumu npm i -g vercel # Giriş yapma vercel login # Projeyi başlatma ve deploy etme vercel ``` ## Vercel Postgres ile İlişkisel Veritabanı Yönetimi **Vercel Postgres**, sunucusuz (serverless) bir PostgreSQL çözümüdür. SQL tabanlı verilerinizi yönetmek için `@vercel/postgres` paketini kullanarak hızlıca entegre olabilirsiniz. Bu yapı, otomatik ölçeklenme ve düşük gecikme süresi sunar. ### Örnek: Veritabanı Bağlantısı ve Sorgu Çalıştırma ```typescript import { sql } from '@vercel/postgres'; export default async function handler(request, response) { try { // Tablo oluşturma veya veri çekme işlemi const result = await sql`SELECT * FROM users WHERE id = ${request.query.id}`; return response.status(200).json({ data: result.rows }); } catch (error) { return response.status(500).json({ error: error.message }); } } ``` ## Vercel KV (Key-Value) ile Hızlı Veri Erişimi **Vercel KV**, Redis tabanlı bir anahtar-değer deposudur. Özellikle yüksek hız gerektiren caching (önbellekleme) ve session (oturum) yönetimi işlemlerinde tercih edilir. Dayanıklılığı ve global erişilebilirliği ile öne çıkar. ### Örnek: Redis Üzerinde Sayaç Uygulaması ```typescript import { kv } from '@vercel/kv'; export async function GET() { // Sayfa görüntüleme sayısını artır const pageViews = await kv.incr('page_views'); return new Response(JSON.stringify({ views: pageViews }), { headers: { 'content-type': 'application/json' }, }); } ``` ## Vercel Blob ile Dosya ve Medya Yönetimi Geleneksel dosya yükleme süreçleri genellikle karmaşık S3 yapılandırmaları gerektirir. **Vercel Blob**, doğrudan API üzerinden dosya yüklemenize olanak tanır. Özellikle kullanıcı profil resimleri veya doküman yüklemeleri için idealdir. ### Örnek: Sunucu Tarafında Dosya Yükleme ```typescript import { put } from '@vercel/blob'; export async function POST(request: Request) { const { searchParams } = new URL(request.url); const filename = searchParams.get('filename'); const blob = await put(filename, request.body, { access: 'public', }); return Response.json(blob); } ``` ## Edge Functions ve Middleware Kullanımı **Edge Functions**, kodunuzun kullanıcıya en yakın coğrafi konumda çalışmasını sağlar. Bu, milisaniyeler düzeyinde yanıt süresi (latency) avantajı sunar. Middleware yapısı ile istekleri henüz sunucuya ulaşmadan manipüle edebilirsiniz. ### Örnek: Edge Middleware ile Coğrafi Kısıtlama ```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 === 'CN') { return new NextResponse('Access Denied', { status: 403 }); } return NextResponse.next(); } ``` ## Serverless Functions ve API Rotaları Vercel, `api/` dizini altındaki dosyaları otomatik olarak **AWS Lambda** üzerinde çalışan serverless fonksiyonlara dönüştürür. Bu sayede sunucu yönetimi yapmadan backend mantığı geliştirebilirsiniz. ### Örnek: Standart API Rotası ```javascript export default function handler(req, res) { const { method } = req; switch (method) { case 'GET': res.status(200).json({ message: 'Başarılı' }); break; default: res.setHeader('Allow', ['GET']); res.status(405).end(`Method ${method} Not Allowed`); } } ``` ## vercel.json Yapılandırması Projenizin davranışını özelleştirmek için kök dizinde bir `vercel.json` dosyası kullanabilirsiniz. Bu dosya; yönlendirmeler, header ayarları ve cron job tanımlamaları için kullanılır. ```json { "rewrites": [ { "source": "/eski-yol", "destination": "/yeni-yol" } ], "headers": [ { "source": "/(.*)", "headers": [ { "key": "X-Content-Type-Options", "value": "nosniff" } ] } ] } ``` ## Cron Jobs: Zamanlanmış Görevler Vercel üzerinde belirli aralıklarla çalışması gereken görevleri (örneğin veritabanı temizliği) `vercel.json` üzerinden tanımlayabilirsiniz. ```json { "crons": [ { "path": "/api/cron/cleanup", "schedule": "0 0 * * *" } ] } ``` ## Ortam Değişkenleri ve Güvenlik Veritabanı şifreleri veya API anahtarları gibi hassas veriler asla kodun içine yazılmamalıdır. Vercel Dashboard üzerinden veya CLI ile bu değişkenler tanımlanmalıdır. ```bash # CLI ile ortam değişkeni ekleme vercel env add DATABASE_URL ``` > **Önemli Not:** Ortam değişkenlerini ekledikten sonra projenizi yeniden deploy etmeniz gerekir (`vercel --prod`). ## Görsel Optimizasyonu ve Performans Vercel, görselleri otomatik olarak optimize eden bir altyapıya sahiptir. Bu, LCP (Largest Contentful Paint) skorunu iyileştirir. ```javascript import Image from 'next/image'; export default function Profile() { return ( Kullanıcı ); } ``` ## Best Practices: En İyi Uygulama Yöntemleri 1. **Cold Start Optimizasyonu:** Serverless fonksiyonlarda ağır kütüphaneleri fonksiyonun dışında import etmeyin, sadece ihtiyaç anında çağırın. 2. **Edge Network Kullanımı:** Statik içerikleri ve API yanıtlarını mümkün olduğunca Edge üzerinde cache'leyin. 3. **Vercel Postgres Connection Pooling:** Veritabanı bağlantı sayısını yönetmek için bağlantı havuzlarını (pooling) mutlaka kullanın. 4. **Preview Deployments:** Her pull request için oluşturulan önizleme ortamlarını kullanarak test süreçlerini otomatize edin. 5. **Environment Specific Variables:** Geliştirme, staging ve prod ortamları için farklı veritabanı URL'leri kullanın. ## Sık Yapılan Hatalar - **Büyük Paket Boyutları:** Serverless fonksiyon limitlerini (genellikle 50MB) aşan büyük paketler kullanmak. - **Global State Yanılgısı:** Serverless fonksiyonların her istekte sıfırlandığını unutup, global değişkenlerde veri saklamaya çalışmak. - **Yanlış Region Seçimi:** Veritabanı bölgesi ile fonksiyon bölgesinin farklı olması nedeniyle oluşan yüksek gecikme süresi. ## Performans İpuçları - **ISR (Incremental Static Regeneration):** Verilerinizi arka planda güncelleyerek statik sayfaların performansından ödün vermeyin. - **Streaming:** Uzun süren veritabanı sorgularında HTTP streaming kullanarak kullanıcıya anında geri bildirim verin. - **Caching Headers:** `Cache-Control` başlıklarını doğru yapılandırarak CDN verimliliğini artırın. ## Sık Sorulan Sorular (SSS) **1. Vercel sadece Next.js projeleri için mi uygundur?** Hayır. Vercel; React, Vue, Svelte, Angular, Nuxt ve hatta statik HTML/JS projeleri dahil olmak üzere 35'ten fazla framework'ü destekler. **2. Vercel Postgres ücretsiz mi?** Vercel'in hobi planında belirli limitler dahilinde (örneğin 256MB depolama) ücretsiz kullanım mevcuttur. **3. Cold start sorunu nedir?** Serverless fonksiyonların uzun süre kullanılmadığında uyku moduna geçmesi ve ilk istekte uyanırken yaşanan gecikmedir. Edge Functions kullanarak bu sorun minimize edilebilir. **4. Verilerim nerede saklanıyor?** Vercel Postgres verileri AWS üzerinde, KV verileri ise Upstash altyapısında seçtiğiniz bölgede (region) saklanır. **5. Kendi veritabanımı Vercel'e bağlayabilir miyim?** Evet. MongoDB, MySQL veya harici PostgreSQL veritabanlarınızı bağlantı dizesi (connection string) kullanarak Vercel projelerinize entegre edebilirsiniz. ## Özet ve Sonuç Vercel, modern web geliştirme süreçlerinde sadece bir hosting sağlayıcısı değil, aynı zamanda güçlü bir veri yönetim platformudur. **Vercel Postgres**, **KV** ve **Blob** gibi çözümler, frontend geliştiricilerin backend karmaşıklığına boğulmadan tam donanımlı uygulamalar geliştirmesine olanak tanır. Doğru yapılandırma ve best practice uygulamalarıyla, Google Core Web Vitals skorlarında mükemmel sonuçlar elde edebilir ve kullanıcılarınıza kesintisiz bir deneyim sunabilirsiniz.