Nest 🆚 Express Hangi Framework'ü Seçmeliyim?
Tags: webdev, javascript, express, nestjs
Published: 2022-12-13 17:39:28


## Nest vs Express, Hangi Framework'ü Seçmeliyim?

Bildiğiniz gibi son yıllarda node.js oldukça popüler. Node.js ile bir serverside application yapmak istediğimizde aklımıza ilk gelen framework Express.js oluyor. Öte yandan kendiliğinden bir template ile gelen ve çoğunlukla "opinionated" yaklaşımı benimsemiş Nest.js de son yıllarda oldukça popüler olmaya başladı.

Bu karşılaştırmadaki en temel madde, Nest gibi içerisinde birçok yapıyı barındıran bir framework'ü mü tercih etmek? Yoksa custom bir biçimde kendi yapımızı oluşturabildiğimiz çok daha esnek, yalın Express ile mi devam etmek olacak.

İlk olarak çok ufak Express ve Nest'i tanımlayıp akabinde hemen karşılaştırmaya geçeceğim.

Dipnot: Sürekli ingilizce kavramlar kullanacağım. Kavram olarak çoğunun karşılığını Türkçede bulamadım.

### Express.js

Express, server-side uygulamalar oluşturmak için çok çeşitli işlevler sağlayan bir Node.js web uygulama çerçevesidir (framework). Express MVC mimarisini destekler. Fakat bunu kullanmak tamamen kullanıcıya kalır. Genel olarak "un-opinionated" bir yapı sergiler.

Basit bir Express uygulaması:

```
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () =>
  console.log('Example app listening on port 3000!'),
);
```

Gördüğünüz gibi birkaç satırla bir server ayağa kaldırabilirsiniz. 

### Nest.js

Nest de Express gibi server-side uygulamalar oluşturmamızı sağlayan bir Node.js framework'üdür. TypeScript ve JavaScript tabanlıdır. Yapı olarak Angular'ı oldukça andırır. Server-side uygulamalar oluştururken default olarak Express çatısını kullanır. Fakat platform agnostic'dir ve isterseniz Fastify gibi başka bir HTTP framework'ü de kullanabilirsiniz.

Not: Eğer Nest.js kullanırken Express'i tercih ettiyseniz Express'in özelliklerini de kullanabiliyorsunuz. Fakat çoğunluğu tavsiye edilmiyor ve Express üzerindeki Nest'in bize sunduğu yapıları kullanıyoruz.

### Karşılaştırma

#### Opinionated VS Unopinionated

Opinionated mantığı, uygun bir tarza veya bir şeyler yapma yöntemine sahip olduğu anlamına gelir. Böylece çeşitli yapılar oluştururken size kılavuz olur. Ama aynı zamanda sizin uygulama alanınızdaki serbestliğinizi de bir ölçüde kısıtlar. Öte yandan Unopinionated frameworkler ise, geliştiricilere tam bir özgürlük verir, çok çeşitlidir, daha az yapılandırılmıştır. Farklı senaryoları test etmemiz için çok uygundur fakat bir yazılım ekibinde herkes aynı yöntemi kullanmayabilir. Bu da proje dallandıkça çeşitli sorunlara yol açacaktır. Aynı zamanda projeye yeni katılacak biri de oluşturulan yapıyı kolay bir biçimde çözemeyebilir.

Nest.js opinionated bir framework iken Express çoğu yerde unopinionated tutum sergiler Bir diğer deyişle Express.js daha önceden tanımlanmış (pre-defined) kurallara sahip değildir. Nest ise daha önceden tanımlı kurallara sahiptir.

#### Performans

Nest, uzun kod satırları yazmadan doğrudan komut vermenizi sağlayan CLI (Command Line Interface) içerir. Nest tarafında yapılan Dependency Injection, uygulamanızı sorunsuz bir şekilde çalıştırmak için ihtiyaç duyduğunuz kadar çok dependencies eklemenizi sağlar. Bu gibi özelliklerle Nest hem performansı kötü etkileyecek tarafları bizim ele almamızı engellerken hem de uğraşmamız gerekmeyen birçok satır koddan kurtarır.

Öte yandan Express'in asenkron yapısı ölçeklenebilir değildir.

#### Mimari (Architecture)

İkisi arasındaki bir diğer fark da mimarileridir. Nest, MVC tasarım modelini takip ederken, Express bunu tamamen size bırakır. Çoğunlukla gördüğüm projeler MVC ile yazılmaya çalışılsa da bu da önemli bir farklılıktır. Bu da Express tarafında enterprise level bir proje daha az optimize edilmiş veya yapı olarak daha karmaşık bir hal almış olabilir.

Ayrıca Nest ile kod yazarken bana hep Spring ve Angular'ı andırıyor. Daha çok OOP programming mantığını benimsiyor. Express ise daha çok FP, FRP gibi mantıklarda kod yazmamızı sağlıyor modeller harici class bile oluşturmamıza gerek kalmıyor.

#### Popülerlik

Express'in çok daha eski bir framework olması ve hem büyük ölçekli uygulamalar için hem de küçük uygulamalar için de kullanılabilir olması onu çok daha popüler kılıyor. Bu da daha büyük bir community'ye sahip kılıyor. Ve bu da unopinionated bir mantığa sahip framework için oldukça etkili oluyor.

Öte yandan Nest son 2021-2022 arasında npm ile 1 milyon ekstra haftalık indirme kazanmış.

#### Unit Testing

Daha önce bahsettiğimiz gibi Nest, burada da bize kılavuz oluyor. Unit Test, CLI'i ve Jest'te yapılandırılmış bir varsayılan test ortamı içerdiğinden, NestJS ile oldukça kolay ve hızlıdır.

Öte yandan Express içinde birçok yöntem ve başlık mevcut. Bunlardan en uygun olanı seçmek size kalmış.

### Sonuç Olarak

Nest hem Java ve Angular benzeri bir yapısı ile yıllardır aşina olduğumuz OOP kavramını çokça kullanıyor.

Yalın Express'i seçecek olursak geniş community'si bize çeşitli boilerplate'lerle geliyor ve her takıldığımız yerde bize kılavuz oluyor. Fakat Express custom exception handler'ından custom architecture'ına kadar her kısmın seçimini bize bırakıyor bu da gerek güvenlik gerek performans gerek de sürdürülebilirlik olarak risk içeriyor. Yani Amerika'yı yeniden keşfetmiyoruz ve bizim için en uygun Amerikayı oluşturuyoruz. Fakat hata payı da mutlaka oluyor ve bu da maliyeti doğrudan etkiliyor.

Bence burada doğru bir SWOT analizi gerekiyor ve değerlendirilmesi gereken en önemli faktörler;
- Ekip üyelerinin yetkinlikleri
- Projeyi hazırlayanların sayısı
- Ekip üyelerinin uyumu

oluyor.

Öte yandan hiç Express veya Nest tecrübeniz yok ise ve large scale bir application oluşturmak istiyorsanız burada önerim kesinlikle Nest olur. Nest ile çok daha az maliyetli ölçeklenebilir bir proje oluşturabilirsiniz.

Aralarındaki en temel farklara bu yazımda değinmeye çalıştım. Özellikle yeni bir projeye başlarkenki karar aşaması benim için çok yıpratıcıdır.
 
![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dcmbpballx86gt5iie0b.gif)

Bu türkçe içerikle yükünüzü hafiflettiysem ne mutlu bana 🙂. Okuduğunuz için teşekkür ederim. Bir sonraki yazımda görüşmek üzere.