Áreas de Conhecimento
Desenvolvimento Frontend
HTML & CSS
HTML5 Avançado
A linguagem de marcação que estrutura o conteúdo web
- Estrutura semântica (header, nav, section, article, footer)
- Formulários avançados e validação nativa
- APIs do HTML5 (Canvas, SVG, Web Storage, Web Workers)
- Atributos de dados personalizados (data-*)
- Armazenamento local e sessão
- SEO estrutural e metadados
- Acessibilidade (ARIA, WAI-ARIA, WCAG 2.1)
CSS Moderno
Estilização avançada para layouts modernos
- Box model avançado
- Flexbox para layouts unidimensionais
- Grid para layouts bidimensionais complexos
- CSS Custom Properties (variáveis)
- Media queries e design responsivo
- Animações e transições
- Transformações 2D e 3D
- Seletores avançados e pseudo-elementos
Pré-processadores CSS
Extensões para tornar o CSS mais poderoso
- SASS/SCSS
- Variáveis e escopo
- Mixins e funções
- Aninhamento e herança (@extend)
- Partials e modularização
- Operadores e cálculos
- Less
- Variáveis e mixins
- Funções e operações
- Importação de módulos
- PostCSS
- Plugins e extensibilidade
- Autoprefixer e cssnano
- Integração com ferramentas modernas
Frameworks CSS
Bibliotecas de utilidades e componentes visuais
- Tailwind CSS
- Abordagem utility-first
- Customização e configuração
- JIT (Just-In-Time) Compiler
- Plugins e extensões
- Bootstrap 5
- Sistema de grid e flexbox
- Componentes prontos
- Customização via Sass
- JavaScript integrado
- Material UI e outros sistemas de design
- CSS-in-JS (Styled-components, Emotion)
Domine o CSS vanilla (especialmente Flexbox e Grid) antes de se aprofundar em frameworks CSS. Isso lhe dará uma base sólida para entender como as ferramentas funcionam internamente.
JavaScript
JavaScript Fundamental
Base da programação web moderna
- Sintaxe, tipos de dados e estruturas de dados
- Funções e escopo
- Arrow functions
- Closures
- Higher-order functions
- Objetos e protótipos
- This, bind, call e apply
- Contexto de execução e pilha de chamadas
- Manipulação de eventos
- Tratamento de erros (try/catch)
JavaScript Moderno (ES6+)
Recursos avançados e padrões modernos
- Let, const e escopo de bloco
- Template literals e interpolação
- Desestruturação e spread operator
- Parâmetros padrão e rest
- Classes e herança
- Módulos (import/export)
- Promessas e async/await
- Generators e iterators
- Map, Set, WeakMap, WeakSet
- Proxy e Reflect
DOM e APIs Web
Interação com elementos HTML e recursos do navegador
- Manipulação do DOM
- Seletores e traversing
- Modificação de elementos
- Eventos e delegação
- Fetch API e AJAX
- APIs modernas:
- LocalStorage e SessionStorage
- Geolocation API
- Web Workers
- Service Workers e PWAs
- WebSockets
- Canvas e WebGL
- File API e Drag & Drop
Padrões de Design JavaScript
Padrões para organizar e escalar código
- Programação Funcional
- Imutabilidade
- Funções puras
- Composição de funções
- Recursividade
- Padrões de design
- Module e Revealing Module
- Factory e Constructor
- Singleton
- Observer e Pub/Sub
- MVC, MVP e MVVM
- Gerenciamento de estado
- Otimização de performance
JavaScript é uma linguagem com muitas peculiaridades. Certifique-se de compreender conceitos como hoisting, coerção de tipos, prototype chain e escopo de execução para evitar bugs difíceis de depurar.
TypeScript
Fundamentos do TypeScript
Tipagem estática para JavaScript
- Tipos básicos e anotações
- Interfaces e type aliases
- Enums e tuplas
- Union e intersection types
- Configuração do compilador (tsconfig.json)
- Migração gradual de JavaScript para TypeScript
TypeScript Avançado
Recursos avançados do sistema de tipos
- Generics
- Funções e classes genéricas
- Constraints em generics
- Utility types
- Decorators
- Class decorators
- Method decorators
- Property decorators
- Type Guards e Type Narrowing
- Mapped Types e Conditional Types
- Template Literal Types
- Declaration merging
- Namespace e módulos
TypeScript com Frameworks
Integrando TypeScript com bibliotecas populares
- React com TypeScript
- Props tipadas e generics
- Tipagem de hooks
- Context API tipada
- Tipagem de eventos
- Vue com TypeScript
- Node.js com TypeScript
- Tipando bibliotecas de terceiros
- Criando arquivos de declaração (.d.ts)
- Ferramentas como TSDoc
TypeScript não é apenas sobre adicionar tipos; é uma ferramenta poderosa para documentar seu código, prevenir bugs e melhorar a produtividade da equipe. Invista tempo em aprender suas capacidades mais avançadas.
Ferramentas de Desenvolvimento
Gerenciamento de Pacotes
Ferramentas para gerenciar dependências
- npm
- package.json e estrutura
- Configuração e scripts
- Semver e versionamento
- Publicação de pacotes
- workspaces e monorepos
- Yarn
- Plug'n'Play e Zero-installs
- Workspaces
- Resolução de conflitos
- pnpm
- Estrutura de hard links
- Economia de espaço em disco
- Monorepos com pnpm
Build Tools & Bundlers
Ferramentas para otimização e empacotamento
- Webpack
- Configuração e loaders
- Code splitting e lazy loading
- Tree shaking
- Hot Module Replacement
- Vite
- ESM nativo para desenvolvimento
- Configuração simplificada
- Plugins e integração
- Rollup
- Foco em bibliotecas
- Tree shaking eficiente
- ESBuild e SWC
- Bundlers escritos em Go/Rust
- Performance extrema
- Babel
- Transpilação de JavaScript
- Presets e plugins
- Polyfills
Linters & Formatters
Ferramentas para padronização de código
- ESLint
- Configuração e regras
- Plugins e extensões
- Integração com editores
- Configurações populares (Airbnb, Standard)
- Prettier
- Formatação automática
- Integração com ESLint
- Configuração personalizada
- TypeScript Compiler (tsc)
- Configuração avançada
- Verificação de tipos estrita
- StyleLint para CSS/SCSS
Controle de Versão
Ferramentas para colaboração e histórico de código
- Git
- Comandos básicos e avançados
- Branching e merging
- Resolução de conflitos
- Rebase, cherry-pick, bisect
- Git hooks
- Plataformas
- GitHub
- GitLab
- Bitbucket
- Fluxos de trabalho
- GitFlow
- GitHub Flow
- Trunk-based development
- Semantic Versioning
- Conventional Commits
Invista tempo configurando seu ambiente de desenvolvimento. Um bom setup com ESLint, Prettier, TypeScript e um bom bundler irá economizar horas de depuração e refatoração no futuro.
Frameworks & Bibliotecas Frontend
React
Biblioteca para construção de interfaces
- Fundamentos
- Virtual DOM e reconciliação
- JSX e elementos
- Componentes e props
- State e lifecycle
- Hooks
- useState, useEffect, useRef
- useContext, useReducer
- useMemo, useCallback
- Hooks personalizados
- Padrões avançados
- Render props
- Higher-Order Components
- Context API
- Error boundaries
- Portals e Fragments
- Suspense e lazy loading
Ecossistema React
Bibliotecas e ferramentas complementares
- Roteamento
- React Router
- TanStack Router
- Gerenciamento de Estado
- Redux e Redux Toolkit
- Zustand
- Jotai/Recoil
- MobX
- Context API + useReducer
- Formulários
- React Hook Form
- Formik
- Final Form
- Consulta de dados
- React Query
- SWR
- Apollo Client (GraphQL)
- Relay (GraphQL)
- Testes
- React Testing Library
- Jest
- Cypress
Next.js
Framework React para aplicações web
- Fundamentos
- Pages e API Routes
- App Router vs Pages Router
- Layouts e templates
- Middleware
- Renderização
- Server-Side Rendering (SSR)
- Static Site Generation (SSG)
- Incremental Static Regeneration (ISR)
- Client-side rendering
- Server Components vs Client Components
- Features avançadas
- Data fetching (getServerSideProps, getStaticProps)
- Image Optimization
- Internationalization
- Authentication
- Dynamic imports
- Edge Functions
Alternativas ao React
Outras bibliotecas e frameworks
- Vue.js
- Composition API e Options API
- Single File Components
- Vuex e Pinia (gerenciamento de estado)
- Vue Router
- Nuxt.js (framework Vue)
- Angular
- Framework completo com TypeScript
- RxJS e programação reativa
- Sistema de módulos e DI
- Angular CLI e ferramentas
- Angular Universal (SSR)
- Svelte
- Compilação em tempo de build
- Reatividade sem Virtual DOM
- SvelteKit (framework full-stack)
- Store para gerenciamento de estado
- Solid.js
- Inspirado em React, mas com performance superior
- Reatividade granular
- Padrões similares ao React (JSX, Hooks)
Não tente aprender vários frameworks simultaneamente. Escolha um (React é uma boa opção por sua popularidade) e aprenda-o profundamente antes de expandir para outros.
Desenvolvimento Backend
Node.js
Fundamentos do Node.js
Runtime JavaScript baseado no V8
- Arquitetura e Event Loop
- Single-threaded e assíncrono
- Event Loop e fases
- Libuv e I/O não bloqueante
- Worker threads
- Módulos e sistema de pacotes
- CommonJS vs ESM
- Criação de módulos
- npm e package.json
- Módulos nativos essenciais
- fs (sistema de arquivos)
- path (manipulação de caminhos)
- http/https (servidores web)
- stream (streaming de dados)
- buffer (manipulação binária)
- events (emissores de eventos)
- util e outros utilitários
Programação Assíncrona
Padrões para operações não-bloqueantes
- Callbacks e callback hell
- Promises
- Criação e encadeamento
- Promise.all, Promise.race, Promise.allSettled
- Error handling
- Async/Await
- Top-level await
- Try/catch e error handling
- Execução paralela vs sequencial
- Streams
- Readable, Writable, Transform
- Pipe e pipeline
- Backpressure
- Events e EventEmitter
Desenvolvimento Avançado
Tópicos para aplicações robustas
- Performance e otimização
- Profiling e diagnóstico
- Memory leaks
- CPU-bound vs I/O-bound
- Cluster module
- PM2 e gestão de processos
- Debugging
- Chrome DevTools Inspector
- Node.js Debugger
- Inspeção remota
- Segurança
- Práticas seguras
- Dependências seguras
- Validação e sanitização
- Vulnerabilidades comuns
- Testabilidade
- Testes unitários
- Testes de integração
- Mocking e stubbing
Ferramentas e Ecossistema
Bibliotecas e ferramentas essenciais
- Bibliotecas utilitárias
- Lodash/Underscore
- date-fns/moment
- axios/got/node-fetch
- Processamento
- Child processes
- Worker threads
- Bibliotecas de paralelismo
- Templating engines
- EJS, Pug, Handlebars
- Logging e monitoramento
- Winston, Pino
- Sentry, New Relic
- Ambientes e configuração
- dotenv, config
- cross-env
Entender profundamente o modelo de execução assíncrona e o Event Loop do Node.js é crucial para desenvolver aplicações eficientes e evitar problemas de performance.
Frameworks Backend
Express.js
Framework web minimalista para Node.js
- Fundamentos
- Roteamento
- Middleware
- Request e Response
- Error handling
- Middleware essenciais
- body-parser
- cors
- compression
- helmet
- morgan
- Organização de código
- Estrutura de pastas
- Models, Views, Controllers
- Roteadores
- Serviços
- Integração com banco de dados
- Template engines
NestJS
Framework progressivo para aplicações escaláveis
- Arquitetura
- Módulos
- Controladores
- Providers e Serviços
- Injeção de dependências
- Decorators
- Class decorators
- Method decorators
- Parameter decorators
- Custom decorators
- Features avançadas
- DTOs e validação
- Pipes, Guards, Interceptors
- Exceções e filters
- Microserviços
- GraphQL
- WebSockets
- Testing
- Unit testing
- E2E testing
- Test fixtures
Alternativas Node.js
Outros frameworks populares
- Fastify
- Foco em performance
- Validação de esquema integrada
- Sistema de plugins
- TypeScript support
- Koa.js
- Successor espiritual do Express
- Middleware cascading
- Suporte nativo a async/await
- Hapi.js
- Framework enterprise-focused
- Configuração sobre código
- Validação, autenticação integradas
- Adonis.js
- Framework full-stack inspirado no Laravel
- ORM integrado
- Auth, validação e mais built-in
Outras Linguagens Backend
Alternativas ao Node.js
- Python
- Django (framework full-stack)
- FastAPI (API modernas e rápidas)
- Flask (microframework)
- Java
- Spring Boot
- Quarkus
- Micronaut
- Go
- Gin
- Echo
- Fiber
- Ruby on Rails
- PHP (Laravel, Symfony)
- C# (.NET Core)
- Rust (Actix, Rocket)
Frameworks diferentes são otimizados para diferentes casos de uso. Express é ótimo para APIs simples e prototipagem, enquanto NestJS é melhor para aplicações empresariais complexas.
Autenticação & Segurança
Autenticação
Sistemas para identificação de usuários
- Métodos de autenticação
- Baseada em tokens (JWT)
- Sessões e cookies
- API Keys
- OAuth 2.0 / OpenID Connect
- Autenticação multifator (MFA)
- Autenticação passwordless
- JWT (JSON Web Tokens)
- Estrutura e payload
- Assinatura e verificação
- Refresh tokens
- Armazenamento seguro
- Revogação
- Bibliotecas e ferramentas
- Passport.js
- Auth0 / Supabase Auth
- jsonwebtoken
- express-session
Autorização
Controle de acesso a recursos
- Modelos de controle de acesso
- Role-Based Access Control (RBAC)
- Attribute-Based Access Control (ABAC)
- Policy-Based Access Control
- Controle de acesso granular
- Implementação
- Middleware de autorização
- Verificação de permissões
- Decoradores/anotações de acesso
- Ferramentas
- CASL
- accesscontrol
- OSO
- Permify
Segurança Web
Proteção contra vulnerabilidades
- OWASP Top 10
- Injection (SQL, NoSQL, command)
- Broken Authentication
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
- Security Misconfigurations
- Headers de segurança
- Content Security Policy (CSP)
- CORS (Cross-Origin Resource Sharing)
- HSTS (HTTP Strict Transport Security)
- X-XSS-Protection
- X-Content-Type-Options
- Técnicas de proteção
- Input validation e sanitization
- Parametrização de queries
- Escape de output
- Rate limiting
- Logging e auditoria
Criptografia e Gerenciamento de Dados
Proteção de dados sensíveis
- Hashing
- Bcrypt, Argon2, Scrypt
- Salt e fatores de trabalho
- Hash de senhas
- Criptografia
- Simétrica vs Assimétrica
- AES, RSA
- Gerenciamento de chaves
- Criptografia em trânsito e em repouso
- Compliance e regulamentações
- GDPR (Europa)
- LGPD (Brasil)
- CCPA (Califórnia)
- PCI DSS (Pagamentos)
A segurança deve ser uma preocupação desde o início do desenvolvimento, não algo adicionado posteriormente. Nunca implemente seus próprios algoritmos criptográficos - use bibliotecas testadas e mantidas pela comunidade.
Desenvolvimento de APIs
RESTful APIs
Interfaces de Programação de Aplicações baseadas em REST
- Princípios REST
- Recursos e URIs
- Métodos HTTP (GET, POST, PUT, DELETE)
- Stateless
- HATEOAS
- Design de APIs
- Consistência e convenções
- Versionamento de APIs
- Paginação e filtragem
- Status codes HTTP
- Formatos de resposta
- Documentação
- OpenAPI/Swagger
- API Blueprint
- RAML
- Ferramentas de documentação
- Testing
- Testes unitários
- Testes de integração
- Testes de contrato
- Ferramentas como Postman, Insomnia
GraphQL
Linguagem de consulta e manipulação para APIs
- Conceitos fundamentais
- Schema e tipos
- Queries e Mutations
- Resolvers
- Subscriptions
- Introspection
- Implementações no Node.js
- Apollo Server
- GraphQL Yoga
- TypeGraphQL
- Nexus
- Features avançadas
- Fragments
- Interfaces e Union Types
- Dataloaders (N+1 problem)
- Caching
- Federation
- Ferramentas
- GraphQL Playground/GraphiQL
- GraphQL Code Generator
- Apollo Studio
Tempo Real e WebSockets
Comunicação bidirecional em tempo real
- WebSockets
- Protocolos e handshake
- Implementação com ws/WebSocket
- Comunicação full-duplex
- Gerenciamento de conexões
- Socket.IO
- Eventos e namespaces
- Rooms e broadcasting
- Fallback para polling
- Escalabilidade com Redis adapter
- Alternativas
- SSE (Server-Sent Events)
- GraphQL Subscriptions
- Webhooks
- Long polling
- Casos de uso
- Chat e mensageria
- Jogos multiplayer
- Dashboards em tempo real
- Notificações push
Arquiteturas de API
Padrões para APIs escaláveis
- Microserviços
- Princípios e vantagens
- Comunicação entre serviços
- Gateway de API
- Discovery de serviços
- Serverless
- Funções como serviço (FaaS)
- Cold start e limites
- Composição de funções
- Plataformas (AWS Lambda, Vercel, Netlify)
- Event-Driven Architecture
- Mensageria e filas
- Publish/Subscribe
- Event sourcing
- CQRS
A escolha entre REST e GraphQL depende do caso de uso. REST é mais simples e amplamente adotado, enquanto GraphQL resolve problemas específicos como over-fetching e under-fetching.
Servidores Web
Fundamentos de Servidores Web
Conceitos e terminologia
- Como funcionam os servidores web
- Modelo de requisição-resposta
- Métodos HTTP e cabeçalhos
- Status codes
- Conexões persistentes
- HTTP/1.1 vs HTTP/2 vs HTTP/3
- Virtual hosts
- Web servers embutidos vs dedicados
Nginx
Servidor web de alta performance
- Instalação e configuração básica
- Arquitetura baseada em eventos
- Configuração de proxy reverso
- Balanceamento de carga
- Upstream servers
- Buffers e timeouts
- SSL/TLS e HTTPS
- Caching e compressão
- Location blocks e matching
- Redirecionamentos e rewrites
- Rate limiting
Apache
Servidor web tradicional e robusto
- Instalação e configuração
- Arquitetura baseada em processos/threads
- Virtual hosts
- Módulos e extensões
- .htaccess e configuração distribuída
- Configuração de SSL/TLS
- Rewrite rules
- Autenticação e autorização
Otimização e Deployment
Configurações para produção
- Configurações de segurança
- Headers de segurança
- SSL/TLS best practices
- Prevenção de ataques comuns
- Performance
- Compressão (gzip, Brotli)
- Caching e controle de cache
- HTTP/2 e HTTP/3
- Static file serving
- Proxy reverso e gateway
- Arquitetura de aplicação
- Balanceamento de carga
- Sticky sessions
- WebSockets proxying
- Monitoramento e logs
- Configuração de logs
- Análise de logs
- Health checks
Em produção, geralmente não é recomendado expor diretamente seu aplicativo Node.js à internet. Use um servidor web como Nginx como proxy reverso na frente da sua aplicação.
Bancos de Dados
Bancos Relacionais (SQL)
Fundamentos SQL
Linguagem para bancos de dados relacionais
- Estrutura e sintaxe
- DDL (CREATE, ALTER, DROP)
- DML (INSERT, UPDATE, DELETE)
- DQL (SELECT, JOIN, GROUP BY)
- DCL (GRANT, REVOKE)
- TCL (COMMIT, ROLLBACK)
- Modelagem relacional
- Tabelas e relações
- Chaves primárias e estrangeiras
- Normalização (1NF a 5NF)
- Índices e constraints
- Transações e ACID
- Consultas avançadas
- JOINs (INNER, LEFT, RIGHT, FULL)
- Subqueries e CTEs
- Window functions
- Funções agregadas
- Otimização de queries
PostgreSQL
Sistema de banco de dados relacional avançado
- Instalação e administração
- Setup e configuração
- pgAdmin e interfaces
- Roles e permissões
- Backups e restauração
- Features exclusivas
- Tipos de dados avançados (JSON, ARRAY, HSTORE)
- Herança de tabelas
- Extensões (PostGIS, TimescaleDB)
- Funções e procedimentos armazenados
- Triggers e rules
- Full-text search
- Performance
- EXPLAIN e plano de execução
- Indexação avançada
- Particionamento
- Configuração e tuning
MySQL / MariaDB
Sistemas de banco de dados relacionais populares
- Instalação e configuração
- Administração básica e ferramentas
- Engines de armazenamento
- InnoDB
- MyISAM
- Diferenças e casos de uso
- Replicação e alta disponibilidade
- Otimização de performance
- Índices e estratégias
- Query optimization
- Cache e buffers
- MariaDB vs MySQL
- Diferenças e vantagens
- Features adicionais
ORM (Object-Relational Mapping)
Integração de banco de dados com aplicações
- Conceitos ORM
- Mapeamento objeto-relacional
- Entity relationships
- Active Record vs Data Mapper
- Lazy loading vs Eager loading
- Migrações
- Prisma
- Schema e models
- Migrations
- CRUD e queries
- Relations e nested queries
- TypeORM
- Entities e decorators
- Repositories
- Relations e lazy loading
- Query builder
- Sequelize
- Models e instâncias
- Hooks e validação
- Associations
- Queries e finders
- Outros ORMs populares
- Knex.js (query builder)
- MikroORM
- Objection.js
Mesmo usando um ORM, é importante entender SQL e o funcionamento dos bancos de dados relacionais. Em cenários complexos ou de alta performance, você frequentemente precisará escrever SQL customizado.
Bancos Não-Relacionais (NoSQL)
Bancos de Documentos
MongoDB e similares
- MongoDB
- Instalação e configuração
- CRUD operations
- Esquema flexível
- Aggregation pipeline
- Índices e performance
- Transactions
- Sharding e replicação
- MongoDB Atlas (cloud)
- Mongoose (ODM)
- Schemas e models
- Validação
- Middleware/hooks
- Populate/references
- Queries e operations
- Firebase Firestore
- Document-collection model
- Real-time updates
- Security rules
- Queries e limitações
Bancos Chave-Valor
Redis e similares
- Redis
- Estruturas de dados: Strings, Lists, Sets, Hashes, Sorted Sets
- Persistência (RDB, AOF)
- Pub/Sub
- Transactions
- Lua scripting
- Expiração e TTL
- Clustering e sharding
- Casos de uso
- Caching
- Rate limiting
- Filas e messaging
- Leaderboards e contadores
- Session store
- Throttling e deduplicação
- Integrações
- Node.js clients (ioredis, node-redis)
- Redis Stack (RedisSearch, RedisJSON)
- Monitoramento e administração
Outros Tipos NoSQL
Bancos de colunas, grafos e mais
- Bancos de colunas
- Cassandra
- ScyllaDB
- Casos de uso: Big Data, séries temporais
- Bancos de grafos
- Neo4j
- Cypher Query Language
- Casos de uso: Redes sociais, recomendações, rotas
- Time-series databases
- InfluxDB
- TimescaleDB (extensão PostgreSQL)
- Casos de uso: IoT, métricas, monitoramento
- Bancos wide-column
- HBase
- Casos de uso: Análise de grandes volumes
Padrões de Uso NoSQL
Boas práticas e considerações
- Modelagem de dados
- Embedding vs referencing
- Desnormalização
- Modelagem orientada a consultas
- Schema design patterns
- Desafios e considerações
- Consistência eventual
- Transações
- ACID vs BASE
- Teorema CAP
- Escalabilidade
- Soluções multi-modelo
- ArangoDB
- FaunaDB
- CosmosDB (Azure)
Escolha o tipo de banco de dados com base nos requisitos do seu projeto, não nas tendências. Bancos NoSQL não são substitutos universais para bancos relacionais - cada tipo tem seus casos de uso ideais.
Padrões e Conceitos
Modelagem de Dados
Princípios e estratégias
- Princípios de modelagem
- Modelagem conceitual, lógica e física
- Entidade-Relacionamento (ER)
- UML para banco de dados
- Normalização vs desnormalização
- Estratégias em diferentes paradigmas
- Relacional: normalização, índices, constraints
- Documento: embedding vs referencing
- Grafo: nodes, edges, propriedades
- Chave-valor: estrutura de chaves, namespaces
- Padrões comuns
- Polimorfismo
- Árvores e hierarquias
- Muitos-para-muitos
- Histórico e auditoria
- Soft delete
- Particionamento vertical e horizontal
Caching
Estratégias para otimização de desempenho
- Tipos de cache
- Cache na aplicação (in-memory)
- Cache distribuído
- Cache em camadas
- Cache de consulta
- Full-page cache
- CDN
- Estratégias de cache
- Cache-aside (lazy loading)
- Write-through
- Write-behind (write-back)
- Refresh-ahead
- Políticas de invalidação
- Time-based (TTL)
- Event-based
- LRU, LFU, FIFO
- Implementações
- Redis
- Memcached
- Node-cache
- Bibliotecas de caching
Migrações e Versionamento
Gerenciamento de evolução do esquema
- Fundamentos de migrações
- Versionamento de esquema
- Migrações reversíveis (up/down)
- Estados e transições
- Migrações automatizadas vs manuais
- Ferramentas de migração
- TypeORM migrations
- Sequelize migrations
- Prisma migrations
- Knex migrations
- node-pg-migrate
- Flyway, Liquibase (Java)
- Boas práticas
- Migrações em ambientes de produção
- Estratégias sem downtime
- Rollback e planejamento de contingência
- Testes de migração
- Integração com CI/CD
Arquiteturas Avançadas
Padrões para sistemas complexos
- Multi-tenancy
- Banco de dados compartilhado
- Schema compartilhado
- Banco de dados dedicado
- Implementações híbridas
- Sharding
- Estratégias de sharding
- Sharding horizontal e vertical
- Chave de sharding
- Balanceamento e rebalanceamento
- Padrões event-sourcing e CQRS
- Event store
- Projeções
- Separação de leitura e escrita
- Event streaming com Kafka
- Polyglot persistence
- Utilizar múltiplos tipos de bancos
- Consistência entre bancos
- Transações distribuídas
- Casos de uso
Considere o caching desde o início do desenvolvimento. Um sistema de cache bem implementado pode reduzir drasticamente a carga no banco de dados e melhorar significativamente a performance da aplicação.
DevOps & Infraestrutura
Deployment & Hosting
Ambientes e Configuração
Gerenciamento de diferentes ambientes
- Ambientes de desenvolvimento
- Local, desenvolvimento, staging, produção
- Paridade de ambientes
- Ambientes efêmeros (PR previews)
- Gestão de configuração
- Variáveis de ambiente
- Secrets management
- Configuration as code
- Feature flags
- Infrastructure as Code (IaC)
- Terraform
- AWS CloudFormation
- Pulumi
- Ansible
Plataformas de Hospedagem
Serviços para deploy de aplicações
- Plataformas Serverless
- Vercel
- Netlify
- AWS Lambda + API Gateway
- Google Cloud Functions
- Azure Functions
- PaaS (Platform as a Service)
- Heroku
- Railway
- Render
- Google App Engine
- AWS Elastic Beanstalk
- IaaS (Infrastructure as a Service)
- AWS EC2
- Google Compute Engine
- DigitalOcean Droplets
- Linode
- Azure Virtual Machines
- Serviços gerenciados
- AWS RDS (bancos de dados)
- MongoDB Atlas
- Supabase
- Firebase
Deployment Strategies
Técnicas para deploy seguro e confiável
- Estratégias de release
- Big bang deployment
- Rolling updates
- Blue-green deployment
- Canary releases
- Feature toggles
- Continuous Integration (CI)
- Testes automatizados
- Code quality checks
- Build e artifacts
- Integração com VCS
- Continuous Deployment (CD)
- Pipeline de deployment
- Aprovações e gates
- Rollback automatizado
- Monitoramento pós-deploy
Monitoramento e Logging
Sistemas para observabilidade
- Logging
- Estruturação de logs
- Níveis de log
- Log rotation
- Agregação de logs
- ELK Stack (Elasticsearch, Logstash, Kibana)
- Fluentd/Fluent Bit
- Métricas e monitoramento
- Prometheus e Grafana
- Datadog
- New Relic
- CloudWatch (AWS)
- Dashboards e alertas
- APM (Application Performance Monitoring)
- Rastreamento de transações
- Profiling
- Análise de latência
- Distributed tracing
- OpenTelemetry
- Alerting e on-call
- Definição de thresholds
- PagerDuty
- OpsGenie
- Escalações e rotatividade
Independentemente da plataforma de hospedagem escolhida, sempre considere aspectos como custos recorrentes, vendor lock-in, suporte, conformidade, escalabilidade e limites operacionais.
Containerização
Docker
Plataforma de containers
- Conceitos fundamentais
- Containers vs. VMs
- Imagens e camadas
- Dockerfile
- Volumes
- Rede e comunicação
- Comandos e operações
- Build, run, stop, exec
- Gerenciamento de imagens
- Logs e debugging
- Tag e versionamento
- Registry e distribuição
- Boas práticas
- Multi-stage builds
- Imagens mínimas
- Segurança de containers
- Health checks
- Otimização de performance
- Node.js em containers
- Configuração ideal
- Gerenciamento de dependências
- Gestão de sinais e graceful shutdown
Docker Compose
Orquestração multi-container
- Conceitos básicos
- docker-compose.yml
- Serviços e dependências
- Networks
- Volumes
- Environment variables
- Comandos e operações
- up, down, build, logs
- exec, run
- restart policies
- scale
- Desenvolvimento local
- Ambientes dev vs prod
- Bind mounts para código
- Hot reloading
- Debugging
- Aplicações completas
- Frontend + Backend + DB
- Serviços auxiliares
- Profiles e Extends
Kubernetes
Orquestração de containers em escala
- Arquitetura
- Control plane e Data plane
- Nodes, Pods, Containers
- Deployments, StatefulSets, DaemonSets
- Services, Ingress
- ConfigMaps, Secrets
- Namespaces
- RBAC (Role-Based Access Control)
- Operações básicas
- kubectl
- YAML manifests
- Deployments e rollbacks
- Logs e debugging
- Port forwarding
- Armazenamento
- Volumes
- PersistentVolumes e PersistentVolumeClaims
- StorageClasses
- Networking
- Cluster Networking
- Service Discovery
- Network Policies
Kubernetes Avançado
Conceitos avançados e extensões
- Helm
- Charts e templates
- Valores e configuração
- Releases e rollbacks
- Repositories
- Operadores
- Custom Resources
- Operator Framework
- Casos de uso
- Service Mesh
- Istio
- Linkerd
- Traffic management
- mTLS
- Plataformas gerenciadas
- EKS (AWS)
- GKE (Google Cloud)
- AKS (Azure)
- DigitalOcean Kubernetes
Kubernetes é uma excelente solução para orquestração de containers em grande escala, mas introduz complexidade significativa. Para aplicações menores, considere soluções mais simples como Docker Compose ou serviços gerenciados.
CI/CD
GitHub Actions
CI/CD integrado ao GitHub
- Conceitos fundamentais
- Workflows e Eventos
- Jobs e Steps
- Actions
- Runners
- Ambientes
- Configuração
- YAML Syntax
- Triggers e filtros
- Secrets e variáveis
- Caching e performance
- Matrix builds
- Workflows comuns
- Testes e linting
- Build e release
- Deploy para ambientes
- Container builds
- Scheduled jobs
- Integrações
- Vercel, Netlify, Heroku
- AWS, GCP, Azure
- Docker e registries
- Dependabot
GitLab CI
CI/CD integrado ao GitLab
- Conceitos básicos
- Pipelines e stages
- Jobs e runners
- .gitlab-ci.yml
- Variáveis e secrets
- Artifacts e caching
- Features avançadas
- Multi-project pipelines
- Parent-child pipelines
- DAG (directed acyclic graph)
- Release management
- Environments e deployments
- Integrações
- Container Registry
- Package Registry
- Security scanning
- Kubernetes integration
Jenkins
Servidor de automação open-source
- Arquitetura
- Master e nodes
- Jobs e builds
- Plugins
- Pipelines
- Credentials
- Jenkinsfile
- Declarative vs Scripted
- Stages e Steps
- Parallel execution
- Shared libraries
- Integrações
- SCM (Git, SVN)
- Build tools
- Test frameworks
- Docker e Kubernetes
Práticas de CI/CD
Padrões e estratégias
- Testes automatizados
- Unit, integration, e2e
- Cobertura de código
- Paralelização
- Test reports
- Quality gates
- Linting e formatação
- Análise estática
- Security scanning
- Threshold enforcement
- Deployment
- Ambientes múltiplos
- Promoção entre ambientes
- Blue-Green e Canary
- Rollback automático
- DevSecOps
- SAST (Static Application Security Testing)
- DAST (Dynamic Application Security Testing)
- Dependency scanning
- Container scanning
GitHub Actions é excelente para começar com CI/CD, especialmente se seus projetos já estão no GitHub. Ele oferece um bom equilíbrio entre facilidade de uso e recursos avançados.