Bir uygulamanın kodunu değiştirmeden davranışını nasıl değiştirebilirsiniz? Cevap, çoğu zaman config dosyalarında saklıdır. Peki config dosyası nedir, hangi formatlarda kullanılır ve production ortamında neden bu kadar kritiktir?
Config dosyası (yapılandırma dosyası), bir uygulamanın, servisin veya sistemin çalışma zamanı davranışını belirleyen ayarları; kaynak koddan bağımsız, insan tarafından okunabilir bir dosyada tanımlayan yapıdır. Host adresleri, port numaraları, log seviyeleri, timeout değerleri, feature flag'ler, bağlantı havuzu boyutları gibi parametreler tipik olarak config dosyasında yaşar.
Buradaki kritik nokta şu: config dosyası olmadan da yazılım çalışır, ama her ortam değişikliğinde (dev → staging → production) kaynak kodun yeniden derlenmesi gerekir. Config dosyası bu bağımlılığı kırar; aynı binary veya container image'ı, farklı config dosyalarıyla farklı ortamlarda çalıştırabilirsiniz.
Bu prensip, 12-Factor App metodolojisinin üçüncü maddesinde de net şekilde tanımlanır: konfigürasyon, koddan kesin bir şekilde ayrılmalıdır.
Format seçimi; okunabilirlik, veri tipi zenginliği, yorum satırı desteği ve ekosistem araçlarıyla uyumluluk arasındaki denge üzerinden yapılır.
| Format | Güçlü Yönü | Tipik Kullanım |
|---|---|---|
| YAML | Özel bir programlama bilgisi gerektirmeden kolayca okunabilir, hiyerarşik yapıyı doğal ifade eder. | Kubernetes manifest'leri, Ansible playbook, CI/CD pipeline |
| JSON | Programatik parse için standart, şema doğrulaması (JSON Schema) kolay. | API config'leri, package.json, tsconfig.json |
| TOML | Açık ve tip-güvenli sözdizimi, YAML'in belirsizliklerinden arınmış. | Rust (Cargo.toml), Python (pyproject.toml) |
| INI | Basit key=value yapısı, düşük öğrenme eğrisi. | Windows uygulamaları, eski sistem servisleri |
| XML | Şema doğrulama (XSD) ve namespace desteği güçlü. | Enterprise Java uygulamaları (Spring, web.xml) |
| .env | Environment variable ile birebir eşleşir, secrets için pratik. | 12-factor uygulamalar, Docker Compose |
YAML'in indentation (girinti) hassas yapısı, büyük ölçekli config dosyalarında sessiz hatalara (silent failure) yol açabilir. Bu nedenle YAML kullanan ekipler genellikle CI pipeline'ına yamllint veya şema doğrulama adımı eklerler.
application.yml, Node.js'te .env + dotenv kütüphanesi, Python'da settings.py bu katmanın tipik örnekleridir.
ConfigMap ve Secret nesneleriyle native olarak çözülür. ConfigMap davranışsal ayarları, Secret ise hassas verileri taşır ve pod'lara enjekte edilir.
Config dosyalarıyla ilgili en yaygın hata, database şifresi veya API anahtarı gibi hassas verilerin düz metin olarak dosyaya yazılıp version control'e commit edilmesidir. Olgun sistemlerde davranışsal config Git'te tutulurken, secrets Vault veya AWS Secrets Manager gibi araçlarda saklanır.
Config drift, bir sistemin fiili yapılandırmasının, tanımlı referans (baseline) yapılandırmadan zamanla sapmasıdır. Manuel yapılan bir hotfix'in kod deposuna yansıtılmaması sonucu oluşur. Sorun anında, "belgelenen" config ile "gerçek" config farklı olduğu için kök neden analizi saatler sürebilir.
Bu, tam da SolarWinds Network Configuration Management modülünün çözmeye odaklandığı problem sınıfıdır: cihaz ve servis config'lerinin sürekli izlenmesi, baseline'dan sapmaların otomatik tespiti ve değişiklik geçmişinin denetlenebilir şekilde tutulması.
config.dev.yaml, config.prod.yaml gibi ayrım veya environment variable override mekanizması kullanılmalı.
Config dosyası, ayarları kalıcı bir dosyada; environment variable ise işletim sistemi veya container seviyesinde çalışma zamanında enjekte edilen değişkenlerde tutar. Pratikte ikisi genelde birlikte kullanılır: dosya varsayılan değerleri taşır, environment variable'lar bu değerleri override eder.
Periyodik olarak fiili config ile referans (baseline) config karşılaştırılır. Manuel yapıldığında hataya açıktır; bu nedenle sürekli izleme yapan otomasyon araçları (NOC platformları, IaC drift detection) tercih edilir.
İnsan tarafından sık düzenlenecekse (Kubernetes manifest, CI pipeline) YAML; makine tarafından üretilip tüketilecekse (API response, otomatik export) JSON daha uygundur. TOML, ikisinin ortasında tip güvenliği arayan projeler için iyi bir seçenektir.
SolarWinds Network Configuration Management, altyapınızdaki config drift'i otomatik tespit eder ve değişiklik geçmişini denetlenebilir şekilde tutar.
Daha Fazla Bilgi Alın →