NestJS Mimarisi: Modüller ve Temel Kavramlar (1. Bölüm)

Posted on Jul 29, 2025

Neden Modül?

Küçük projelerde her şeyi tek dosyada yazmak kolaydır. Ama işler büyüyünce işler sarpa sarar. Kod karmaşıklaşır, neyin nerede olduğunu bulmak zorlaşır. İşte burada modüller devreye girer.

NestJS, Angular’dan aldığı ilhamla “her şey bir modülün içinde” prensibiyle çalışır.

Bir modül, belirli bir işlevi yerine getiren yapıları gruplar: controller’lar, service’ler, provider’lar…

1. Modül Nedir?

NestJS’te her yapı bir modülün içinde yaşar.
Modül; bağımsız, izole, bir iş parçasını temsil eden bir yapıdır.

Analoji

Bir otelin her katını bir “modül” gibi düşün:

  1. kat -> rezervasyon modülü
  2. kat -> ödeme modülü
  3. kat -> oda servisi modülü

Her kat kendi işini yapar ama gerektiğinde birbiriyle iletişim kurabilir.

2. Root Module ve Feature Module Farkı

NestJS projeleri her zaman bir Root Modül (kök modül) ile başlar: AppModule. Bu modül uygulamanın giriş noktasıdır. Ana çatı gibi düşünebilirsin.

Örnek:

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Peki Feature Module nedir?

Feature Module, belirli bir işlevi izole etmek için oluşturulan ek modüllerdir. Mesela bir UserModule, sadece kullanıcı işlerini halleder.

src/
├── app.module.ts       # Root modül
├── user/
│   ├── user.module.ts  # Feature modül
│   ├── user.service.ts
│   └── user.controller.ts

Bu sayede:

  • Kod okunabilirliği artar
  • Ekip çalışması kolaylaşır
  • Modüller bağımsız test edilebilir hâle gelir

3. @Module Dekoratörü

Her modül bir sınıfla temsil edilir ve bu sınıfa @Module dekoratörü eklenir.

@Module({
  imports: [],          // Başka modüller buraya eklenir
  controllers: [],      // HTTP isteklerini yöneten sınıflar
  providers: [],        // Servisler, helper'lar
  exports: []           // Dışa açmak istediklerin
})
export class UserModule {}

Bu yapı aslında NestJS’in dependency injection sistemine de temel oluşturur. Her şey bu dekoratörle tanıtılır.

4. Modül Oluşturma ve Yapılandırma

Nest CLI üzerinden modül oluşturmak çocuk oyuncağı:

nest generate module user
# veya kısa hali:
nest g mo user

Bu komut:

src/user/user.module.ts

dosyasını oluşturur.

Ardından bir controller ve service ekleyelim:

nest g controller user
nest g service user

Şu yapı oluşur:

src/user/
├── user.controller.ts
├── user.module.ts
└── user.service.ts

UserModule içeriği:

@Module({
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

Şimdi bunu AppModule içine dahil etmeliyiz(cli otomatik yapıyor zaten):

import { UserModule } from './user/user.module';

@Module({
  imports: [UserModule], // Artık UserModule kullanılabilir
})
export class AppModule {}

Böylece modüller arasında “görünürlük” sağlanır. AppModule -> UserModule’u kullanabilir hâle gelir.