Node.js / NestJS

āđ„āļĄāđ‚āļ„āļĢāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ

Monolith vs modular monolith vs microservices, message patterns, transporters (TCP, Redis, NATS, RabbitMQ, Kafka), āļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢ (sync/async, event-driven), CQRS, event sourcing, client/server

30 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒÂ·
Senior
1

Modular monolith āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

Modular monolith āļ„āļ·āļ­āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāđˆ deploy āđ€āļ›āđ‡āļ™āļŦāļ™āđˆāļ§āļĒāđ€āļ”āļĩāļĒāļ§āđāļ•āđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ€āļ›āđ‡āļ™āđ‚āļĄāļ”āļđāļĨāļ—āļĩāđˆ decoupled āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™āļžāļĢāđ‰āļ­āļĄ boundaries āļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™ āļ•āđˆāļēāļ‡āļˆāļēāļ monolith āđāļšāļšāļ”āļąāđ‰āļ‡āđ€āļ”āļīāļĄāļ—āļĩāđˆāļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļ›āļ°āļ›āļ™āļāļąāļ™ modular monolith āļˆāļąāļ”āļĢāļ°āđ€āļšāļĩāļĒāļšāđ‚āļ„āđ‰āļ”āđ€āļ›āđ‡āļ™āđ‚āļĄāļ”āļđāļĨāļ­āļīāļŠāļĢāļ°āļ—āļĩāđˆāļŠāļ·āđˆāļ­āļŠāļēāļĢāļœāđˆāļēāļ™ interface āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ„āļ§āđ‰āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™ āđāļ™āļ§āļ—āļēāļ‡āļ™āļĩāđ‰āļœāļŠāļēāļ™āļ„āļ§āļēāļĄāđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒāļ‚āļ­āļ‡ monolith (deploy āđ€āļ”āļĩāļĒāļ§, transaction ACID āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒ) āđ€āļ‚āđ‰āļēāļāļąāļšāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļēāļ‚āļ­āļ‡ microservices (āļāļēāļĢāđāļĒāļāļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļš, boundaries āļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™)

2

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļŦāļĨāļąāļāļĢāļ°āļŦāļ§āđˆāļēāļ‡ monolith āđāļĨāļ° microservices āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļŦāļĨāļąāļāļ­āļĒāļđāđˆāļ—āļĩāđˆāļāļēāļĢ deploy āđāļĨāļ°āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļ­āļīāļŠāļĢāļ°: monolith āļ–āļđāļ deploy āđ€āļ›āđ‡āļ™āļŦāļ™āđˆāļ§āļĒāđ€āļ”āļĩāļĒāļ§āļ—āļĩāđˆāļ—āļļāļāļ„āļ­āļĄāđ‚āļžāđ€āļ™āļ™āļ•āđŒāđƒāļŠāđ‰ process āđāļĨāļ°āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļĢāđˆāļ§āļĄāļāļąāļ™ āļ‚āļ“āļ°āļ—āļĩāđˆ microservices āđ€āļ›āđ‡āļ™āļšāļĢāļīāļāļēāļĢāļ­āļīāļŠāļĢāļ°āļ—āļĩāđˆ deploy āđāļĒāļāļāļąāļ™āļžāļĢāđ‰āļ­āļĄāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļ•āļąāļ§āđ€āļ­āļ‡ monolith āđƒāļŦāđ‰āļ„āļ§āļēāļĄāđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒāđāļĨāļ° transaction ACID āļ—āļĩāđˆāļ‡āđˆāļēāļĒ āđāļ•āđˆāđ€āļœāļŠāļīāļāļ›āļąāļāļŦāļēāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ‚āļĒāļēāļĒāđāļĨāļ°āļāļēāļĢāļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļēāđƒāļ™āļĢāļ°āļ”āļąāļšāđƒāļŦāļāđˆ microservices āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ‚āļĒāļēāļĒāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ°āđāļĨāļ° deploy āđāļšāļšāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđāļ•āđˆāļ™āļģāļĄāļēāļ‹āļķāđˆāļ‡āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđāļšāļšāļāļĢāļ°āļˆāļēāļĒ

