Node.js
Properly understanding Node requires a little bit of context about the history of JavaScript. When JavaScript was first developed, it was only a client-side programming language. It would run in the internet browser, and different internet browsers had different engines that would run it. This was a major limitation of JavaScript because it meant you couldn't develop full stack applications.
JavaScript couldn’t run on the server side. Node bridges this gap because it's a JavaScript runtime environment that can be run on the server side. So using Node, you can actually build full stack applications using only JavaScript. Node also has some great perks. For example, asynchronous and event-driven I/O. This means it can handle multiple events concurrently without having to wait for one to complete before it starts another. Another super powerful feature of Node is NPM, or Node Package Manager. This lets you install tons of super useful modules that you can import right into your code and start using. Finally, Node is cross-platform - it runs on Linux, Windows, Mac, and has a really great open source community built around it.
Node.js’i tam olarak anlayabilmek için önce biraz JavaScript’in geçmişine bakmak lazım. JavaScript ilk ortaya çıktığında sadece tarayıcıda çalışan, yani tamamen istemci taraflı bir programlama diliymiş. Her tarayıcının JavaScript’i çalıştırmak için kendi motoru varmış ama bu durum JavaScript’in kullanım alanını epey sınırlıyormuş. Çünkü sadece tarayıcıda çalıştığı için sunucu tarafında kullanılamıyor, dolayısıyla full-stack uygulamalar geliştirmek mümkün olmuyormuş. İşte Node.js bu eksikliği kapatmış.
Node, JavaScript’in sunucu tarafında da çalışmasını sağlayan bir çalışma zamanı (runtime) ortamı. Bu da demek oluyor ki artık sadece JavaScript yazarak hem istemci hem de sunucu tarafında çalışan full-stack uygulamalar geliştirilebiliyor. Node’un bazı güçlü yönleri var. Mesela, asenkron ve olay güdümlü (event-driven) bir I/O yapısına sahip. Bu sayede işlemler birbirini beklemek zorunda kalmadan, aynı anda birden fazla işlem yürütülebiliyor. Bir diğer önemli avantajı da NPM - yani Node Paket Yöneticisi. NPM ile binlerce hazır modülü kolayca indirip projene entegre edebiliyorsun. Son olarak, Node platformdan bağımsız çalışabilir. Yani Linux, Windows ya da Mac Node.js’i kullanabilirsin.
Express.js
Express.js is a lightweight framework built on top of Node, and it greatly simplifies the process of building web apps and APIs. The first key feature is routing. Using this functionality, you can quickly and easily define responses for various HTTP methods.
Express also supports templating, so you can create dynamic HTML files on the backend. It provides a super easy way to serve static files like JavaScript or CSS. It’s also very extensible - you can add many extensions via NPM. It’s widely used in the industry because it’s so powerful, yet simple to learn and use.
Express.js, Node üzerine kurulmuş hafif bir framework ve web uygulamaları ile API geliştirme sürecini büyük ölçüde basitleştirir. En temel özelliği routing (yönlendirme) sistemi. Bu özellik sayesinde farklı HTTP metodları için yanıtları hızlı ve kolayca tanımlayabilirsin Express, arka uçta dinamik HTML dosyaları üretmeye olanak sağlayan şablon motorlarını da destekler Ayrıca JavaScript ve CSS gibi statik dosyaları sunmak için oldukça kolay bir yol sağlar Express son derece genişletilebilir, NPM üzerinden birçok eklentiyle işlevselliği artırabilir, güçlü, öğrenmesi ve kullanması kolay olduğu için de endüstride oldukça yaygın.
MongoDB
MongoDB is a hugely popular open-source NoSQL database. The data is stored in documents, which are similar to JSON objects. Each document can have a unique structure, and documents in a collection don’t need to have the same fields. This allows for super flexible data modeling.
Documents are grouped into collections, which are similar to tables in SQL databases.
However, a collection is just a container and doesn’t enforce any schema.
MongoDB supports horizontal scaling through sharding.
Sharding distributes the data across multiple servers.
MongoDB also offers replication.
Write operations go through a primary node, and secondary nodes replicate them.
It also includes a framework for aggregation, which is like the GROUP BY in SQL.
Since MongoDB doesn’t require a predefined schema, it’s great for semi-structured data.
But it also means developers must think carefully about access patterns for efficiency.
MongoDB, açık kaynaklı bir NoSQL veritabanı. Veriler, JSON’a benzeyen "belge" (document) yapılarında saklanır. Her belgenin yapısı farklı olabilir; yani aynı koleksiyondaki belgelerin birebir aynı alanlara sahip olması gerekmez. Bu da veri modellemesi açısından oldukça esnek bir yapı. Belgeler, SQL’deki tablolara benzer şekilde "koleksiyon" adı verilen gruplar altında toplanır. Ama SQL’in aksine, koleksiyonların belirli bir şemaya (yani sabit yapıya) uyma zorunluluğu yok.
MongoDB’nin bir diğer güçlü yönü de yatayda kolayca ölçeklenebilmesi.
Bunu “sharding” dediğimiz veri parçalama yöntemiyle yapar.
Veriler birden fazla sunucuya dağıtılarak sistemin performansı artırılır.
Ayrıca MongoDB, replikasyon desteği de var.
Yani veriler birincil (primary) sunucuda yazılır, diğer ikincil (secondary) sunucular bu verileri otomatik olarak kopyalar.
Bu da hem yedekleme hem de yüksek erişilebilirlik açısından avantaj sağlar.
Veri toplama ve analiz için SQL’deki GROUP BY fonksiyonuna benzeyen güçlü bir “aggregation” altyapısı da var.
Önceden tanımlı bir şemaya ihtiyaç duymadığı için, yarı yapısal verilerle çalışırken kullanışlı.
Ama bu esneklik, performans açısından dikkatli tasarım yapmayı da gerektirir, özellikle veri okuma/yazma desenleri söz konusu olduğunda.