Back to Blog
Dec 29, 20255 min read

Stop Reinventing the Wheel: NestJS Starter Siap Produksi dengan OAuth & Clean Architecture

Tirta Afandi
Tirta Afandi
@kikuk_afandi

Kenapa Saya Membangun Nest-Zero

Setiap backend developer pasti pernah merasakannya.

Setiap kali memulai proyek baru, 2–3 hari pertama habis hanya untuk hal-hal yang itu-itu saja:

  • Menyusun struktur folder
  • Konfigurasi database
  • Setup JWT dan authentication strategy
  • Logging dan security dasar

Agar bisa mengirim MVP lebih cepat tanpa mengorbankan kualitas kode, saya butuh fondasi yang benar-benar solid. Bukan sekadar template “Hello World”, tapi arsitektur siap produksi yang langsung menangani bagian paling krusial.

Di situlah Nest-Zero lahir.


Apa itu Nest-Zero?

Nest-Zero adalah starter kit NestJS open-source yang dirancang dengan prinsip Clean Architecture, dan sudah dikonfigurasi dengan:

  • Prisma ORM

  • Zod Validation

  • Sistem Autentikasi Lengkap

    • Local (Email & Password)
    • OAuth (Google)

Tujuannya sederhana:

Menghemat 40+ jam kerja di setiap proyek backend baru.


1. Arsitektur: Modular & Bersih

Salah satu masalah terbesar dalam pengembangan Node.js adalah spaghetti code.

Di Nest-Zero, saya menerapkan pemisahan tanggung jawab yang ketat agar kode tetap mudah dirawat dan scalable.

Struktur Proyek

code
src/
├── auth     # Logika autentikasi (Strategy, Guard)
├── user     # Manajemen data & profil user
├── common   # Utility bersama (Filter, Prisma, Validation)
├── model    # DTO dan response interface terpusat

Struktur ini memastikan:

  • Business logic berada di Service
  • Controller tetap ringan
  • Kode mudah dites, mudah dikembangkan, dan bersih

2. Mengatasi Masalah Autentikasi

Keamanan adalah bagian yang sering gagal di banyak starter kit.

Biasanya hanya ada login sederhana, sementara manajemen token diserahkan sepenuhnya ke developer.

Nest-Zero hadir dengan sistem autentikasi yang matang.

🔐 Autentikasi Dual Strategy

  • LocalStrategy (Email & Password)
  • GoogleStrategy menggunakan Passport

Desainnya mudah dikembangkan. Menambahkan GitHub, Facebook, atau OAuth lain cukup dengan menambah satu file strategy.


🔁 Refresh Token Rotation (Keamanan Serius)

Access token dibuat berumur pendek demi keamanan. Namun agar sesi user tetap nyaman, dibutuhkan refresh token.

Di Nest-Zero:

  • Refresh token di-hash
  • Disimpan di database
  • Menggunakan token rotation

Contoh Implementasi Refresh Token

code
// src/auth/auth.service.ts

async refreshToken(oldRefreshToken: string): Promise<LoginResponse> {
  // 1. Verifikasi signature token lama
  const payload = await this.jwtService.verifyAsync(oldRefreshToken, {
    secret: this.configService.get<string>('JWT_REFRESH_SECRET'),
  });

  // 2. Ambil data user
  const user = await this.prismaService.user.findUnique({
    where: { id: payload.userId },
  });

  // 3. CEK KEAMANAN: Deteksi reuse token
  if (user.refreshToken !== oldRefreshToken) {
    this.logger.warn(`Refresh token mismatch for user ${user.email}`);
    throw new UnauthorizedException('Refresh token mismatch');
  }

  // 4. Generate access & refresh token baru (rotation)
  // ...
}

Pendekatan ini:

  • Mendeteksi token reuse attack
  • Mengamankan sesi user
  • Mengikuti praktik keamanan level enterprise

3. Type Safety dengan Prisma & Zod

TypeScript memang kuat, tapi validasi runtime tetap wajib.

Nest-Zero menggabungkan:

  • Prisma ORM untuk type safety di database
  • Zod untuk validasi request

Alih-alih memenuhi controller dengan logika validasi, semuanya ditangani oleh ValidationService.

Hasilnya:

  • Type safety dari database sampai response API
  • Controller lebih bersih
  • Bug runtime jauh berkurang

4. Siap Digunakan di Lingkungan Produksi

Selain fitur utama, Nest-Zero juga menyertakan hal-hal penting yang sering dianggap sepele.

Fitur Tambahan

  • Structured Logging

    • Menggunakan Winston
    • Format JSON
    • Siap dikirim ke Datadog / ELK
  • Security Headers

    • Helmet aktif secara default
    • Perlindungan dari XSS dan celah umum lainnya

Penutup

Nest-Zero bukan sekadar template.

Ini adalah kumpulan best practice backend yang saya pelajari dari membangun sistem yang scalable.

Fokuslah pada fitur produkmu, bukan pada boilerplate.

Nest-Zero saya bagikan sebagai proyek open-source agar developer lain bisa membangun backend lebih cepat dan lebih aman.


🔗 Repository

👉 GitHub: https://github.com/kikukafandi/nest-zero

Jika kamu merasa ini bermanfaat, jangan lupa beri ⭐️ di GitHub.


Tag

#NestJS #TypeScript #OpenSource #BackendDevelopment #WebSecurity

Tags

Engineering NestJS TypeScript OpenSource BackendDevelopment WebSecurity

Enjoyed this article?

Check out more writings

Back to Overview