Node.js'in ne olduğunu, JavaScript'i sunucuda nasıl çalıştırdığını, event loop'un neden önemli olduğunu ve hangi durumlarda Node.js'in uygun olduğunu öğrenin.

Node.js, JavaScript'i yalnızca bir web tarayıcısında değil, bilgisayarınızda (veya bir sunucuda) çalıştırmanıza olanak tanıyan bir programdır.
Terimler kolayca karışır, bu yüzden net bir versiyon:
Node.js'i, Chrome, Firefox, Safari gibi tarayıcıların dışında JavaScript kodunu çalıştırabilen bir “motor odası” olarak düşünün.
Normalde JavaScript bir web sayfasında gördüğünüz ve tıkladığınız şeyleri çalıştırır: menüler, formlar, etkileşimli arayüzler. Tarayıcı sayfaya, düğmelere, pencerelere erişim sağlar.
Node.js farklı bir ortam sağlar. JavaScript sayfa ile değil, bilgisayarınız ve ağ ile çalışabilir: dosya okuma, veritabanlarıyla konuşma, web isteklerini işleme ve zamanlanmış görevler çalıştırma.
JavaScript tarayıcı dışında çalışabildiğinde şu pratik sonuçlar ortaya çıkar:
Birisi “backend'imiz Node.js” dediğinde genelde şunu kastediyordur: “Sunucu tarafı kodumuz JavaScript ile yazıldı ve Node.js üzerinde çalışıyor.”
Node.js, erken dönem web sunucularının çok yaygın bir işi verimli şekilde yapamadığını fark eden bir çözüm olarak ortaya çıktı: aynı anda çok sayıda küçük isteği işlemek—özellikle veritabanı, dosya sistemi veya dış API'lar gibi yavaş kaynaklara beklemeyi içeren istekler.
Eskiden birçok sunucu bağlantuyu “her istek için bir thread/process” şeklinde ele alıyordu. Bu yaklaşım çalışsa da binlerce kullanıcı bağlıyken maliyetli ve verimsizleşebilir.
Klasik örnek bir sohbet uygulaması veya canlı gösterge panelidir: sunucu ağ cevapları, disk okuma veya veritabanı sorguları için büyük oranda bekler. Her kullanıcı beklerken ağır bir iş parçacığını “işgal ederse”, bellek ve CPU boşa harcanır.
Node.js 2009'da Ryan Dahl tarafından yaratıldı. Fikir basitti:
Bu tasarım Node.js'i, eşzamanlılık altında tepki vermesi gereken ağ uygulamaları için özellikle uygun kıldı.
Node.js hızla büyüdü çünkü web geliştiricilerin hâlihazırda düşündüğü şeyi destekliyordu: her yerde JavaScript. Kısa süre sonra npm (Node paket yöneticisi) kod paylaşmayı ve yeniden kullanmayı kolaylaştırdı. Bu ikili—tanıdık dil + geniş kütüphane ekosistemi—Node'u deney olmaktan üretim aracı haline getirdi.
Günümüzde Node.js genellikle şunları güçlendirir:
Bir web veya mobil uygulamanın arkasında durabilir, “backend for frontend” olarak görev yapabilir veya sunucu tarafı render gerektiren framework'ler için çalışabilir.
Node.js genellikle “JavaScript runtime” olarak tanımlanır. Runtime, JavaScript kodunu yürütebilen ve düz JavaScript'in kendisiyle sunmadığı ek yetenekleri (dosya okuma, ağ bağlantıları, diğer programları başlatma gibi) sağlayan bir ortamdır.
Node.js'in çekirdeğinde V8 bulunur; bu motor Google Chrome tarafından da kullanılır. V8, JavaScript'inizi alır ve makinenizde verimli çalıştırmak için düşük seviyeli talimatlara derler.
Önemli ayrım: V8 Node.js değildir. V8 yalnızca JavaScript dilini çalıştırmaya odaklanır. Node.js, V8 ile işletim sistemi arasındaki “yapıştırıcıyı” içeren daha geniş pakettir.
Node.js'i sunucu tarafı aracı yapan, işletim sistemi seviyesindeki özellikleri JavaScript dostu şekilde dışa açan yerleşik modülleridir. Örneğin:
fs.readFile(...) gibi bir çağrı yaptığınızda veya bir HTTP sunucusu başlattığınızda, Node bu işi altta yatan sisteme yönlendirir ve sonuç JavaScript'inize geri döner.
JavaScript dilin kendisidir: sözdizimi, değişkenler, fonksiyonlar vb.
Node.js, bu dili çalıştırabileceğiniz bir yertir—özellikle komut satırı araçları ve backend servisleri oluşturmak için tasarlanmış, çalıştığı makineye erişim sağlayan bir yer. Tarayıcıda JavaScript size DOM ve window gibi API'ler sunar. Node'da ise dosya sistemi, ağ ve süreç API'leri vardır.
İnsanlar Node.js için “asenkron” derken çoğunlukla zaman kaybetmeden bekleyebilme yeteneğini kastederler.
Yemek yaptığınızı ve suyu kaynatmak için ocağa koyduğunuzu hayal edin. Kaynamasını beklerken durup ona bakmazsınız—sebzeleri doğrar, masayı kurar, sosu kontrol edersiniz. Su hazır olduğunda tepki verirsiniz.
Çok sunucu işi böyledir: program zamana ihtiyaç veren bir şey ister (dosya okuma, veritabanı sorgusu, API çağrısı) ve sonra sonucu bekler. Birçok sistemde beklemek tüm programı “bloklayabilir”. Node.js bunu yapmamaya çalışır.
Event loop görevler için bir trafik kontrolörü gibidir. İstekler ve callback'ler sıraya girer; event loop sıradaki hangi kodun çalışacağını belirler. Başlanıp sonra beklenebilecek bir görev varsa (ör. I/O), Node bunu sisteme devreder, diğer işleri yapmaya devam eder ve sonuç hazır olduğunda bilgilendirilir.
Bu yüzden bir Node.js sunucusu çok sayıda bağlantıyı verimli yönetebilir: her yavaş disk okuması veya ağ yanıtı için bir iş parçacığını sabit tutmaz.
“Bloklamayan G/Ç”, yavaş işlemi başlat, sonra o bitene kadar başka şeyler yapmaya devam et demektir. İş bittiğinde Node verdiğiniz sonraki kodu çalıştırır (genellikle bir callback, promise çözümü veya async/await devamı).
Bu yöntem I/O-ağırlıklı işlerde mükemmeldir, ancak her şey için sihir değildir. Ana iş parçacığında CPU ağırlıklı bir hesaplama (görüntü işleme, büyük şifreleme işleri veya geniş veri işlemleri) çalıştırırsanız, event loop o işi “atlayamaz”—çünkü görev aktif olarak CPU kullanmaktadır ve bu diğer her şeyi yavaşlatır.
Node.js en sık JavaScript ile sunucu tarafı yazılımlar oluşturmak için kullanılır: web veya mobil uygulamaların konuştuğu API'ler, arka plan işlerini işleyen servisler ve sayfalar ile veri sunan web sunucuları.
Node.js, çok sayıda isteği beklemeden ele alma konusunda iyiyse popüler bir tercih olur; yani uygulamanız çoğunlukla veritabanı okuma, başka servislere çağrı yapma, mesaj gönderme gibi küçük I/O işleri yapıyorsa.
Node.js'in sık görüldüğü yerlerden bazıları:
Node.js şu durumlar için iyi bir eşleşmedir:
Node.js ayrıca geliştirici araçları için yaygın olarak kullanılır; build script'leri, task runner'lar ve CLI araçları buna örnektir. Modern ön uç iş akışlarının birçoğu, son uygulama tarayıcıda çalışsa bile Node tabanlı araçlara dayanır.
Node.js genelde uzun süreli, CPU-ağır hesaplamalar için en iyi tercih değildir (ör. karmaşık video renderlama veya büyük bilimsel hesaplamalar). Bu işlerde genelde işleri ayrı servislere, arka plan işlerine veya başka dillere devretmek daha uygundur.
JavaScript dilidir. Node.js ve tarayıcı iki farklı çalışma ortamıdır.
JavaScript’in temellerini biliyorsanız—değişkenler, fonksiyonlar, nesneler, async/await, promise'lar—bunlar doğrudan taşınır. Değişen şey neye erişebileceğinizdir.
Tarayıcı JavaScript'i kullanıcı arayüzleri oluşturmak için tasarlanmıştır. DOM (sayfa), tıklama ve yazma olayları, localStorage, çerezler ve izin tabanlı Web API'leri gibi şeylere erişim sağlar.
Ayrıca güvenlik açısından sıkı bir şekilde sandbox'lanmıştır: web sayfaları rastgele bilgisayar dosyalarını okuyamaz veya her türlü ağ bağlantısı açamaz. Tarayıcılar kullanıcıları korumak için sınırlar koyar.
Node.js genelde sunucularda JavaScript çalıştırmak için kullanılır ve şu sistem seviyesinde yetenekleri verir:
process.env aracılığıyla ortam değişkenleri (gizli anahtarlar ve konfigürasyon)Bu ekstra güç farklı güvenlik beklentileri getirir. Node uygulamaları tarayıcılar gibi otomatik sandbox'lanmaz: Node sürecinin bir dosyayı okuma veya ağa bağlanma izni varsa, genelde bunu yapabilir—bu yüzden sunucu güvenliği uygulamaları (erişim kontrolü, gizli yönetimi, bağımlılık hijyeni) önemlidir.
Tarayıcı JS ön ucu (kullanıcıların gördüğü kısmı) oluşturur. Node.js arka ucu (arka planda çalışan şeyleri) oluşturur. Aynı dil—farklı araçlar ve sorumluluklar.
Node.js'in hızla kabul görmesinin bir nedeni npmdir; Node ile gelen paket yöneticisidir. npm'i, uygulamanız için hazır yapı taşlarını indirmek, güncellemek ve paylaşmak için kullanabilirsiniz.
Node.js'te bir paket (modül) belirli bir problemi çözen yeniden kullanılabilir koddur—tarihleri ayrıştırmaktan bir web sunucusu kurmaya kadar her şey olabilir.
Her şeyi baştan yazmak yerine bir paketi kurup hemen kullanabilirsiniz. Bu geliştirmeyi hızlandırır ve birçok kişi tarafından gerçek projelerde test edilmiş koda dayanmanıza izin verir.
Çoğu Node projesinin kökünde bir package.json dosyası vardır. Projenin “alışveriş listesi” ve meta verisidir.
Genelde şunları içerir:
npm run start veya npm test gibi yararlı script'lernpm install çalıştırdığınızda npm, package.json’u okur, uygun sürümleri indirir ve node_modules klasörüne yerleştirir.
npm kayıtları çok büyük, bu iyi ama seçici olmanız gerektiği anlamına gelir.
Aktif bakım yapılan paketleri tercih edin (son güncellemeler, açık dökümantasyon, sağlıklı issue takipçisi). Rastgele bir snippet'in önerdiği kurulum komutlarını körü körüne kullanmayın. Bir paket küçük bir iş için aşırı geliyorsa, daha küçük veya yerleşik bir seçenek daha güvenli olabilir.
Node.js size bir sunucu oluşturmak için temel yapı taşlarını verir: istekleri işleme, cevap gönderme, dosya okuma, veritabanı ile konuşma vb. Bir framework, bu yapı taşlarını daha net bir yapıya koyan önceden hazırlanmış kalıplar ve yardımcılar setidir—her proje için aynı ayarı tekrar kurmak zorunda kalmayasınız.
Express genellikle öğrenilen ilk Node.js framework'üdür çünkü küçük, esnek ve yaygın olarak kullanılır.
Express ile şunları yapabilirsiniz:
/products gibi rotalar tanımlamak: birisi bu URL'yi ziyaret ettiğinde çalışacak kodu belirleyinKüçük uygulamalar ve öğrenme için yapılandırma zorlamaz, bu da onu cazip kılar.
Express'in sadeliğini seviyorsanız ama daha modern varsayılanlar veya hız istiyorsanız, Fastify popüler bir alternatif.
Daha yapısal, “her şey dahil” bir yaklaşımı tercih ediyorsanız—özellikle büyük ekipler için—NestJS sık kullanılır. Kontrolörler, servisler ve modüller gibi yapılar önererek büyük kod tabanlarını daha yönetilebilir kılar.
Çok küçük bir şey (hızlı bir webhook, iç kullanım için ufak bir araç) veya maksimum kontrol ve minimum bağımlılık istiyorsanız sadece Node.js kullanın.
Birden çok rota, tekrarlayan istek işleme mantığı veya büyüyecek bir proje bekliyorsanız bir framework seçin. Framework'ün yapısı size zaman kazandırır ve karmaşıklığın birikmesini engellemeye yardımcı olur.
Node.js popülerdir çünkü JavaScript'i sunucu tarafında pratik bir seçenek haline getirir—özellikle uygulamanız çoğunlukla ağ veya veritabanı gibi bekleme içeren işler yapıyorsa.
Tek bir dilin ön uç ve arka uçta kullanılabilmesi büyük bir avantajdır. Ekipler bilgi paylaşabilir, doğrulama mantığını yeniden kullanabilir ve tutarlı bir araç zinciri sağlamayı kolaylaştırır.
Node.js ayrıca hızlı I/O konusunda güçlüdür. Uygulamanız çok sayıda eşzamanlı istek işliyorsa—API'ler, gerçek zamanlı güncellemeler, sohbet, panolar, veri akışı—Node'un bloklamayan yaklaşımı verimli ve maliyet dostu olabilir.
Son olarak, ekosistem çok geniştir. Neredeyse her şey için npm paketleri vardır: web sunucuları, kimlik doğrulama, dosya yüklemeleri, ödemeler, testler vb. Doğru seçilirse bu teslimatı hızlandırır.
Bağımlılıklar karmaşık hale gelebilir. Modern Node projeleri yüzlerce (veya binlerce) transitif paket çekebilir. Bu güncelleme işini, güvenlik incelemelerini ve çakışma riskini artırır.
Asenkron akış öğrenme eğrisi de vardır. JavaScript'in asenkron stili (Promise'lar, async/await, eski kodlarda callback'ler) güçlüdür ama kod tabanı iyi yapılandırılmamışsa izlenmesi zor akışlara yol açabilir.
Node.js CPU-ağır işler için en iyi seçim değildir; bu işleri yapabilir ama genelde uygulamayı duyarlı tutmak için worker'lar, kuyruklar veya başka dillerde servisler gerekir.
Birçok ekip Node projelerini daha sürdürülebilir yapmak için TypeScript kullanır. Tipler hataları daha erken yakalar, otomatik tamamlama iyileşir ve yeniden düzenlemeler daha güvenli olur—bu, kod tabanı ve ekip büyüdükçe çok faydalıdır.
Özet: Node.js'in artıları ve eksileri proje iş yükünüze, ekip deneyimine ve bağımlılıklar ile mimariye ne kadar disiplinli yaklaştığınıza bağlıdır.
Node.js ile başlamanın çoğu, bilgisayarınıza Node runtime'ı yükleyerek JavaScript'i tarayıcı dışında çalıştırabilme yeteneği kazanmaktır.
Node.js'i yüklediğinizde şunları yüklersiniz:
Sunucuda mantık aynı: bir JavaScript uygulamasını uzun süreli bir süreç olarak çalıştırmak için Node kurulu olur.
Node sürümleri iki yaygın hattı takip eder:
Kararsızsanız LTS seçin.
hello.js adında bir dosya oluşturun:
console.log("Hello from Node!");
Çalıştırın:
node hello.js
import http from "node:http";
http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("It works!\n");
}).listen(3000);
console.log("Server running on http://localhost:3000");
Bir proje başlatın ve paket yükleyin:
npm init -y
npm install express
Node.js kavramlarını öğrenirken yine de hızlıca bir şeyler üretmek istiyorsanız, sohbet tabanlı bir platform olan Koder.ai kurulum sürtünmesini azaltan pratik bir kısayol olabilir: uygulamayı sohbetle tarif edersiniz (rotalar, veri modeli, auth, UI), Planlama Modu ile yineleyip kodu dışa aktarabilirsiniz. Node.js'i anlamanın yerini tutmaz ama API'lerin ve asenkron akışların nasıl çalıştığını öğrenirken ayar işlerini hızlandırır.
Dağıtmadan önce şunları düşünün:
console.log değil).Node.js birçok güçlü görüş çeker—çoğu zaman yarım gerçeklere dayanan. İşte bazı yaygın yanlış inanışlar, düz açıklamalarla.
İlişkili ama aynı değiller. Node.js JavaScript'i bilgisayar/sunucu üzerinde çalıştıran programdır (bir runtime). npm ise üçüncü taraf kütüphaneleri indirip yönetmenizi sağlayan paket yöneticisidir (sıklıkla “npm paketleri” olarak adlandırılır).
Node hem küçük ekipler hem de büyük şirketler tarafından kullanılır. API'ler, gerçek zamanlı özellikler, geliştirici araçları ve JavaScript'in sunucuda kullanılmasının pratik olduğu pek çok backend senaryosu için uygundur.
Node'un ana JavaScript yürütmesi tek bir iş parçacığında çalışır, ama bu onun kötü performanslı olduğu anlamına gelmez. Ana fikir bloklamayan G/Çdir: Node ağ veya disk işleri için beklerken diğer istekleri işlemeye devam eder.
CPU-ağır işler yine de tek JS iş parçacığını yavaşlatabilir—ancak pek çok web iş yükü için Node hızlı ve verimlidir.
Node yaygın, kanıtlanmış yollarla ölçeklenir: birden fazla süreç/örnek çalıştırır ve trafiği bunlar arasında dağıtırsınız (örneğin bir yük dengeleyici arkasında). Birçok üretim Node sistemi bu şekilde yüksek trafiği yönetir.
Hiçbir araç evrensel değildir. Node, uçtan uca JavaScript, geniş ekosistem ve I/O-ağırlıklı işler için iyi performans sunduğunda güçlüdür. Projeniz büyük oranda CPU-bound ise veya katı çalışma zamanı gereksinimleri varsa başka bir yığın daha iyi olabilir.
Node.js, sunucuda JavaScript çalıştırmanın bir yoludur; bu sayede backend, araçlar ve servisleri ekiplerin ön uçta zaten kullandığı dil ile inşa edebilirsiniz. Genelde uygulamanız ağ istekleri, dosya yüklemeleri, veritabanı çağrıları veya üçüncü taraf API'larla yoğun bir şekilde koordinasyon yapıyorsa Node.js başarılı olur.
Node.js'i şunları inşa ederken seçin:
Pratik kural: Projeniz çoğunlukla “çok sayıda isteği ele almak ve I/O'ları koordine etmek” ise Node.js genellikle güçlü bir seçimdir.
Dikkatli olun veya alternatifleri değerlendirin eğer:
Node.js bu durumların çoğunu yine de yönetebilir, ama genelde worker thread'ler, dış servisler veya başka bir runtime kullanmak gerekir.
İyi bir ilk proje: not ekleme ve listeleme yapan küçük bir API.
POST /notes ve GET /notesHızlandırmak isterseniz aynı fikri Koder.ai içinde sohbetle tasarlayıp davranış istediğiniz gibi olana kadar yineleyebilirsiniz.
Node.js ile ilerlemek isterseniz bu konular doğal olarak eşlik eder:
Node.js, JavaScript'i tarayıcı dışında (bilgisayarınızda veya bir sunucuda) çalıştırmanızı sağlayan bir runtime'tır.
Genelde API'ler, web sunucuları, betikler ve geliştirici araçları oluşturmak için kullanılır.
Hayır. Dil JavaScript'tir.
Node.js, JavaScript'i çalıştıran ve sunucu/işletim sistemi odaklı API'ler (dosyalar, ağ, süreçler) sağlayan bir ortamdır.
Hayır. Node.js temeldir.
Express, Fastify veya NestJS gibi framework'ler, sunucuları ve rotaları daha kolay yapılandırmak için Node.js'in üzerine kuruludur.
Tarayıcıda JavaScript ağırlıklı olarak sayfa ile (DOM, tıklamalar, kullanıcı arayüzü) ilgilenir.
Node.js'te JavaScript şu tür sunucu ve sistem görevlerini yapabilir:
Event loop, Node'un uygulamayı tepki verir tutma biçimidir.
Node, yavaş işlemleri (ör. ağ veya disk I/O) başlatır, sonra diğer işleri yapmaya devam eder. Sonuç hazır olduğunda verdiğiniz sonraki kod parçasını (callback, promise çözümü veya async/await devamı) çalıştırır.
Yeniyseniz veya üretime dağıtıyorsanız LTS (Long-Term Support) sürümünü seçin.
LTS daha kararlı olup güvenlik ve hata düzeltmeleri için daha uzun süre destek alır. Yeni özelliklere hızlı erişim gerekiyorsa “Current” kullanılabilir, ama sık güncelleme gerektirir.
Bir hello.js dosyası oluşturun:
console.log("Hello from Node!");
Sonra çalıştırın:
node hello.js
Node.js genelde I/O ağırlıklı işler için iyidir; ana iş parçacığını bloke edecek ağır CPU işleri (ör. video kodlama, büyük veri hesaplamaları) kötü bir eşleşme olabilir.
Bu durumlarda şunları düşünebilirsiniz:
Node tek bir JavaScript yürütme iş parçacığı üzerinde çalışır, ancak bu yavaş olduğu anlamına gelmez.
Ölçeklendirme genellikle birden fazla örnek çalıştırıp trafiği bunlar arasında dağıtarak yapılır (ör. bir load balancer arkasında). Bir süreç tüm işi tek başına ele almak zorunda değildir.
npm'i projede güvenli kullanmak için:
package.json hangi paketlere bağlı olduğunuzu kaydeder, npm install bunları node_modules içine indirir.