Featured Post
Struktur Folder Ideal untuk Project Node.js Berskala Besar
- Dapatkan link
- X
- Aplikasi Lainnya
Pernah nggak sih lo buka sebuah project Node.js lama yang lo bikin sendiri, lalu dalam hati berkata, “Ini folder isinya apa aja sih… kenapa makin gue buka makin bikin pusing?”
Percaya atau nggak, itu pengalaman klasik para developer—termasuk gue dulu.
Semakin lama gue berkecimpung di dunia website development, makin kerasa kalau struktur folder bukan sekadar rapi-rapi doang. Dia itu fondasi. Salah struktur, salah alur, dan project bakal kerasa berantakan, susah scaling, dan makan banyak waktu saat tambah fitur baru.
Di artikel ini, gue bakal cerita struktur folder yang paling ideal buat project Node.js yang udah mulai bertambah besar. Struktur ini juga dipake banyak tim engineering biar development tetap smooth dan scalable.
Kenapa Struktur Folder Node.js Itu Penting Banget?
Banyak developer ngeremehin bagian ini, padahal efeknya luar biasa ketika:
-
Tim makin besar
-
Fitur makin banyak
-
Dependency makin kompleks
-
Logic mulai menyebar ke banyak file
Struktur yang buruk bikin:
-
Developer baru bingung nyari file
-
Maintenance makin lama
-
Risiko bug meningkat
-
Pengembangan fitur baru jadi lambat
-
Testing & deployment lebih ribet
Sebaliknya, struktur yang jelas bikin lo bisa fokus ke website development tanpa mikirin “file ini taruh mana ya?”
Struktur Folder Ideal untuk Project Skala Besar
Ini struktur yang paling sering dipakai untuk project Node.js modern seperti Express, NestJS (walau Nest sudah punya struktur sendiri), ataupun custom backend.
project/
│
├─ src/
│ ├─ config/
│ ├─ controllers/
│ ├─ services/
│ ├─ routes/
│ ├─ models/
│ ├─ middlewares/
│ ├─ utils/
│ ├─ database/
│ ├─ validations/
│ ├─ jobs/
│ ├─ helpers/
│ ├─ libs/
│ └─ app.js
│
├─ tests/
├─ public/
├─ scripts/
├─ logs/
├─ .env
├─ package.json
└─ README.md
Sekarang kita bahas tiap bagiannya.
Folder src/: Jantung Aplikasi
Semua source code utama masuk di sini. Jangan campur aduk dengan file lain di root. Ini bikin file organisasi terlihat jelas dari awal.
1. Folder config/
Isinya semua konfigurasi global:
-
konfigurasi server
-
konfigurasi database
-
konfigurasi JWT
-
konfigurasi Redis
-
konfigurasi email
-
konfigurasi cloud storage
Biasanya gue bikin file seperti:
config/ │── env.js │── database.js │── redis.js
Dengan begini, semua konfigurasi punya satu tempat khusus.
2. Folder controllers/
Inilah tempat logic endpoint API berada.
Kalau lo bikin API POST /users, logiknya taruh di:
controllers/
└── user.controller.js
Controllers harus sependek mungkin, idealnya cuma:
-
menerima request
-
lempar ke service
-
balikin response
3. Folder services/
Ini folder yang bikin project Node.js scalable.
Logic bisnis aplikasi sebaiknya ditaruh di service, bukan di controller.
Misal:
-
logic create user
-
logic update profile
-
logic payment
-
logic generate invoice
Contoh struktur:
services/
└── user.service.js
Service bisa dipanggil dari banyak tempat, bukan cuma controller.
4. Folder routes/
Letakkan semua routing di folder ini biar endpoint rapi.
Contoh:
routes/
└── user.routes.js
Biasanya gue bagi berdasarkan fitur, bukan file besar satu doang.
5. Folder models/
Kalau lo pakai database:
-
Mongoose
-
Sequelize
-
Prisma
-
Drizzle
model schema bisa ditaruh di folder ini.
Contoh:
models/
└── user.model.js
Jangan campur logic database di controller, itu bikin ribet.
6. Folder middlewares/
Tempat middleware custom:
-
authentication
-
authorization
-
error handler
-
rate limiter
-
request logger
Kenapa penting? Karena semakin besar project, middleware makin banyak dipake.
7. Folder utils/
Tools yang ringan seperti:
-
format tanggal
-
generate UUID
-
fungsi hashing
-
validasi kecil
utils adalah kotak peralatan kecil developer.
8. Folder helpers/
Mirip utils, tapi biasanya untuk fungsi yang lebih kompleks seperti:
-
kalkulasi revenue
-
parsing konfigurasi
-
modul pembayaran
Helpers biasanya lebih besar dari utils.
9. Folder validations/
Tempat schema validator dengan:
-
Joi
-
Yup
-
Zod
Biar request yang masuk bersih, sebelum masuk controller.
10. Folder database/
Kalau lo butuh:
-
migration
-
seeder
-
koneksi pooling
-
inisialisasi database
folder database/ bakal sangat penting, terutama di perusahaan yang pakai PostgreSQL atau MySQL.
11. Folder jobs/
Untuk cron jobs:
-
kirim email
-
backup database
-
sync data
-
cron harian/mingguan
Jangan ditaruh di controller, nanti berantakan.
12. Folder libs/
Tempat modul integrasi pihak ketiga:
-
cloudinary
-
stripe
-
midtrans
-
firebase
-
openai
-
redis client
Ini bikin struktur project lebih modular.
Folder tests/
Kalau proyek makin besar, testing wajib ada. Struktur testing harus rapi, misalnya dibagi berdasarkan fitur:
tests/
└── user.test.js
Testing membantu tim scaling tanpa bikin bug baru.
Folder public/
Kalau backend lo butuh:
-
public assets
-
dokumentasi
-
file statis
bisa taruh di folder ini.
Folder scripts/
Tempat automation script:
-
deploy script
-
cron manual
-
data import
-
backup script
Biasanya backend besar pakai ini.
Folder logs/
Kalau production, log sangat penting. Simpan:
-
error log
-
access log
-
cron log
Monitoring tanpa log itu mustahil.
Best Practice Tambahan untuk Project Skala Besar
1. Jangan Gabung Logic di Satu File
File seperti:
app.js
server.js
harus bersih. Jangan taruh logic di situ.
2. Gunakan .env dan .env.example
Biar developer lain gampang setup environment.
3. Pisahkan Layer (Controller → Service → Model)
Ini konsep arsitektur yang bikin project scalable.
4. Selalu Pikirkan "Fitur" Bukan "File"
Struktur di atas cocok untuk pendekatan fitur besar. Bahkan banyak tim mengubahnya menjadi struktur berbasis modular seperti:
modules/
user/
user.controller.js
user.service.js
user.model.js
user.routes.js
Ini cocok untuk website development besar yang terus bertumbuh.
Penutup: Struktur yang Baik Bikin Developer Lebih Produktif
Kalau lo serius ngerjain backend untuk proyek yang bakal berkembang, struktur ini bakal menyelamatkan banyak waktu lo di masa depan. Gue sendiri sudah melewati masa-masa jungkir balik karena struktur project yang berantakan.
Dengan folder yang rapi dan arsitektur yang jelas, lo bisa:
-
mudah scaling
-
cepat tambah fitur
-
mudah debug
-
gampang onboarding developer baru
-
workflow website development jadi jauh lebih smooth
Komentar