Node.js ile Uygulama Geliştirme – 1 :Node.js nedir?, Giriş ve Genel Yapı.

Mimari açıdan detaylı bir yazı yerine, pratikte daha kolay anlaşılır bir yazı olması için, detaylar yerine, Node. js in kullanım örnekleri ve hangi ihtiyaçlara binaen popülerleştiğine bakarak daha hızlı bir giriş yapma imkânımız olacağını düşünüyorum. Daha detaylı bir yazı (Mimari acıdan Node.js )  için bu linke göz atabilirsiniz. 

Tarayıcıların dışına çıkan Javascript

Yanlış hatırlamıyorsam 2009 ya da 2010 da,  Ryan Dahl isimli bir vatandaş tarafından, Joyent firmasında bir proje olarak  geliştirilir Node.js. İlk olarak Event-Loop mimarisini ve Javascript i kullanarak Ölçeklenebilirlik adına başlayan bu proje sonrasında, bu zamana kadar  “Browser / Tarayıcı”  odaklı olan javascript i, Node.js ile tarayıcıların dışına çıkarmaya başlar ve artık sunucu tarafında (ya da daha doğru bir değişle, tarayıcıların dünyasının dışında) kullanabileceğimiz çok güçlü bir platform haline gelir.

Javascript i tarayıcılar dışına çıkarma gayret i node.js den önce başlamış olsa da, node.js e kadar başarılı bir örnek olmadı diyebiliriz. Javascript i tarayıcıların dışına taşıyıp daha geniş bir kullanım alanına sahip bir yazılım dili haline dönüştürme isteğini anlamak aslında zor değil; Aşağıdaki bir kaç maddeye bakarak devam edelim;

  1. Javascript, resmi olmasa da, yazılım dünyasının en çok kullanılan / bilinen dili.
    1. Böylece, hali hazırda javascript bilen, fakat şimdiye kadar sadece front-end odaklı geliştirme yapabilen yazılımcılar, node.js ile Back-end geliştirme sürecine de katılabilme imkânı bulmuş oldular.
    2. Şimdiye dek, sunucu tarafında, C#, Java, PHP vs. gibi farklı dilleride kullansa, az çok her geliştirici bir noktada Javascript le haşır neşir olmuştur. Sunucu tarafında Javscript yazma durumuna alışmak zor olmayacaktır.
  2. Isomorphic Javascript/ Tek dil
    1. Hem istemci tarafında, hem sunucu tarafında aynı programlama dilini kullanabilme imkânı.
    2. Böylece, örneğin, back-end de C# ya da Ruby vs. front-end de mecburi olarak Javascript kullanırken, Node.js sayesinde, tek bir dil tek bir uzmanlık, hem istemci hem sunucu da kullanabilme imkânı
  3. Javascript, yine resmi olarak olmasa da, yazılım dünyasında bilenen en iyi runtime enginelere sahip script dilidir.
    1. (Chorme:V8, Firefox:SpiderMonkey , Edge: Chakra vb.), Node, google chrome V8 i kullanarak, hali hazırda ki ciddi bilgi ve tecrübe birikimi kullanabilmektedir.
  4. Event Loop, Asynchronous programming, gibi başarılı modelleri çok iyi bir şekilde  desteklemesi
    1. Bu kısımla ilgili, yukarıdaki, mimari ile alakalı linkte biraz daha detay bulabilirsiniz.
    2. Kısaca, hem ölçeklenebilirlik acısından, hem de, hangi platformu kullanırsanız kullanın, zaten az çok aşina olduğumuz, Event Driven modelini, yeni bir öğrenme eğrisi olmadan, uygulamamıza, built-in  / dâhili olarak javascript in yetenekleriyle ekleyebilmeniz.

Yukarıda, javascript in + lar listesine sizde başka birçok şey ekleyebilirsiniz, ama işin özü olarak, şunu söyleyebiliriz; Javascript in bu özelliklerine, başka özellikler de ekleyerek  sadece tarayıcılarda değil, tarayıcı dışında, özellikle sunucu tarafında  kullanıma imkân sağlamak için,  doğmuş bir platform Node.js

