βοΈ Backend Architecture β
Structuring backend applications for reliability and scalability.
Project structure β
src/
βββ modules/
β βββ auth/
β β βββ auth.controller.ts
β β βββ auth.service.ts
β β βββ auth.repository.ts
β β βββ auth.types.ts
β βββ users/
β βββ orders/
βββ shared/
β βββ middleware/
β βββ errors/
β βββ utils/
β βββ types/
βββ config/
β βββ database.ts
β βββ env.ts
β βββ logger.ts
βββ server.tsLayer responsibilities β
| Layer | Does | Doesn't |
|---|---|---|
| Controller | Parse request, validate input, return response | Business logic, DB queries |
| Service | Business logic, orchestration | HTTP concerns, direct DB access |
| Repository | Data access, queries | Business logic, HTTP |
Authentication patterns β
| Pattern | Best for |
|---|---|
| JWT (stateless) | APIs, mobile apps, microservices |
| Session (stateful) | Traditional web apps, SSR |
| OAuth2 / OIDC | Third-party login, SSO |
| API keys | Service-to-service, public APIs |
Middleware pipeline β
Request β Rate Limit β Auth β Validation β Handler β Error Handler β ResponseLogging β
- Use structured logging (JSON)
- Include request ID for tracing
- Log levels:
error,warn,info,debug - Log at boundaries: incoming request, outgoing response, external calls
- Never log sensitive data (passwords, tokens, PII)
Health checks β
GET /health β 200 { status: 'ok' }
GET /health/ready β 200 { db: 'ok', cache: 'ok', queue: 'ok' }Graceful shutdown β
- Stop accepting new requests
- Finish in-flight requests (with timeout)
- Close database connections
- Close message queue connections
- Exit process