D5 · NestJS ↔ Spring Boot Comparison: After finishing D1-D4 a Java developer notices: unlike Express, Nest is an **almost direct TypeScript translation** of Spring — `@Module` ≈
After finishing D1-D4 a Java developer notices: unlike Express, Nest is an **almost direct TypeScript translation** of Spring — `@Module` ≈ `@Configuration`, `@Controller`/`@Get` ≈ `@RestController`/`@GetMapping`, DTO+`class-validator`+`ValidationPipe` ≈ Bean Validation+`@Valid`, Exception Filter ≈ `@RestControllerAdvice`, constructor injection ≈ Spring's DI. After seeing all three frameworks, which question should you ask? Not "which is better" — but **"which discipline level is right for this project's team and scale"**. For a small microservice/prototype, Express's freedom turns into speed; in a large, multi-person team, the structure Nest (and Spring) impose provides "everyone looks in the same place" consistency — this is the natural continuation of C6's "whose responsibility is this bug" question. The practical takeaway for a Java developer: moving to Nest requires far less "mindset shift" than moving to Express because classes, decorators, and DI are already FAMILIAR concepts — but as you saw in both, the gap between "WRITING a decorator/annotation" and that decorator/annotation being "REALLY active" (global pipe/filter registration, module registration) is exactly what a tester must verify.
Three Frameworks, One Contract (Again)
🎬 A Java Developer Feels at Home in Nest
Spring: @Controller/@Service
Nest: @Controller/@Injectable
Express: function chain
"Is it registered?" is always asked
A Java developer is already used to Spring's `@Controller`, `@Service`, `@Valid` concepts.
Moving to Nest, they see the SAME concepts under decorator names — `@Controller`, `@Injectable`, `@Body()` — the mindset distance is VERY SHORT.
Moving to Express, they meet the "build everything by hand" philosophy — the mindset distance is LONGER (middleware order, manually read validation).
But there is a repeating pattern across ALL three frameworks: a gap between "writing" and "really being active".
The lesson — regardless of framework, a tester always asks "is this safeguard/rule REALLY registered/triggered?"; they trust BEHAVIOR, not syntax.
Comparing the "Registration" Concept Across Three Frameworks
Component scan finds classes automatically — you usually do not need to add them to an array by hand.