NodeJS Adım 1 – NodeJS Nedir?

Adım Adım Nodejs yazılarımızın ilkinde sizlere birkaç ön bilgi ile beraber nodejs’in ne olduğundan bahsedeceğim.

Frontend & Backend Kavramı

Yazdığımız uygulamalar yüksek ihtimalle çok kullanıcılı uygulamalardır. Çoklu kullanıcılı uygulamalar genelde Sunucu(Server)/İstemci(Client) mantığı ile yazılır. Sunucu yani çevrim içi çalışan, tüm verilerin tutulduğu merkezi bir sistem. İstemci yani bu merkezi sisteme bağlı çalışan merkezi sisteme veri iletimi yapan, kullanıcıyla etkileşimi sağlayan yan program.

serverside-clientside

Günümüz modern uygulamalar da bu istemci genelde tarayıcıdır(browser). Tarayıcı üzerinden kullanılan uygulamalar genelde Web Uygulaması olarak adlandırılır. Kullanıcı uygulamayı kullanmak istediğinde tarayıcıdan sunucuya bir istek gönderir, sunucu isteğe göre uygulama içerisinde kendi anlayacağı bölümleri işleyerek kullanıcıya uygun çıktıyı üretir ve tarayıcıya gönderir. Tarayıcı aldığı çıktıyı kendi içerisinde yorumlar ve kullanıcıya uygun çıktıyı üretir. Sonra kullanıcı gerektiği yerde tekrar sunucuya istek gönderir, tekrar cevap gelir… Genel olarak tarayıcı bazlı Sunucu/İstemci mimarisi basit anlatımla bu şekilde çalışır.

Burada önemli bir kısım sunucunun kendi anladığı kısımları yani sunucu tabanlı diller(C#, Java, Php, Python, Ruby…) ile yazılmış kısımları çalıştırması, tarayıcının da kendi anladığı yani tarayıcı dilleri(HTML,Css,Javascript, Dart… ) ile yazılmış kısımları çalıştırmasıdır. Sunucu tarafında çalışan koda Backend, tarayıcı üzerinde çalışan koda Frontend denir. Web uygulamarı yazarken Backend ve Frontend kodları aynı proje içerisinde kullanırız. Hangi iş mantığı hangi kısımda çalışacaksa ona göre ya Backend’de yada Frontend’de yazılır.

unofficial_javascript_logo_2-svg

Javascript

Frontend dillerinden en önemlilerinden bir tanesi Javascript’tir. Web tarayıcılarının etkin bir şekilde kullanılması için geliştirilmiştir. Kullanıcıyla etkileşimin artırılması, iş yükünün sunuculardan istemcilere taşınması, daha görsel animasyonlu web siteleri/ web uygulamaları geliştirilmesi gibi kullanım alanları vardır. 1995 yıllarında çıktı. Java diliyle isim benzerliği dışında hiçbir alakası yoktur. Javasvript standartları Ecma International firması tarafından ECMASCRIPT standartlarıyla belirlenir. Günümüzde kullanılan ECMASCRIPT standardı 5.1 sürümüdür. Ve bu standart Javascript 1.8.1 ile desteklenmektedir. Ancak şu aralar ECMASCRIPT 6 standardı üzerinde çalışmalar devam etmektedir.

Javascript prototip bazlı nesne yönelimli programlama, fonksiyonel programlama, imparatif programlama paradigmalarını destekler. Genellikle tarayıcılarda kullanılır. Google’ın Chrome tarayıcısını ve bu tarayıcı içerisindeki V8 Javascript motorunu geliştirmesiyle Javascript performansında ve gelişimde büyük yükselişler oldu. Bu Javascript motorunun gücü sayesinde daha önce yapılamayan birçok uygulama yapıldı. Ve ilk defa Javascript frontend’den çıkarak Backend tarafına geçiş yaptı ve Nodejs doğdu.

node_js_logo

NodeJS

NodeJs 2009 yılında Joyent firmasında çalışan Ryan Dahl tarafından geliştirilen Javascript Çalışma Ortamıdır.(Javascript Runtime Enviroment). Joyent firmasının desteği ve V8 motorunun gücü ile Dahl Javascript’i Backend kısmına taşıdı.

“Nodejs backend tarafında çalışan, javascript tabanlı scriptleri yorumlanabilen ve çalıştırabilen, hızlı, ölçeklenebilir  network uygulamaları geliştirmeyi sağlayan bir çalışma zamanı ortamıdır(runtime enviroment).”

Javascript’in backend’e(server side) taşınması ile developerlar tek dil bilerek hem frontend hem backend kod yazabilir hale geldiler. Frontend de kullanılan javascript kütüphanelerinden bazıları backend tarafında kullanılabilir hale geldi.

Javascript’in doğal Non Block mimarisi sayesinde backend tarafında ölçeklenebilir uygulamalar daha kolay bir şekilde yazılabilir hale geldi. Nodejs’in ölçeklenebilir uygulamalardaki başarısı sayesinde kullanıcı sayısı milyonlarla ifade edilen büyük siteler nodejs kullanmaya başladı. Üstelik bunu single thread olarak yapabiliyor.

“Ölçeklenebilirlik, bir uygulamanın aynı anda birden çok kullanıcıya takılmadan cevap verebilir halde olmasıdır.”

Peki bunu nasıl başarıyor? Nodejs olay bazlı(event-driven) Non-Blocking yapısını Event loop denilen bir mimariyle sağlıyor. (İlerde detayına gireceğiz.) Bu mimariyle tek bir thread(single thread) ile asenkron çalışabilmektedir.

Bunların dışında Nodejs’in en büyük avantajlarından bir taneside modüler yapısı ve bu yapıyı destekleyen paket yönetim sistemi: npm(nodejs package manager). Nodejs npm ve npm yi destekleyen topluluk sayesinde hemen hemen her işimizi paketler sayesinde halledebiliyoruz. Şuan npm üzerindeki paket sayısı yaklaşık 250000 civarında. E okadar paket içerisinde mutlaka işimize yarayan bir paket vardır :). Tabi bu kadar paket Nodejs’in arkasında çok büyük bir topluluğun olduğunuda gösteriyor. Bu kadar büyük bir topluluğun içerisinde sorunları çözmekte kolay.

Bir sonraki yazımızda örnek kodlara başlayacağız ve ilk uygulamalarımız yazacağız.