Furkan KapukayaYazılım geliştirme
Sunucu, Bulut ve DevOps3 dk okuma

Geliştirme, Test ve Canlı Ortam Ayrımı: Neden ve Nasıl?

Yazılım projelerinde geliştirme (dev), test/staging ve canlı (prod) ortamlarının amacı, yapılandırma ayrımı, test verisi ve KVKK, sürüm akışı ve küçük ekipler için pratik kurulum.

"Benim bilgisayarımda çalışıyordu" cümlesi yazılım dünyasının klasiklerindendir. Bir değişikliği doğrudan canlı sistemde denemek ise kesintilerin en yaygın nedenlerinden biridir. Ortam ayrımı; geliştirmenin, denemenin ve gerçek kullanımın birbirine zarar vermeden ilerlemesini sağlar.

Üç temel ortam

OrtamAmaçKim kullanır?Veri
Geliştirme (dev)Kod yazmak, denemekGeliştiricilerSahte veya örnek veri
Test / StagingCanlıya çıkmadan son kontrolEkip, müşteri temsilcisiAnonimleştirilmiş veya test verisi
Canlı (prod)Gerçek kullanımMüşterilerGerçek veri

Staging ortamı, canlı ortamın mümkün olduğunca birebir kopyası olmalıdır: aynı işletim sistemi, aynı sürümler, benzer ayarlar. Farklar ne kadar azsa sürpriz o kadar azdır. Docker bu benzerliği sağlamanın en pratik yollarından biridir.

Yapılandırma ayrımı

Kod aynı kalmalı, yalnızca ayarlar ortamdan ortama değişmelidir:

  • Veritabanı bağlantıları
  • Ödeme sağlayıcısının test ve canlı anahtarları
  • E-posta ve SMS gönderim ayarları
  • Log seviyesi

.NET'te appsettings.Development.json, appsettings.Production.json ve ortam değişkenleri bu iş için tasarlanmıştır. Gizli bilgiler kodla birlikte saklanmamalıdır. Ayrıntılar: .NET'te yapılandırma ve gizli bilgiler.

Test ortamında sık yapılan iki büyük hata

1. Gerçek müşterilere e-posta veya SMS göndermek

Test ortamında canlı veritabanının kopyası kullanılıyorsa ve bildirim ayarları da kopyalandıysa, müşterilere "test" mesajları gidebilir. Test ortamında bildirimleri yalnızca belirlenmiş test adreslerine gönderen bir güvenlik kilidi olmalıdır.

2. Gerçek kişisel veriyi test ortamına taşımak

Canlı veritabanını olduğu gibi test ortamına kopyalamak KVKK açısından risklidir; test ortamları genellikle daha az korunur. Kişisel verileri maskeleyen veya anonimleştiren bir aktarım tercih edilmelidir. Bkz. KVKK saklama ve imha politikası.

Sürüm akışı

  1. Geliştirici değişikliği kendi ortamında yapar ve test eder.
  2. Değişiklik incelenir ve ana dala alınır (code review).
  3. Otomatik olarak test ortamına dağıtılır (CI/CD).
  4. Test ortamında kontrol edilir, gerekiyorsa müşteri onayı alınır.
  5. Aynı paket canlıya alınır; canlı için ayrıca derleme yapılmaz.

Canlıya alım sırasında kesintiyi önlemek için bkz. sıfır kesintili dağıtım.

Küçük projeler için

Her proje için üç ayrı sunucu gerekmez. Küçük bir projede:

  • Geliştirme: geliştiricinin bilgisayarı
  • Test: canlı sunucuda ayrı bir alt alan adı ve ayrı veritabanı (test.ornek.com)
  • Canlı: ana alan adı

Bu basit ayrım bile hataların büyük kısmının müşteriye ulaşmasını engeller.

Sık sorulan sorular

Test ortamı arama motorlarında görünmeli mi?

Hayır. Parola koruması veya noindex ile arama motorlarından gizlenmelidir; aksi halde kopya içerik ve bilgi sızıntısı riski oluşur.

Veritabanı değişiklikleri ortamlar arasında nasıl taşınır?

Elle SQL çalıştırmak yerine sürümlenmiş migration dosyaları kullanılmalıdır. EF Core migration'ları bu iş için uygundur.

Sonuç

Ortam ayrımı, hataları müşteriden önce yakalamanın en temel yoludur. Basit bir test ortamı bile canlı sistemdeki sürprizleri belirgin şekilde azaltır.