Node.js / NestJS

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

Event loop, blocking I/O, profiling, memory leaks, āļāļēāļĢ optimize query, āļāļēāļĢāļšāļĩāļšāļ­āļąāļ”, clustering, worker threads, load balancing, āļāļēāļĢ caching āđ€āļŠāļīāļ‡āļāļĨāļĒāļļāļ—āļ˜āđŒ (Redis + HTTP), AWS (ECS, Lambda), serverless, āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢ deploy (blue/green, canary)

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

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ”āļ—āļĩāđˆāļŠāđˆāļ§āļĒāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢ deploy container NestJS āđƒāļ™ AWS ECS?

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

āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢ deploy container NestJS āļšāļ™ ECS: āđƒāļŠāđ‰ multi-stage Docker builds āđ€āļžāļ·āđˆāļ­āļĨāļ”āļ‚āļ™āļēāļ” image āļŠāļļāļ”āļ—āđ‰āļēāļĒ (build stage + production stage āđāļšāļš minimal), āđƒāļŠāđ‰ Docker layer caching āđ€āļžāļ·āđˆāļ­āđ€āļĢāđˆāļ‡āļāļēāļĢ build, āđƒāļŠāđ‰ ECR (Elastic Container Registry) āđƒāļ™ region āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ€āļžāļ·āđˆāļ­āļĨāļ” latency, āļ•āļąāđ‰āļ‡āļ„āđˆāļē health checks āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄ, āđƒāļŠāđ‰ Fargate āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™, āļāļģāļŦāļ™āļ” resource limits (CPU/memory) āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄ, āļ—āļģ graceful shutdown āļŠāļģāļŦāļĢāļąāļš SIGTERM āļ­āļīāļĄāđ€āļĄāļˆ Node.js alpine āļ—āļĩāđˆ optimize āđāļĨāđ‰āļ§āļ­āļēāļˆāļĄāļĩāļ‚āļ™āļēāļ” <100MB āđ€āļ—āļĩāļĒāļšāļāļąāļš >1GB āļ—āļĩāđˆāđ„āļĄāđˆāđ„āļ”āđ‰ optimize

2

āđ€āļŸāļŠāļŦāļĨāļąāļāļ‚āļ­āļ‡ event loop āđƒāļ™ Node.js āļĄāļĩāļ­āļ°āđ„āļĢāļšāđ‰āļēāļ‡?

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

event loop āļ‚āļ­āļ‡ Node.js āļĄāļĩ 6 āđ€āļŸāļŠāļŦāļĨāļąāļ: timers (setTimeout/setInterval), pending callbacks (I/O callback āļ—āļĩāđˆāļ–āļđāļāđ€āļĨāļ·āđˆāļ­āļ™), idle/prepare (āļ āļēāļĒāđƒāļ™), poll (āļ”āļķāļ‡ event I/O āđƒāļŦāļĄāđˆ), check (setImmediate) āđāļĨāļ° close callbacks āđāļ•āđˆāļĨāļ°āđ€āļŸāļŠāļĄāļĩ queue āđāļšāļš FIFO āļ‚āļ­āļ‡ callback āļ—āļĩāđˆāļˆāļ°āļĢāļąāļ™ āđ€āļŸāļŠ poll āļŠāļģāļ„āļąāļāļ—āļĩāđˆāļŠāļļāļ”āđ€āļžāļĢāļēāļ°āļˆāļąāļ”āļāļēāļĢ event I/O

3

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļšāļĨāđ‡āļ­āļ (blocking I/O) āđƒāļ™ Node.js āļŠāđˆāļ‡āļœāļĨāļāļĢāļ°āļ—āļšāļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

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

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļšāļĨāđ‡āļ­āļāđƒāļ™ Node.js āļˆāļ°āļšāļĨāđ‡āļ­āļ event loop āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļ—āļģāđƒāļŦāđ‰āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ­āļ·āđˆāļ™āđ† āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđ„āļ”āđ‰ āļŠāļīāđˆāļ‡āļ™āļĩāđ‰āļ—āļģāđƒāļŦāđ‰āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļĨāļ”āļĨāļ‡āļ­āļĒāđˆāļēāļ‡āļĄāļēāļāđ€āļžāļĢāļēāļ° Node.js āđ€āļ›āđ‡āļ™āđāļšāļš single-thread āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļš synchronous āđ€āļŠāđˆāļ™ fs.readFileSync, crypto.pbkdf2Sync āļŦāļĢāļ·āļ­ loop āļ—āļĩāđˆāļŦāļ™āļąāļāļˆāļ°āļšāļĨāđ‡āļ­āļ thread āļŦāļĨāļąāļ āļ„āļ§āļĢāđƒāļŠāđ‰āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ asynchronous āđ€āļŠāļĄāļ­ āļŦāļĢāļ·āļ­āļĄāļ­āļšāļŦāļĄāļēāļĒāđƒāļŦāđ‰ worker threads

4

āļˆāļ°āļĢāļ°āļšāļļ memory leak āđƒāļ™āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ Node.js āļšāļ™ production āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

5

āļ„āļ§āļĢāđƒāļŠāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđƒāļ”āđƒāļ™āļāļēāļĢ profiling āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž CPU āļ‚āļ­āļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ NestJS?

+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
30 āļ„āļģāļ–āļēāļĄ

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

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

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

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

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