Rekomendasi Struktur Folder di Nest Js

Feb 13, 2025
3 min read
Widodo
Widodo
Author

Share This Article

Rekomendasi Struktur Folder di Nest Js

 Struktur folder yang baik di NestJS sebaiknya:

Modular & Scalable → Agar mudah dikembangkan
Bersih & Tertata → Agar mudah dipahami
Menerapkan Separation of Concerns → Memisahkan concerns seperti controller, service, dan repository


📂 Struktur Folder yang Direkomendasikan

Berikut adalah struktur yang sesuai best practice untuk proyek NestJS:

📦 src
 ┣ 📂 common                  # 🔹 Modul yang bisa digunakan ulang
 ┃ ┣ 📂 decorators            # ➜ Custom decorators
 ┃ ┣ 📂 filters               # ➜ Global Exception Filters
 ┃ ┣ 📂 guards                # ➜ Auth Guards (JWT, Role-based)
 ┃ ┣ 📂 interceptors          # ➜ Logging, Transforming responses
 ┃ ┣ 📂 middlewares           # ➜ Custom middlewares
 ┃ ┣ 📂 pipes                 # ➜ Validation pipes
 ┣ 📂 config                  # 🔹 Konfigurasi Aplikasi
 ┃ ┣ 📜 config.module.ts      # ➜ Config Module untuk env
 ┃ ┣ 📜 app.config.ts         # ➜ App-wide konfigurasi
 ┣ 📂 modules                 # 🔹 Semua fitur aplikasi di sini
 ┃ ┣ 📂 auth                  # ➜ Modul Auth (Login, Register)
 ┃ ┃ ┣ 📜 auth.module.ts
 ┃ ┃ ┣ 📜 auth.controller.ts
 ┃ ┃ ┣ 📜 auth.service.ts
 ┃ ┃ ┣ 📜 auth.repository.ts  # (Opsional) Untuk query ke DB
 ┃ ┃ ┣ 📜 auth.strategy.ts    # (Opsional) JWT, OAuth Strategy
 ┃ ┣ 📂 users                 # ➜ Modul Users
 ┃ ┃ ┣ 📜 users.module.ts
 ┃ ┃ ┣ 📜 users.controller.ts
 ┃ ┃ ┣ 📜 users.service.ts
 ┃ ┃ ┣ 📜 users.repository.ts
 ┃ ┣ 📂 payments              # ➜ Modul Payment
 ┃ ┃ ┣ 📜 payments.module.ts
 ┃ ┃ ┣ 📜 payments.controller.ts
 ┃ ┃ ┣ 📜 payments.service.ts
 ┃ ┃ ┣ 📜 payments.repository.ts
 ┃ ┃ ┣ 📜 dto                 # ➜ Data Transfer Objects
 ┃ ┃ ┃ ┣ 📜 create-payment.dto.ts
 ┃ ┃ ┃ ┣ 📜 get-period.dto.ts
 ┃ ┃ ┃ ┣ 📜 update-payment.dto.ts
 ┃ ┃ ┣ 📜 entities            # ➜ Model database jika menggunakan class (Opsional)
 ┃ ┃ ┃ ┣ 📜 payment.entity.ts
 ┣ 📂 database                # 🔹 Konfigurasi Database
 ┃ ┣ 📜 prisma.service.ts     # ➜ Jika menggunakan Prisma
 ┃ ┣ 📜 database.module.ts
 ┃ ┣ 📜 database.service.ts   # ➜ Service database (jika tanpa Prisma)
 ┣ 📂 logs                    # 🔹 Menyimpan logs aplikasi
 ┣ 📂 utils                   # 🔹 Helper functions / utilities
 ┣ 📜 app.module.ts           # 🔹 Entry Module utama
 ┣ 📜 main.ts                 # 🔹 Entry point aplikasi (bootstrap)
 ┣ 📜 env.example             # 🔹 Contoh file `.env`
 ┣ 📜 tsconfig.json           # 🔹 Konfigurasi TypeScript
 ┣ 📜 package.json            # 🔹 Dependencies proyek

🏆 Penjelasan & Best Practices

  1. common/ → Menyimpan kode reusable, seperti guards, pipes, filters, interceptors.
  2. config/ → Menyimpan semua konfigurasi aplikasi.
  3. modules/ → Setiap fitur aplikasi dibuat dalam modul tersendiri agar mudah dikelola.
  4. database/ → Untuk database service, terutama jika menggunakan Prisma atau TypeORM.
  5. logs/ → Untuk menyimpan file log jika menggunakan Winston atau pino.
  6. utils/ → Untuk menyimpan fungsi bantuan (misalnya generateRandomId()).

🚀 Keuntungan Struktur Ini

Mudah Dimaintain → Kode lebih rapi dan modular
Mudah di-scale → Bisa menambahkan modul baru dengan mudah
Mudah Ditemukan → Semua file ada di tempat yang jelas
Terpisah Dengan Jelas → Controller, Service, dan Repository tidak bercampur


🔥 Tambahan (Opsional)

  • Jika ada WebSocket → Bisa buat events/
  • Jika ada Cron Jobs → Bisa buat jobs/
  • Jika ada microservices → Bisa buat microservices/

💡 Kesimpulan:
Struktur ini flexible dan bisa disesuaikan dengan kebutuhan proyek tanpa mengorbankan best practice! 🚀