Persiapan lengkap sebelum series dimulai: skill dasar TypeScript Go PHP, konsep interface struct abstract class, instalasi Node.js NestJS CLI, Go Fiber, PHP Laravel, PostgreSQL — dan scaffold tiga project hello-world sebagai lab perbandingan sepanjang series

Series ini punya format yang tidak biasa: setiap konsep arsitektur akan diimplementasikan paralel di tiga framework — NestJS (TypeScript), Fiber (Go), dan Laravel (PHP). Tujuannya bukan membuat kalian menguasai tiga bahasa sekaligus, melainkan menunjukkan bahwa pola arsitektur adalah bahasa-agnostik: Strategy di TypeScript dan Strategy di Go adalah ide yang sama dengan sintaks berbeda.
Episode persiapan ini memastikan tiga lab siap berjalan. Pilih satu stack sebagai fokus utama kalian, namun tetap ikuti perbandingannya — justru di perbedaan idiom itulah pemahaman pattern menguat.
Minimal nyaman di salah satu: TypeScript, Go, atau PHP. Yang wajib dipahami dari bahasa pilihan kalian:
| Konsep | TypeScript | Go | PHP |
|---|---|---|---|
| Kontrak/interface | interface / type | interface (implisit) | interface |
| Struktur data | class, object literal | struct | class (+ readonly properties) |
| Abstraksi | abstract class | embedding + interface | abstract class |
| Package manager | npm/pnpm | go modules | Composer |
Series ini sering menyentuh layer HTTP (controller/handler) dan persistence (repository/ORM). Pastikan kalian paham: request/response cycle, status code, JSON serialization, dan CRUD via ORM apa pun (Prisma/TypeORM, GORM, atau Eloquent).
Note
Dasar OOP membantu besar untuk episode 2–8. Jika belum mantap, pelajari dulu series oop — terutama interface, inheritance, dan polymorphism.
node --version # Node.js 20+ (NestJS 11+)
go version # Go 1.24+
php --version # PHP 8.3+ (Laravel 12)
composer --versionnpm i -g @nestjs/cli # nest new <nama>Database bersama: PostgreSQL — paling mudah via Docker (docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=dev postgres:16). Git wajib terinstall; kita akan commit tiap episode.
Target outline: scaffold 3 project hello-world sebagai lab perbandingan sepanjang series.
mkdir -p ~/labs/arch-series && cd ~/labs/arch-series
nest new lab-nestjs # NestJS 11+, pilih npm
cd lab-nestjs && nest generate resource orders --type rest --crud && cd ..
mkdir lab-fiber && cd lab-fiber
go mod init lab-fiber
cat > main.go <<'EOF'
package main
import "github.com/gofiber/fiber/v2"
func main() {
app := fiber.New()
app.Get("/orders", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"message": "hello fiber"})
})
app.Listen(":3001")
}
EOF
go mod tidy && go run main.go & # test: curl localhost:3001/orders
cd ..
laravel new lab-laravel # Laravel 12, pilih Pest saat ditanyaStruktur akhir yang disarankan:
~/labs/arch-series/
├── lab-nestjs/ # TypeScript - DI container bawaan, decorator
├── lab-fiber/ # Go - eksplisit, wiring manual
└── lab-laravel/ # PHP - service container, EloquentTip
Commit awal ketiga repo dengan pesan "ep00: scaffold". Setiap episode berikutnya adalah satu commit — riwayatnya sendiri menjadi dokumentasi evolusi arsitektur.
Rangkuman episode ini:
Episode 1 kita mulai dari fondasi konseptual: apa bedanya architecture vs design pattern, kenapa coupling & cohesion menentukan umur kode, dan bagaimana technical debt terbentuk — dibedahkan langsung pada satu codebase nyata. Sampai jumpa!