Bölüm 9 / 33
Node.js Ekosistemi
Node.js çalışma modeli, modül sistemi, paket yönetimi, web framework'leri ve production işletimi.
5 canlı örnek — seçerek incele
İlgili kavramlar: REST, JSON, HTTP
API istek örneği
GET /api/products?q=ayakkabi&limit=24 Authorization: Bearer …
JavaScript'i tarayıcı dışında V8 üzerinde çalıştıran sunucu ve araç geliştirme ortamı.
JavaScript kodunu derleyen ve optimize ederek çalıştıran motor.
Node.js'in event loop, asenkron I/O, thread pool ve platform soyutlamasını sağlayan kütüphane.
Sistem davranışının olaylar ve bunlara bağlı dinleyicilerle ilerlemesi.
JavaScript callback'lerinin temel olarak tek ana thread üzerinde çalışması.
Asenkron I/O sonuçlarını ve callback kuyruklarını ana JavaScript akışına taşıyan mekanizma.
Dosya sistemi, DNS ve kriptografi gibi bazı işleri arka thread'lerde yürüten havuz.
Ağ veya disk beklerken ana JavaScript thread'inin başka işler çalıştırabilmesi.
Ana event loop tamamlanana kadar diğer callback'lerin çalışmasını geciktiren işlem.
Süresinin büyük kısmı yoğun hesaplama ile geçen iş.
Süresinin büyük kısmı ağ, disk veya veritabanı yanıtı beklemekle geçen iş.
require ve module.exports kullanan Node.js modül sistemi.
import ve export kullanan standart JavaScript modül sistemi.
Proje adı, script'ler, bağımlılıklar ve paket ayarlarını tanımlayan dosya.
npm bağımlılıklarının kesin sürüm ve bütünlük bilgilerini kilitleyen dosya.
Uygulamanın production çalışması için gereken paket.
Yalnızca geliştirme, test veya build sırasında gereken paket.
Paketin tüketici projede bulunmasını beklediği uyumlu bağımlılık.
Kurulamazsa uygulamanın yine çalışabileceği isteğe bağlı paket.
- npmT
Node.js'in varsayılan paket registry ve komut satırı yöneticisi.
- npxT
Bir npm paketinin CLI aracını global kurmadan çalıştırır.
- pnpmO
Paketleri ortak depoda tutarak disk kullanımını azaltan paket yöneticisi.
- YarnO
Alternatif JavaScript paket yöneticisi.
package.json içinde development, test ve build komutlarını isimlendiren script.
Uygulamanın kullandığı Node.js ana ve alt sürümü.
- LTST
Uzun süre güvenlik ve bakım desteği alan Node.js sürüm hattı.
- nvmT
Aynı makinede birden fazla Node.js sürümünü kurup değiştiren araç.
fs, path, http ve crypto gibi Node.js ile gelen yerleşik modül.
Yerleşik Node.js modüllerini açıkça belirten import öneki.
- fsT
Dosya ve klasör işlemleri sunan Node.js modülü.
- pathT
Platformdan bağımsız dosya yolu oluşturma ve ayrıştırma modülü.
- httpO
Düşük seviyeli HTTP sunucusu ve istemcisi oluşturma modülü.
TLS destekli HTTP bağlantıları sağlayan modül.
Hash, HMAC, rastgele sayı ve şifreleme işlemleri sunan modül.
EventEmitter tabanlı olay yayınlama ve dinleme API'si.
İsimlendirilmiş olaylara listener eklemeyi ve olay yayınlamayı sağlayan sınıf.
İkili veriyi bellekte tutup işlemek için kullanılan Node.js veri tipi.
Büyük veriyi tamamını belleğe almadan parçalar hâlinde işleme arayüzü.
Dosya veya HTTP body gibi okunabilir veri akışı.
Dosya veya response gibi yazılabilir veri hedefi.
Aynı anda okunabilir ve yazılabilir veri akışı.
Gelen veri parçalarını dönüştürüp çıktı üreten duplex stream.
- PipeO
Bir readable stream'in çıktısını writable stream'e bağlama işlemi.
Üreten tarafın tüketenden hızlı olduğu durumda akış hızını dengeleme mekanizması.
Çalışan Node.js süreci, ortam değişkenleri ve sinyaller hakkında API sunar.
Süreç ortam değişkenlerine erişim nesnesi.
Komut satırından gelen argümanları taşıyan array.
SIGTERM veya SIGINT gibi süreç sonlandırma bildirimleri.
Yakalanmadan kalan Promise hatası.
try/catch veya hata mekanizmasıyla yakalanmayan senkron hata.
Node.js içinden başka işletim sistemi süreçleri çalıştırma API'si.
Komutu stream tabanlı ve asenkron biçimde başlatır.
- execO
Komut çıktısını buffer içinde toplayarak çalıştırır.
CPU yoğun JavaScript işlemlerini paralel thread'lerde çalıştırır.
Birden fazla Node.js sürecinin aynı sunucu portunu paylaşmasını sağlar.
- IPCİ
Ana süreç, child process veya worker'lar arasında mesajlaşma mekanizması.
Middleware ve routing temelli minimal Node.js web framework'ü.
Şema, performans ve plugin mimarisine odaklanan Node.js web framework'ü.
Module, controller, provider ve dependency injection yapısıyla kurumsal Node.js framework'ü.
Bir isteğin art arda birden fazla middleware fonksiyonundan geçmesi.
HTTP method, URL, header, parametre ve body bilgilerini taşıyan nesne.
Status, header ve body oluşturarak istemciye yanıt veren nesne.
/users/:id gibi URL yolundan alınan dinamik değer.
?page=2 gibi URL query string içinden alınan değer.
JSON veya form request body verisini JavaScript nesnesine dönüştüren middleware.
Sunucuda veriyle HTML şablonu oluşturan sistem.
- ORMO
Veritabanı tablolarını nesne ve metotlarla kullanmayı sağlayan katman.
Şema, migration ve type-safe sorgu client'ı sunan Node.js ORM araç seti.
SQL'e yakın ve TypeScript odaklı veritabanı araç seti.
Model tabanlı Node.js ORM kütüphanesi.
Tekrar kullanılmak üzere açık veritabanı bağlantıları tutan havuz.
Node.js uygulamasının Redis komutlarını kullanmasını sağlayan kütüphane.
BullMQ gibi Redis tabanlı background job yönetim paketi.
ws veya Socket.IO gibi gerçek zamanlı iletişim kütüphanesi.
WebSocket ve fallback taşıma yöntemleriyle oda ve event tabanlı iletişim sağlar.
- PM2O
Node.js süreçlerini daemon olarak çalıştıran, yeniden başlatan ve loglayan process manager.
PM2 uygulama, environment ve instance ayarlarını tanımlayan dosya.
Kaynak değiştiğinde uygulamayı otomatik yeniden başlatan geliştirme özelliği.
Kod değişikliğini mümkün olduğunca uygulama durumunu koruyarak yansıtan süreç.
TypeScript veya kaynak dosyalarını production çıktısına dönüştüren aşama.
JavaScript'e statik tür sistemi ve derleme zamanı kontrolleri ekleyen dil.
TypeScript compiler seçenekleri ve dosya kapsamını tanımlayan yapılandırma.
JavaScript API'lerinin TypeScript tür bilgisini tanımlayan deklarasyon.
JavaScript ve TypeScript kodunda hata ve stil kurallarını denetleyen araç.
Kodu ortak biçim kurallarına göre otomatik formatlayan araç.
Dosya değişikliklerinde Node.js sürecini yeniden başlatan geliştirme aracı.
Uygulama başlarken gerekli env değerlerinin varlık ve formatını kontrol etme.
SIGTERM alındığında HTTP server, queue ve DB bağlantılarını düzenli kapatma.
Artık kullanılmayan belleğin serbest bırakılmayıp süreç tüketiminin sürekli artması.
- HeapO
JavaScript nesnelerinin dinamik olarak tutulduğu bellek alanı.
Erişilemeyen nesnelerin belleğini otomatik geri kazanan mekanizma.
Belirli andaki nesne ve referansları göstererek bellek sızıntısını analiz eden görüntü.
CPU zamanı, bellek ve fonksiyon maliyetlerini ölçme işlemi.
| Kavram | Seviye | Kısa açıklama |
|---|---|---|
| Node.js | T | JavaScript'i tarayıcı dışında V8 üzerinde çalıştıran sunucu ve araç geliştirme ortamı. |
| V8 Engine | O | JavaScript kodunu derleyen ve optimize ederek çalıştıran motor. |
| libuv | İ | Node.js'in event loop, asenkron I/O, thread pool ve platform soyutlamasını sağlayan kütüphane. |
| Event-driven Architecture | O | Sistem davranışının olaylar ve bunlara bağlı dinleyicilerle ilerlemesi. |
| Single Main Thread | O | JavaScript callback'lerinin temel olarak tek ana thread üzerinde çalışması. |
| Event Loop | O | Asenkron I/O sonuçlarını ve callback kuyruklarını ana JavaScript akışına taşıyan mekanizma. |
| Thread Pool | İ | Dosya sistemi, DNS ve kriptografi gibi bazı işleri arka thread'lerde yürüten havuz. |
| Non-blocking I/O | O | Ağ veya disk beklerken ana JavaScript thread'inin başka işler çalıştırabilmesi. |
| Blocking Operation | O | Ana event loop tamamlanana kadar diğer callback'lerin çalışmasını geciktiren işlem. |
| CPU-bound Work | O | Süresinin büyük kısmı yoğun hesaplama ile geçen iş. |
| I/O-bound Work | O | Süresinin büyük kısmı ağ, disk veya veritabanı yanıtı beklemekle geçen iş. |
| CommonJS | T | require ve module.exports kullanan Node.js modül sistemi. |
| ES Modules | T | import ve export kullanan standart JavaScript modül sistemi. |
| package.json | T | Proje adı, script'ler, bağımlılıklar ve paket ayarlarını tanımlayan dosya. |
| package-lock.json | T | npm bağımlılıklarının kesin sürüm ve bütünlük bilgilerini kilitleyen dosya. |
| Dependency | T | Uygulamanın production çalışması için gereken paket. |
| Dev Dependency | T | Yalnızca geliştirme, test veya build sırasında gereken paket. |
| Peer Dependency | O | Paketin tüketici projede bulunmasını beklediği uyumlu bağımlılık. |
| Optional Dependency | O | Kurulamazsa uygulamanın yine çalışabileceği isteğe bağlı paket. |
| npm | T | Node.js'in varsayılan paket registry ve komut satırı yöneticisi. |
| npx | T | Bir npm paketinin CLI aracını global kurmadan çalıştırır. |
| pnpm | O | Paketleri ortak depoda tutarak disk kullanımını azaltan paket yöneticisi. |
| Yarn | O | Alternatif JavaScript paket yöneticisi. |
| npm Script | T | package.json içinde development, test ve build komutlarını isimlendiren script. |
| Node Version | T | Uygulamanın kullandığı Node.js ana ve alt sürümü. |
| LTS | T | Uzun süre güvenlik ve bakım desteği alan Node.js sürüm hattı. |
| nvm | T | Aynı makinede birden fazla Node.js sürümünü kurup değiştiren araç. |
| Core Module | T | fs, path, http ve crypto gibi Node.js ile gelen yerleşik modül. |
| node: Prefix | O | Yerleşik Node.js modüllerini açıkça belirten import öneki. |
| fs | T | Dosya ve klasör işlemleri sunan Node.js modülü. |
| path | T | Platformdan bağımsız dosya yolu oluşturma ve ayrıştırma modülü. |
| http | O | Düşük seviyeli HTTP sunucusu ve istemcisi oluşturma modülü. |
| https | O | TLS destekli HTTP bağlantıları sağlayan modül. |
| crypto | O | Hash, HMAC, rastgele sayı ve şifreleme işlemleri sunan modül. |
| events | O | EventEmitter tabanlı olay yayınlama ve dinleme API'si. |
| EventEmitter | O | İsimlendirilmiş olaylara listener eklemeyi ve olay yayınlamayı sağlayan sınıf. |
| Buffer | O | İkili veriyi bellekte tutup işlemek için kullanılan Node.js veri tipi. |
| Stream | O | Büyük veriyi tamamını belleğe almadan parçalar hâlinde işleme arayüzü. |
| Readable Stream | O | Dosya veya HTTP body gibi okunabilir veri akışı. |
| Writable Stream | O | Dosya veya response gibi yazılabilir veri hedefi. |
| Duplex Stream | İ | Aynı anda okunabilir ve yazılabilir veri akışı. |
| Transform Stream | İ | Gelen veri parçalarını dönüştürüp çıktı üreten duplex stream. |
| Pipe | O | Bir readable stream'in çıktısını writable stream'e bağlama işlemi. |
| Backpressure | İ | Üreten tarafın tüketenden hızlı olduğu durumda akış hızını dengeleme mekanizması. |
| process | T | Çalışan Node.js süreci, ortam değişkenleri ve sinyaller hakkında API sunar. |
| process.env | T | Süreç ortam değişkenlerine erişim nesnesi. |
| process.argv | T | Komut satırından gelen argümanları taşıyan array. |
| Exit Signal | O | SIGTERM veya SIGINT gibi süreç sonlandırma bildirimleri. |
| Unhandled Rejection | O | Yakalanmadan kalan Promise hatası. |
| Uncaught Exception | O | try/catch veya hata mekanizmasıyla yakalanmayan senkron hata. |
| Child Process | O | Node.js içinden başka işletim sistemi süreçleri çalıştırma API'si. |
| spawn | O | Komutu stream tabanlı ve asenkron biçimde başlatır. |
| exec | O | Komut çıktısını buffer içinde toplayarak çalıştırır. |
| Worker Threads | İ | CPU yoğun JavaScript işlemlerini paralel thread'lerde çalıştırır. |
| Cluster | İ | Birden fazla Node.js sürecinin aynı sunucu portunu paylaşmasını sağlar. |
| IPC | İ | Ana süreç, child process veya worker'lar arasında mesajlaşma mekanizması. |
| Express | T | Middleware ve routing temelli minimal Node.js web framework'ü. |
| Fastify | O | Şema, performans ve plugin mimarisine odaklanan Node.js web framework'ü. |
| NestJS | O | Module, controller, provider ve dependency injection yapısıyla kurumsal Node.js framework'ü. |
| Middleware Chain | T | Bir isteğin art arda birden fazla middleware fonksiyonundan geçmesi. |
| Request Object | T | HTTP method, URL, header, parametre ve body bilgilerini taşıyan nesne. |
| Response Object | T | Status, header ve body oluşturarak istemciye yanıt veren nesne. |
| Route Parameter | T | /users/:id gibi URL yolundan alınan dinamik değer. |
| Query Parameter | T | ?page=2 gibi URL query string içinden alınan değer. |
| Body Parser | T | JSON veya form request body verisini JavaScript nesnesine dönüştüren middleware. |
| Template Engine | T | Sunucuda veriyle HTML şablonu oluşturan sistem. |
| ORM | O | Veritabanı tablolarını nesne ve metotlarla kullanmayı sağlayan katman. |
| Prisma | O | Şema, migration ve type-safe sorgu client'ı sunan Node.js ORM araç seti. |
| Drizzle ORM | O | SQL'e yakın ve TypeScript odaklı veritabanı araç seti. |
| Sequelize | O | Model tabanlı Node.js ORM kütüphanesi. |
| Database Pool | O | Tekrar kullanılmak üzere açık veritabanı bağlantıları tutan havuz. |
| Redis Client | T | Node.js uygulamasının Redis komutlarını kullanmasını sağlayan kütüphane. |
| Queue Library | O | BullMQ gibi Redis tabanlı background job yönetim paketi. |
| WebSocket Library | O | ws veya Socket.IO gibi gerçek zamanlı iletişim kütüphanesi. |
| Socket.IO | O | WebSocket ve fallback taşıma yöntemleriyle oda ve event tabanlı iletişim sağlar. |
| PM2 | O | Node.js süreçlerini daemon olarak çalıştıran, yeniden başlatan ve loglayan process manager. |
| Ecosystem File | O | PM2 uygulama, environment ve instance ayarlarını tanımlayan dosya. |
| Watch Mode | T | Kaynak değiştiğinde uygulamayı otomatik yeniden başlatan geliştirme özelliği. |
| Hot Reload | T | Kod değişikliğini mümkün olduğunca uygulama durumunu koruyarak yansıtan süreç. |
| Build Step | T | TypeScript veya kaynak dosyalarını production çıktısına dönüştüren aşama. |
| TypeScript | O | JavaScript'e statik tür sistemi ve derleme zamanı kontrolleri ekleyen dil. |
| tsconfig.json | O | TypeScript compiler seçenekleri ve dosya kapsamını tanımlayan yapılandırma. |
| Type Definition | O | JavaScript API'lerinin TypeScript tür bilgisini tanımlayan deklarasyon. |
| ESLint | T | JavaScript ve TypeScript kodunda hata ve stil kurallarını denetleyen araç. |
| Prettier | T | Kodu ortak biçim kurallarına göre otomatik formatlayan araç. |
| Nodemon | T | Dosya değişikliklerinde Node.js sürecini yeniden başlatan geliştirme aracı. |
| Environment Validation | O | Uygulama başlarken gerekli env değerlerinin varlık ve formatını kontrol etme. |
| Graceful Shutdown | O | SIGTERM alındığında HTTP server, queue ve DB bağlantılarını düzenli kapatma. |
| Memory Leak | İ | Artık kullanılmayan belleğin serbest bırakılmayıp süreç tüketiminin sürekli artması. |
| Heap | O | JavaScript nesnelerinin dinamik olarak tutulduğu bellek alanı. |
| Garbage Collection | O | Erişilemeyen nesnelerin belleğini otomatik geri kazanan mekanizma. |
| Heap Snapshot | İ | Belirli andaki nesne ve referansları göstererek bellek sızıntısını analiz eden görüntü. |
| Profiling | İ | CPU zamanı, bellek ve fonksiyon maliyetlerini ölçme işlemi. |
Bölüm uygulamaları
Bu bölümü bitirmeden önce şunları deneyin veya açıklayın.
- Express veya Fastify ile health, ürün listeleme ve ürün oluşturma endpoint'leri hazırlayın.
- Bir büyük dosyayı tamamen belleğe almadan stream ile kopyalayın.
- SIGTERM geldiğinde HTTP server ve veritabanı bağlantısını graceful shutdown ile kapatan örnek yazın.