Node.js ile neler yapılabilir?

  1. Hemen hemen her türlü web uygulamaları geliştirilebilir,
  2. Yüksek trafikli web uygulamaları için, ciddi performans artışı ve maliyet tasarrufu sağlanabilir,
  3. Direkt olarak, işletim sistemi seviyesine yakın diyebileceğimiz bir seviyede, (Low Level ), networking işlemlerini çok iyi desteklediği ve kolay bir abstraction/soyutlama sağladığı için, özellikle real-time/gerçek zamanlı uygulamalar için çok ideal bir yapı kurulabilir.
  4. Direkt olarak network trafiğine erişimi olduğu için (ve kolay bir alt yapı sağladığı için), aracıya (Nginx, Apache, IIS vb.) ihtiyaç duymaz.(Yine de bu aracılar ile kullanabilirsiniz.)  Başka bir değişle, uygulamanız içinde direkt olarak network trafiğini kolayca ekstra bir uzmanlık gereksinimi olmadan yönetebilirsiniz
  5. Sadece, Proxy sunucu olarak kullanıp, load balancing, ölçeklenebilirlik vs. için yani sadece performans için, başka bir platformda geliştirilmiş uygulamanızın önünde bir aracı olarak kullanabilirsiniz
  6. C/C++ basta olmak üzere, diğer dillerde yazılmış native modüllerle, dahada zengin ve güçlü bir yapıyı, direkt olarak Javascript kodlarınızın içine dahil edebilirsiniz. (Örneğin, yüksek işlemci gücü gerektiren ve javascriptin çok iyi olmadığı  “Kriptografi, resim isleme vs. gibi” durumlar )
  7. Platform dan bağımsız olduğu için, IOT cihazlarından, gömülü sistemlere kadar, hemen hemen her platformda kullanabilirsiniz.
  8. Ve daha da güzeli, bunların hepsini, JavaScript ile yapabilirsiniz.

Yukarıdaki listeye daha birçok ekleme yapılabilir, ama benim ilk aklıma gelenler bunlar oldu.

Node.js in yakın zaman da, V8 yerine Chakrayi kullanan bir Microsoft fork u bizlerle beraber olacak. Resmi süreç de Node.js, V8 yerine Chakra yi kullanır mi ya da alternatif olarak iki farklı JS engine le dağıtımı olur mu bilmiyorum ama  Microsoft kendi tarafında ciddi hazırlık içerisinde.

Şuan Node.js i geliştiren takım IBM e katiliminim tamamladı, node.js kendi ekosistemi içinde, Node.js foundation olarak devam etsede, arka planda kurumsal olarak IBM in de ismi ve desteği olacak.

Ayrıca Node.js foundation olarak bilinen yapı diğer büyük oyuncuların da desteğiyle büyümeye devam ediyor. Şuan bulabildiğim kadarıyla bazı katılımcılar;

  • Joyent, IBM, Microsoft, PayPal, Fidelity, SAP and The Linux Foundation Join Forces to Support Node.js Community With Neutral and Open Governance, Yahoo

Node.js çalışmaya başlamak için, https://nodejs.org/en/ adresinden, son sürümü indirip kullanmaya başlayabiliriz. Kurulum gayet basit o yüzden ayrıca değinmeye gerek yok diye düşündüm. Bu arada Node.js indirmek için ilgili sayfaya gittiğinizde aşağıdaki gibi iki fraklı sürümle karşılaşıyor olmanız lazım.

nodejs kurulum ve download

Sonunda LTS(long time support) olan sürüm, resmi olarak en az 2 yıl desteklenecek sürümü,  Stable ile biten sürüm ise en son özelliklerin test edildiği stable/kararlı olsada aylık bir destek süresine sahip olan sürümü işaret etmekde. Burada dikkat etmemiz gerek konu, stable sürümleri ciddi ticari projelerde kullanmamak. Küçük projelerde yada deneme amaçlı veya öğrenme amaçlı kullanmakta ise sıkıntı olmayacaktır.

Örneğin, şu anki 5.x stable  sürümüyle bir uygulama geliştirdiniz diyelim, belirli bir zaman sonra bir güvenlik açığı çıktı, eğer kullandığınız stable sürümü 6 ay lık süreyi geçtiyse bir güncelleme(resmi güncelleme) alamayacaksınız da diyebiliriz. Yakında 5.x Stable sürümünde denenen ve başarılı görülen tüm özellikler 4.x li LTE sürümüyle birleştirilip Node.js 6 LTE olarak yayınlanacak.

Biz yazı dizisi için 5 li sürümü kullanalım,  yazı dizisinde kullanacağımız özellikler ilerisi içinde sorun çıkarmayacak olanlar diyebiliriz.

Biz yazı serisinde, Node.js ve Expres.js ile bir restfull api , real-time socket uygulamaları, veritabanları ve veri erişimi ile birlikte node.js ile micro services mimarisine dayanan örnek uygulamalar geliştirerek devam edeceğiz. Böylece örneklerle birlikte pratik kullanımı da işin içine katarak daha verimli bir süreç elde etmeye çalışmış olacağız.

Diğer yazılar da olduğu gibi, örnekleri kısa videolarla desteklemeyede çalışacağım inş.

Bir sonraki yazıda , node.js ve Javascript için olmazsa olmaz diyeceğimiz bazı önemli kavramlara bakarak devam edelim inş.

 

1 thought on “Node.js ile Uygulama Geliştirme – 1 :Node.js nedir?, Giriş ve Genel Yapı.

Leave a Reply

Your email address will not be published. Required fields are marked *