Episode ini menelusuri evolusi backend Node.js dari Express hingga kelahiran NestJS, tujuan arsitektur modular dan scalable, serta perbandingan dengan Express, Koa, dan framework backend lain untuk memahami kapan dan mengapa NestJS diperlukan.

Sebelum menulis kode NestJS, penting untuk memahami mengapa framework ini ada. NestJS tidak lahir dari kekosongan — dia adalah jawaban atas masalah nyata yang dihadapi pengembang backend Node.js selama bertahun-tahun.
Episode 1 membahas evolusi backend Node.js, latar belakang kelahiran NestJS, tujuan arsitekturnya, serta perbandingan dengan Express, Koa, dan framework lain. Dengan pemahaman ini, kalian akan tahu kapan NestJS menjadi pilihan yang tepat.
Node.js dirilis tahun 2009 membawa paradigma event-driven dan non-blocking I/O ke dunia JavaScript. Di atasnya, Express muncul sebagai framework web minimalis yang sangat fleksibel. Express sukses besar karena sederhana, namun fleksibilitasnya menjadi masalah saat proyek tumbuh besar.
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello World");
});
app.listen(3000);Express tidak memaksakan struktur apa pun. Aplikasi kecil memang nyaman, tetapi saat tim besar mengerjakan fitur yang banyak, kode menjadi sulit dirawat karena setiap developer bisa menulis dengan gaya masing-masing.
NestJS diciptakan oleh Kamil Myśliwiec dan pertama kali dirilis tahun 2017. Kamil terinspirasi arsitektur Angular — framework frontend dengan struktur modular yang tegas. Ia membawa pola tersebut ke backend: TypeScript sebagai bahasa utama, dependency injection, dan struktur project yang sudah teratur sejak awal.
nest --versionNestJS lahir dengan misi menjadikan pengembangan backend Node.js lebih terstruktur, scalable, dan mudah diuji — tanpa mengorbankan kekuatan ekosistem Node.js yang sudah ada. Perintah nest --version di atas memverifikasi bahwa CLI dan seluruh toolchain siap dipakai.
Sejak rilis pertama, NestJS berkembang lewat rilis mayor yang stabil: versi 8 menambah dukungan Fastify dan GraphQL yang lebih matang, versi 9 memperkuat module system dan logging, sedangkan versi 10 dan 11 membawa penyempurnaan performa, dukungan Node.js LTS terbaru, serta integrasi yang lebih erat dengan ekosistem modern. Setiap rilis mayor menjaga kompatibilitas dengan versi sebelumnya sehingga migrasi antar versi terasa mulus.
Pendekatan tradisional di Node.js umumnya memakai file route yang panjang dan handler yang mencampur logika bisnis dengan detail HTTP. Masalah yang dipecahkan NestJS: aplikasi enterprise-ready dengan struktur yang konsisten, boundary antar modul yang jelas, dan konvensi yang dipahami seluruh tim.
@Module({
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}Dengan pola modul, setiap domain aplikasi hidup di tempatnya sendiri. Kontroler menangani request, service menangani logika, dan modul membatasi ruang lingkup.
NestJS membangun dependency injection container yang mengelola dependensi antar class secara otomatis. Ini memudahkan testing karena kita bisa mengganti dependensi dengan mock. Testing bukan fitur tambahan, melainkan bagian dari arsitektur sejak awal. Contoh provider yang disuntikkan akan kita lihat langsung saat membahas controllers dan services di episode 4 dan 5.
NestJS menyediakan dukungan resmi untuk GraphQL, microservices, serverless, dan WebSocket. Framework ini tidak mengunci kalian pada satu gaya — kalian bisa membangun REST API sederhana atau sistem microservices yang kompleks dengan fondasi yang sama. Dukungan resmi ini berarti kalian tidak perlu merangkai banyak library sendiri — semuanya sudah terintegrasi rapi dengan modul NestJS.
Express dan Koa bersifat unopinionated: memberi kebebasan penuh tapi tanpa struktur bawaan. NestJS bersifat opinionated: memberikan konvensi dan arsitektur. Untuk prototipe kecil, Express lebih cepat. Untuk aplikasi yang diprediksi tumbuh besar, NestJS menang di sisi maintainability.
Jika membandingkan dengan framework bahasa lain seperti Spring Boot di Java atau Laravel di PHP, NestJS adalah padanan modern di ekosistem Node.js: modular, memiliki dependency injection, dan dirancang untuk aplikasi enterprise. Perbedaan utamanya adalah NestJS memakai TypeScript dengan sintaks dekorator yang ringkas.
Pendekatan tradisional dengan Express menempatkan seluruh logika dalam satu file — routing, validasi, dan logika bisnis bercampur. NestJS memisahkannya secara tegas: controller untuk HTTP, service untuk logika, dan module untuk batas domain. Ketika aplikasi kecil, perbedaan ini tidak terasa. Ketika aplikasi besar dengan puluhan endpoint, pemisahan ini menyelamatkan waktu maintenance.
// controller: menangani HTTP
@Controller("users")
export class UserController {
constructor(private readonly userService: UserService) {}
}
// service: menangani logika bisnis
@Injectable()
export class UserService {
findAll(): string[] {
return ["Arman", "Budi"];
}
}Perhatikan dekorator @Controller dan @Injectable — keduanya menjadi penanda peran masing-masing class dalam arsitektur. Ini adalah bentuk awal struktur enterprise-ready yang ditawarkan NestJS sejak project pertama dibuat.
Episode 1 menunjukkan bahwa NestJS lahir untuk menjawab masalah struktur dan maintainability di ekosistem Node.js. Dia membawa pola enterprise yang sudah matang — modularitas, dependency injection, dan testing — tanpa meninggalkan ekosistem JavaScript.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya kita akan membahas konsep dasar dan arsitektur utama — bagaimana NestJS bekerja di balik layar sebagai wrapper Express, komponen module-controller-provider, dependency injection container, lifecycle aplikasi, dan alur kerja pipes, guards, filters, serta interceptors. Pastikan pemahaman kalian tentang dekorator sudah solid!