- Node.js backend geliştirmede ne iş görür?
- Temel: olay döngüsü ve asenkron programlama
- Framework seçimi: sade yapıdan modüler mimariye
- REST API tasarımı, veritabanı ve kimlik doğrulama
- Mikroservis, mesajlaşma ve test
- Üretim hazırlığı, performans ve bellek profilleme
- Öğrenme yolu ve sık yapılan hatalar
- Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
Node.js ile backend geliştirmeye nereden başlamalı?
Node.js çalışma zamanı, olay döngüsü, NestJS ile modüler API, veritabanı, kimlik doğrulama, test ve performans profilleme adımlarıyla backend öğrenme yolu.
Node.js backend geliştirmede ne iş görür?
Node.js, JavaScript’i tarayıcı dışında, sunucuda çalıştıran bir çalışma zamanıdır. Backend geliştirmede bir sunucu uygulaması yazmak için kullanılır: istekleri alır, iş kurallarını işletir, veritabanı ve dış servislerle konuşur, yanıt döner. Aynı dilin hem ön yüzde hem arka yüzde kullanılabilmesi ekipler arası geçişi kolaylaştırır; TypeScript ile birlikte kullanıldığında tip güvenliği de eklenir.
Node.js’in en belirgin özelliği tek iş parçacıklı, olay güdümlü ve engellemeyen girdi-çıktı yapısıdır. Bu model, çok sayıda eşzamanlı bağlantının çoğunlukla veritabanı ya da ağ yanıtı beklediği uygulamalar için verimlidir: API sunucuları, gerçek zamanlı uygulamalar, mikroservisler ve entegrasyon katmanları gibi. Yoğun CPU hesabı gerektiren işlerde ise aynı model sınırlayıcıdır ve işin ayrı süreçlere ya da iş parçacıklarına taşınması gerekir.
Bu nedenle Node.js ile iyi backend yazmak, dili bilmekten çok çalışma zamanının nasıl işlediğini anlamayı gerektirir.
Temel: olay döngüsü ve asenkron programlama
Node.js’e girişte en önemli kavram olay döngüsüdür. Gelen istekler bir kuyrukta işlenir; bir istek veritabanı yanıtı beklerken döngü başka işlere geçer. Bu yüzden asenkron programlama (geri çağırma, söz ve async/await) bir tercih değil, çalışma biçimidir.
Başlangıçta öğrenilmesi gereken noktalar şunlardır: • Engelleyen kodun etkisi: senkron ağır bir hesaplama ya da engelleyen dosya işlemi, olay döngüsünü tıkar ve tüm istekleri yavaşlatır. • Hata yönetimi: asenkron akışlarda yakalanmayan hata uygulamayı düşürebilir. Her söz zincirinin ve async işlevin hata yolunu düşünün. • Akışlar (stream): büyük dosya ya da veri setlerini belleğe tamamen almadan parça parça işlemek. • Modül sistemi ve paket yönetimi: bağımlılık ekleme, sürüm kilitleme ve güvenlik güncellemelerini izleme. • Yapılandırma: ortam değişkenleriyle ortam bazlı ayar, gizli bilgilerin koda gömülmemesi.
Bu temel sağlam değilse, framework’ün sunduğu kolaylıklar altında gizli performans ve hata sorunları birikir.
Framework seçimi: sade yapıdan modüler mimariye
Node.js ile API yazmak için minimal bir HTTP framework’ü yeterlidir; küçük servislerde hızlı ve esnektir. Proje büyüdükçe katman yapısı, bağımlılık yönetimi ve kod organizasyonu sorun olur. Bu noktada yapıyı dayatan bir framework avantaj sağlar.
NestJS bu ihtiyaca yönelik, TypeScript ile yazılmış modüler bir framework’tür. Uygulama modüllere bölünür; her modül denetleyici (istekleri karşılar), servis (iş kuralını taşır) ve bunları bağlayan bağımlılık enjeksiyonu ile organize olur. Bu yapı test edilebilirliği artırır, ekipte ortak bir kod düzeni kurar ve büyük kod tabanını yönetilebilir tutar.
Seçimde şunlara bakın: ekibin TypeScript ve nesne yönelimli desen deneyimi, proje ölçeği, beklenen yaşam süresi ve kod tabanına katılacak geliştirici sayısı. Küçük bir betik ya da tek amaçlı servis için tam teşekküllü framework gereksiz olabilir; uzun ömürlü, çok geliştiricili bir ürün içinse yapı baştan kazanç sağlar.
REST API tasarımı, veritabanı ve kimlik doğrulama
Backend’in görünen yüzü API’dir. İyi bir REST API kaynak odaklı adlandırma, doğru HTTP yöntemleri ve durum kodları, tutarlı hata biçimi, sayfalama ve filtreleme ile sürümleme gibi kararlar üzerine kuruludur. Girdi doğrulaması ilk savunma hattıdır: istemciden gelen hiçbir veriye güvenilmez, her istek şema ile doğrulanır.
Veritabanı katmanında bir ORM ya da sorgu oluşturucu kullanılır. ORM, tablo ile nesneler arasında eşleme sağlar ve migrasyon, ilişki yönetimi gibi işleri kolaylaştırır; ancak çalıştırdığı sorguyu görmemek performans sorunlarına yol açabilir. Yaygın tuzaklar arasında her kayıt için ayrı sorgu çalıştıran döngüler, indekssiz filtreler ve uzun işlemlerdir. Şema değişikliklerini sürümlü migrasyonlarla yönetmek de bu katmanın parçasıdır.
Kimlik doğrulama ve yetkilendirme ayrı konulardır. Doğrulama kullanıcının kim olduğunu, yetkilendirme ne yapabileceğini belirler. Oturum ya da imzalı jeton tabanlı yaklaşımlar kullanılır; parola güvenli biçimde saklanır, jeton süreleri ve yenileme akışı düşünülür. Rol tabanlı erişim kontrolü, her kaynak için sahiplik denetimini de içermelidir; yalnızca kullanıcının giriş yapmış olması başkasının verisine erişim izni anlamına gelmez.
Mikroservis, mesajlaşma ve test
Uygulama büyüdükçe bazı işlerin anlık yanıt dışında çalışması gerekir: e-posta göndermek, rapor üretmek, ödeme sonrası işlemleri yürütmek. Bu işler bir mesaj kuyruğuna alınıp arka planda işlenirse API hızlı yanıt verir, hata durumunda yeniden denenebilir. Mikroservis mimarisi bu fikrin uç noktasıdır: bağımsız servisler mesaj ve API üzerinden haberleşir.
Mikroservis her sorunun çözümü değildir. Dağıtık sistemler ağ hataları, veri tutarlılığı ve gözlemlenebilirlik zorlukları getirir. Küçük ve orta ölçekli ürünlerde iyi modüllere ayrılmış tek bir uygulama (modüler monolit) çoğu zaman daha az maliyetli ve daha anlaşılır bir başlangıçtır.
Test katmanı backend kalitesinin güvencesidir. Birim testleri iş kurallarını, entegrasyon testleri veritabanı ve dış servis bağlantılarını, uçtan uca testler ise API’nin dışarıdan göründüğü davranışı sınar. Bağımlılık enjeksiyonu kullanan yapılar, gerçek bağımlılıkları sahte nesnelerle değiştirmeyi kolaylaştırır.
Üretim hazırlığı, performans ve bellek profilleme
Üretimde çalışan bir Node.js uygulaması için günlükleme, sağlık kontrolleri, yapılandırma yönetimi, kapanış sırasında bağlantıları düzgün kapatma ve sürekli teslim hattı gerekir. Kapsayıcı kullanılıyorsa imaj boyutu, süreç yönetimi ve çok çekirdekli makinede birden fazla süreç çalıştırma gibi konular gündeme gelir.
Performans sorunları sıklıkla şu kaynaklardan çıkar: olay döngüsünü tıkayan CPU yoğun kod, bellek kullanımının zamanla artması ve veritabanı sorguları. Teşhis için ölçüm gerekir; tahminle optimizasyon çoğu zaman yanlış yere harcanan emektir. Ölçüm altyapısında yanıt süresi, olay döngüsü gecikmesi, bellek kullanımı ve hata oranı gibi metrikler izlenir.
CPU profilleme hangi işlevlerin zaman harcadığını gösterir. Yığın (heap) analizi ise bellek sızıntılarını bulmaya yarar: nesneler beklenmedik biçimde tutuluyorsa, örneğin sürekli büyüyen bir önbellek ya da silinmeyen olay dinleyicisi, bellek zamanla artar ve uygulama yavaşlar ya da çöker. Bu analiz yük altında ve üretime benzer koşullarda yapılmalıdır. Üretimde sürekli profilleme, sorunları kullanıcı fark etmeden yakalamayı hedefler.
Öğrenme yolu ve sık yapılan hatalar
Mantıklı bir öğrenme sırası şöyledir: JavaScript ve TypeScript temelleri, asenkron programlama, Node.js çalışma zamanı, HTTP ve REST, bir framework ile API, veritabanı ve migrasyon, kimlik doğrulama, test, üretime alma ve izleme. Her aşamanın sonunda küçük ama gerçek bir proje, örneğin bir görev takip API’si, öğrenileni pekiştirir.
Sık yapılan hatalar: • Asenkron akışları bilmeden kod yazmak ve yakalanmayan hatalarla uygulamayı düşürmek. • Girdi doğrulamasını atlamak ve istemciye güvenmek. • ORM’in ürettiği sorguyu hiç incelememek. • Sırları kod deposuna koymak. • Yetkilendirmeyi yalnızca arayüzde yapmak; sunucu tarafında sahiplik denetimi olmamak. • Test yazmayı sona bırakmak. • Performans sorununu ölçmeden tahminle gidermeye çalışmak. • Bağımlılıkları güncellememek ve bilinen güvenlik açıklarını taşımak.
Mindset programlarında nerede çalışırsınız?
Mindset’in Modern Web Geliştirme, Backend (Node.js / NestJS) programı şu başlıkları içerir: Node.js runtime ve mimari temelleri, NestJS mimarisi ve modüler yapı, RESTful API tasarımı ve uygulama, veritabanı entegrasyonu ve ORM, kimlik doğrulama ve yetkilendirme, mikroservis ve mesajlaşma desenleri, test, CI/CD ve üretim hazırlığı.
Node.js Performans ve Bellek Profilleme programı ise çalışma zamanı ve olay döngüsü, ölçüm altyapısı ve metrikler, CPU profilleme, bellek ve heap analizi, akış, eşzamanlılık ve ölçekleme, üretimde sürekli profilleme konularına odaklanır.
İlgili Mindset programı
Modern Web Geliştirme — Backend (Node.js / NestJS)
Sık sorulan sorular
Node.js ile backend yazarken TypeScript kullanmak şart mı?
Şart değildir, ama ekip büyüdükçe ve kod uzun yaşadıkça tip güvenliği hataları çalışma anından derleme anına çeker. Arayüz sözleşmeleri, ortak veri tipleri ve güvenli yeniden düzenleme TypeScript'in somut kazançlarıdır. Küçük bir betik ya da prototip için düz JavaScript yeterlidir; uzun ömürlü bir servis için TypeScript sıklıkla tercih edilir.
NestJS mi Express mi seçmeliyim?
Küçük, tek amaçlı bir servis için minimal bir HTTP framework’ü yeterli ve hızlıdır. Uzun ömürlü, çok geliştiricili, çok modüllü bir ürün için NestJS gibi yapıyı dayatan bir framework ortak düzen, test edilebilirlik ve bakım kolaylığı sağlar. Ekip deneyimi ve proje ölçeği karar belirler.
Node.js her backend için uygun mu?
Girdi-çıktı ağırlıklı işler, yani API, gerçek zamanlı iletişim ve entegrasyon katmanları için iyi bir tercihtir. Yoğun CPU hesabı gerektiren işlerde tek iş parçacıklı yapı sınırlayıcıdır; bu işleri ayrı sürece, iş parçacığına ya da başka bir servise taşımak gerekir.
Node.js uygulamasında bellek sızıntısı nasıl bulunur?
Önce bellek kullanımının zamanla artıp artmadığını metriklerle doğrulayın. Sonra yük altında yığın görüntüleri alıp karşılaştırarak hangi nesnelerin birikmeyi sürdürdüğünü bulun. Tipik nedenler sınırsız büyüyen önbellek, kaldırılmayan olay dinleyicileri ve kapanmayan bağlantılardır.
Backend öğrenmek için hangi proje yapılmalı?
Kimlik doğrulama, veritabanı, doğrulama ve test içeren küçük bir API iyi başlangıçtır; örneğin görev takibi ya da kütüphane kayıt sistemi. Projeyi bir ortama dağıtıp günlük ve izleme ekleyin. Gerçek bir dağıtım, yerel çalışan koddan farklı sorunları öğretir.
İlgili rehberler
İlgili eğitimler
Kategori: Yazılım Geliştirme, DevOps ve Bulut Teknolojileri