3

message pattern āđƒāļ™ NestJS Microservices āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

message pattern āđƒāļ™ NestJS āļāļģāļŦāļ™āļ”āđ‚āļŦāļĄāļ”āļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡ microservices āļĄāļĩāļŠāļ­āļ‡āļ›āļĢāļ°āđ€āļ āļ—āļŦāļĨāļąāļ: request-response (āđāļšāļš synchronous āļ—āļĩāđˆāļĢāļ­āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļš) āđāļĨāļ° event-based (āđāļšāļš asynchronous āļ—āļĩāđˆāđ„āļĄāđˆāļĢāļ­āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļš) decorator @MessagePattern() āļāļģāļŦāļ™āļ” handler āļŠāļģāļŦāļĢāļąāļš request-response āļ‚āļ“āļ°āļ—āļĩāđˆ @EventPattern() āļˆāļąāļ”āļāļēāļĢ event āđāļšāļš asynchronous āļāļēāļĢāđ€āļĨāļ·āļ­āļ pattern āļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāļāļĢāļ“āļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™: request-response āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļšāļ—āļąāļ™āļ—āļĩ, event-based āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āđāļĨāļ° eventual consistency

4

transporter āđƒāļ™ NestJS Microservices āļĄāļĩāļšāļ—āļšāļēāļ—āļ­āļ°āđ„āļĢ?

5

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ @MessagePattern() āđāļĨāļ° @EventPattern() āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

+27 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Node.js / NestJS āļ­āļ·āđˆāļ™āđ†

āļžāļ·āđ‰āļ™āļāļēāļ™ Node.js

Junior
20 āļ„āļģāļ–āļēāļĄ

Core API āļ‚āļ­āļ‡ Node.js

Junior
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠ

Junior
25 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ Express.js

Junior
20 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ NestJS

Junior
23 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļ­āļāđāļšāļš REST API

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āđāļĨāļ° DTO

Junior
20 āļ„āļģāļ–āļēāļĄ

āđ€āļ­āļāļŠāļēāļĢ API āđāļĨāļ° Contract

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŦāļ™āđˆāļ§āļĒ (Unit Testing)

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļ•āļēāļĢāļēāļ‡āļ‡āļēāļ™

Junior
15 āļ„āļģāļ–āļēāļĄ

Module āđāļĨāļ° DI āļ‚āļ­āļ‡ NestJS

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™āļ”āđ‰āļ§āļĒ JWT

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒāđāļĨāļ° RBAC

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ”āđ‰āļ§āļĒ TypeORM

Mid-Level
30 āļ„āļģāļ–āļēāļĄ

Prisma ORM

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

Middleware āđāļĨāļ° Interceptor

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒ

Mid-Level
15 āļ„āļģāļ–āļēāļĄ

WebSockets

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

GraphQL āļāļąāļš NestJS

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđāļšāļš End-to-End

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđāļ„āļŠāļ”āđ‰āļ§āļĒ Redis

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļ„āļīāļ§āļ”āđ‰āļ§āļĒ Bull

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

DevOps, Logging āđāļĨāļ° CI/CD

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

Docker āđāļĨāļ° Containerization

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āđāļ™āļ§āļ—āļēāļ‡āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ

Senior
25 āļ„āļģāļ–āļēāļĄ

āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļāļēāļĢ Deploy āļšāļ™ Cloud

Senior
30 āļ„āļģāļ–āļēāļĄ

āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļ Node.js / NestJS āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ›

āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ„āļģāļ–āļēāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ” flashcards āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„ āđāļšāļšāļāļķāļāļŦāļąāļ” code review āđāļĨāļ°āļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āđ€āļĢāļīāđˆāļĄāđƒāļŠāđ‰āļŸāļĢāļĩ