Yükleniyor...

Birazdan kaldığınız yerden devam edeceksiniz.

Node.js nedir? Node.js nasıl çalışır? Node.js’in kullanım alanları nelerdir?

YayınlandıGüncellendi

Merhabalar, bugün size Node.js ‘in tam olarak ne olduğunu, nasıl çalıştığını, hangi amaçlarla kullanıldığını ve kimler tarafından geliştirildiğini anlatmaya çalışacağım.

Node.js nedir? Node.js nasıl çalışır? Node.js’in kullanım alanları nelerdir?

NodeJs ağ bağlantılı JavaScript uygulamaları sunucu tarafında geliştirmek ve çalıştırmak için oluşturulmuştur. Google ‘ın tarayıcılar için geliştirmiş olduğu v8 JavaScript motorunun tarayıcı dışında çalışmasını sağlayan bir çalışma ortamıdır. NodeJs’in kafalarda yaratmış olduğu imaj onun sadece JavaScript çalıştıran backend uygulamaları için tasarlanmış olduğudur. Node.js ‘in üstlenmek istediği misyon ise bütün yazılım geliştirme aşamalarında kullanılabilecek yapıları hem geliştiricilere hem de ölçeklenmeyi hedefleyen şirketlere sunmak ve modülleşmeyi sağlamaktır.

Node.js ‘i kurmak ve çalıştırmak için https://www.nodejs.org ‘u ziyaret edebilirsiniz.

Node.js Nasıl Çalışır?

Düşük yük baz alındığında NodeJs’in çalışma performansının yüksek olduğunu rahatlıkla görmekteyiz. Ölçeklenebilir bir backend sistemi yazmak istediğinizde sisteminizi düşük yükte tutmak çok önemlidir. Özellikle yatay ölçeklenmiş nispeten düşük kapasiteli makinelere dağılmış sistemleri her zaman düşük yükte çalıştırmak CPU kullanımı açısından çok gereklidir. NodeJs bu tarz düşük yüklerde çok performanslı çalışmaktadır. Bunun yanında NodeJs gelen istekleri işlemek için single thread kullanmaktadır. Bu sayede her gelen istek için yeni thread açılmayacaktır. Bu sayede çok fazla http isteği kısa sürede makineye ulaştığında her istek için bir thread açılmayacağı için NodeJs içerisinde çok büyük bir CPU aşımı gerçekleşmeyecek ve makine cevap veremez duruma kolay kolay gelmeyecektir. Makinamızın ve NodeJs’in işleyemeyeceği kadar istek geldiği durumda her türlü CPU aşımı gerçekleşecektir. Buradaki ani artış kısmının mantıksal ölçeklerde olacağını varsayıyoruz. Buna ek olarak JavaScript ‘in özelliği olarak asenkron çalışabilecek kodlar yazarak uzun sürecek işlemlerin başka thread ’lerden gerçekleştirilmesi sağlanabiliriz. NodeJs’in çalışma mantığında bulunan engellenemez input output döngüsü http mekanizmalarımızın daha hızlı çalışmasını sağlarken diğer isteklerden gelen hantallığı yok etmek için event döngüsünü ve JavaScriptin asenkron çalışma mantığını kullanır. Bu sayede sistemimizdeki bir isteğin işlenip bitmesi diğer isteğin işlenip bitmesini etkilemeyecektir.

Tüm sistemi görmek istediğimiz zamanda da aşağıdaki şekilde bir harita karşımıza çıkmaktadır. Burada iç taraftaki C++ thread pool kendi kendine devreye girmektedir. Node.js ‘in asıl performansının ve gücünün dayandığı nokta buradaki C++ mekanizmalarıdır. Gelen istekleri event loop üzerinden işleyip sonuçlarını callback’lerle birlikte cevap olarak dönmektedirler. Aşağıdaki çalışma mekanizması şu anda bir çok Node.js gibi çalışma ortamının içerisine dahil edilmiştir.

Node.js & Backend

NodeJs’in backend’de performanslı çalışabilmesi için bir çok araç, hazır paket ve çatı bulunmaktadır. Zaten NodeJs’in ana geliştirilme amacı backend olduğu için bu alanda çok fazla araca sahip olmamız çok doğaldır. Özellikle dns, security, authorization, cache, veritabanı, cdn, optimizasyon ve diğer ara katmanlarda bir çok araç ve mekanizma bulunuyor.

  • ExpressJs — NodeJs HTTP Çatısı
  • Socket.io — Gerçek zamanlı websocket (wss) protokolü çatısı
  • PM2 — İşlem Yöneticisi
  • Forever — İşlem Yöneticisi
  • mongoose — NodeJs için mongodb yönetim aracı
  • passport — Authorization kütüphanesi
  • aws-amplify — AWS Bulut araçları
  • dnscache — DNS katmanında cache oluşturmak için kullanılan araçlardan birisi
  • Helmet — Basic Express sunucusu güvenlik ara katman yazılımı
  • Synck — Güvenlik açıkları veritabanından uygulamayla ilgili açıkları raporlayan terminal aracı

Bunlar dışında ihtiyaç durumunda sunucu tarafına eklenebilecek bir çok ara katman yazılımı (middleware) bulunmaktadır

Node.js ‘in diğer kullanım alanları

NodeJs bilgisayar terminalinde çalışabildiği için Node.js’in çok çeşitli kullanım alanları mevcuttur. Image ve Video processing gibi zaman alan ve işlemci üzerine yüksek yük bindiren uygulamaların JavaScript ve NodeJs ile geliştirilmesi önerilmese de bu gibi işlemleri de gerçekleştirmek için NodeJs içerisinde paketler bulunuyor. Ek arak native addon ‘lar kullanılarak C ve C++ kodlarını NodeJs üzerinden calıştırabiliyoruz.

NodeJs’in farklı bazı kullanımlarını şekillerini burada görebilirsiniz

  • IoT
  • Robotik
  • Hesaplamalar ve Analiz
  • Terminal Araçları
  • Mobil ve Masaüstü geliştirme
  • Her türlü ön ve arka yüz testleri

Npm — Node paket yöneticisi

Npm dünyanın herhangi bir yerinden NodeJs için yazılmış ve açık kaynaklı olarak paylaşılmış binlerce proje ve modüle rahatça ulaşabilmenizi sağlayan bir terminal aracıdır. NPM içerisinde anlık olarak 1.8 milyon açık kaynak kodlu paket bulunmaktadır. Yine anlık olarak bu 1.8 milyon paket haftalık 35 milyar kere NPM üzerinden herhangi bir local veya sunucu bilgisayarına indirilmiştir. Bu devasa boyutta bir kullanımdır ve şu anda dünyada en çok kullanılan araçlardan birisidir. NodeJs’i yüklerken npm default olarak bilgisayarınıza yüklenecektir.

Npm 2020 yılı içerisinde GitHub tarafından satın alınmıştır. GitHub’ın arkasında da Microsoft bulunmaktadır. Bu sayede böylesine geniş bir paket dağıtım aracı, dünyanın en büyük açık kaynak şirketine ve bu sayede dünyanın en büyük teknoloji şirketlerinden birine katılmış oldu. Microsoft’un Node.js tarafında gerçekleştirdiği bu yatırımın ve geliştirme aşamalarında planladığı değişikliklerin ilerleyen zamanlarda Node.js ‘in büyümesine ve gelişmesine nasıl katkı sağlayacağını hep birlikte göreceğiz.

Microsoft özellikle backend çalışma ortamı açısından bir yandan .NET ve .NET Core’u geliştirmeye devam etmektedir. İlerleyen zamanlarda Microsoft ürünlerine Node.js’in daha çok dahil olacağını tahmin etmek zor olmasa gerek.

Node.js ‘in geliştirici araçlarını kullanmak

NodeJs özellikle JavaScript çalıştırması açısından frontend, backend, mobil uygulama ve masaüstü uygulama geliştiricilerinin popüler çalışma ortamı olmuştur. Direkt Node.js üzerinden sadece backend kodları çalışsa da diğer geliştiriciler buraya geliştirecekleri uygulamaların standard bir yapıda olmasını sağlayabiliyorlar. Geliştirdikleri uygulamalara development, debug, build, staging ve deployment aşamaları kurmak için Node.js’in yapısından ve Node.js paketlerinden faydalanabiliyorlar. Bu araçlar ve paketler Node.js üzerinde hem terminal aracı (CLI) olarak kullanılabiliyor hem de devDependency olarak projelere eklenebiliyor.

Bu tür bazı araçlar ve mekanizmalar

Node.js ‘in Kurucusu ve şu anda Node.js ‘i kim geliştiriyor

NodeJs’in ilk sürümü Ryan Dahl tarafından 2009 yılında yayınlanmıştır. İlk sürüm sadece Linux ve MacOs tarafında çalışmaktaydı. NodeJs’in özellikle o zamanlarda çokca kullanılan backend ve SSR yapısı olan ASP.NET’e alternatif olarak çıktığını düşünmek yanlış olmayacaktır. Bunun yanında Ryan Dahl’ın Apachee HTTP Sunucu mekanizmasını çokça eleştirdiğini bilmekteyiz.

NodeJs 2019'dan önce NodeJs Foundation tarafından yönetilip geliştirilmekteydi. 2019 itibariyle JavaScript’i geliştiren JavaScript Foundation ve NodeJs Foundation birleşerek OpenJS Foundation’ı oluşturup güçlerini birleştirmişlerdir.