Procurando a primeira vaga como dev backend
Guilherme
Araújo
Backend Engineer. Vim do design. Fui para o backend porque queria entender o que acontece depois do clique. Hoje escrevo API em Java e Spring.
§ 00Requisição
O servidor não guarda sessão.
Cada requisição carrega o próprio token e o filtro valida ele antes de a chamada chegar na regra de negócio. Qualquer instância atende qualquer pessoa, e subir uma segunda máquina não exige combinar estado entre elas.
Requisição
{
"email": "ana@exemplo.com",
"senha": "senha-forte-aqui"
}Resposta
Clica num endpoint aí em cima.
O token já vem com a validade dele na resposta. Isto é um replay, não uma chamada de rede: as APIs em Java rodam na minha máquina, não em produção. O par que você vê é o que o controller devolve.
- 24
- endpoints REST documentados
- 16
- testes de integração
- 3
- APIs Java / Spring Boot
§ 01Projetos
Três APIs em Java.
Uma resolve autenticação, uma resolve agregação de dinheiro no banco, uma resolve disciplina de camadas. Em cada case eu conto qual era o problema, o que escolhi e o que a API responde. Abaixo ficam os outros projetos, sem case escrito.
E-commerce API
Catálogo aberto para leitura e fechado para escrita. Login com JWT, senha com BCrypt, upload de imagem e Swagger gerado do código.
9endpoints · 4 exigem JWT
- Java 21
- Spring Boot
- Spring Security
- JWT
- PostgreSQL
- OpenAPI
- Docker
Controle Financeiro API
Controle de gastos com resumo mensal. O Postgres soma, não o Java, e todo valor é BigDecimal para não perder centavo.
2consultas JPQL agregam no banco
- Java 21
- Spring Boot
- PostgreSQL
- Hibernate
- JPQL
- JUnit 5
- Docker
Gestor de Tarefas API
Um CRUD feito com disciplina: camada separada, record no lugar da entidade e todo erro no formato da RFC 7807.
RFC 7807um formato para todo erro
- Java 21
- Spring Boot
- Spring Data JPA
- H2 / PostgreSQL
- JUnit 5
- Docker
Outros projetos
04Forja — Plataforma Web, Mobile e API
Full-Stack
Landing, app mobile em Expo e backend Node/Express com autenticação robusta, MFA, verificação por email e auditoria.
Node.js · Express · PostgreSQL · JWT · Expo · Docker
ERP Secure App
Backend
Gestão com backend Node + MongoDB, JWT, hierarquia de papéis (RBAC), scripts operacionais e testes E2E.
Node.js · Express · MongoDB · JWT · Playwright · Docker
Flor de Baunilha
Product
Site institucional, autenticação e painel administrativo sobre Node + Prisma + PostgreSQL.
Node.js · Prisma · PostgreSQL · JWT · JavaScript
Sheet Guardian
Dados
Automações em Python para sincronizar planilhas, gerar snapshots e analisar dados de GA4.
Python · Playwright · Pandas · OpenPyXL · GA4
§ 02Diário de engenharia
Erros que me custaram tempo.
Eu anoto os erros que me travam. Sintoma, causa, o que fiz e a regra que sobrou para a próxima vez. Estes quatro são do Spring Boot 4, que ainda tem pouca coisa escrita na internet e me obrigou a ir ler o próprio framework.
ERR-JAVA-003Um import do Spring que sumiu, e o jeito de achar o novo10 min
Sintoma
cannot find symbol: class AutoConfigureMockMvc
Causa
No Spring Boot 4 a auto-configuração do MockMvc saiu do módulo genérico de test-autoconfigure e foi para o módulo webmvc. O pacote antigo simplesmente não existe mais no classpath.
Decisão
Em vez de chutar o pacote novo por tentativa, abri o jar: unzip -l spring-boot-webmvc-test-4.1.0.jar e procurei a classe. Achar o caminho real levou menos tempo que a primeira tentativa de adivinhar levaria.
Regra que ficou
Quando um import de framework desaparece, a resposta está dentro do jar em ~/.m2. O Stack Overflow vai te contar sobre a versão anterior.
- Spring Boot 4
- JUnit 5
- MockMvc
ERR-JAVA-004Jackson 2 → 3: a correção que virou decisão de teste10 min
Sintoma
cannot find symbol: class JsonNode
Causa
O Boot 4 adota Jackson 3, e o pacote raiz mudou de com.fasterxml.jackson para tools.jackson. O conserto óbvio era trocar o import.
Decisão
Não troquei o import: tirei o Jackson do teste. Passei a ler o id pelo header Location do 201 Created e a seguir pela URL. O teste ficou mais robusto e deixou de depender de qual parser de JSON o framework usa por dentro.
Regra que ficou
Teste de API afirma sobre o contrato: status, header, jsonPath. Se ele afirma sobre a biblioteca de serialização, a próxima major cobra a conta.
- Spring Boot 4
- Jackson 3
- Teste de integração
ERR-JAVA-007A dependência de JWT que arrastava a stack velha inteira10 min
Sintoma
Risco de duas versões de Jackson no mesmo classpath
Causa
O módulo jjwt-jackson depende de Jackson 2 databind. Ele traria a stack antiga de volta só para serializar as claims do token, convivendo com o Jackson 3 que o Boot 4 já usa.
Decisão
Troquei o serializador em vez de aceitar o conflito: jjwt-api + jjwt-impl + jjwt-gson. Gson é isolado e pequeno, e não toca no Jackson. A alternativa era gerenciar exclusão de dependência transitiva para sempre.
Regra que ficou
Antes de adicionar biblioteca, olhar o que ela arrasta. Quando a lib deixa escolher o serializador, escolher o que não duplica o que o framework já traz.
- jjwt
- Gestão de dependência
- Spring Boot 4
ERR-JAVA-001O gerador oficial produziu uma versão que não existe15 min
Sintoma
Non-resolvable parent POM: spring-boot-starter-parent:4.1.0.RELEASE (absent)
Causa
O Initializr publica o id da versão como 4.1.0.RELEASE. No Maven Central o artefato é só 4.1.0. O sufixo é herança de um esquema de versão que o Spring abandonou anos atrás.
Decisão
Conferi a coordenada na fonte da verdade em vez de tentar variações: curl no maven-metadata.xml do Central resolve em segundos qual versão de fato existe.
Regra que ficou
O id de uma ferramenta de scaffold não é a coordenada do repositório. Quando o build não resolve, validar contra o metadata do Central antes de mexer em qualquer outra coisa.
- Maven
- Spring Boot 4
§ 03Sobre
Como eu cheguei no backend.
Toda API tem interface. A maioria dos devs não desenha a dela.
POST /api/produtos 400 validação falhou
{
"timestamp": "2026-07-30T14:02:11.482+00:00",
"status": 400,
"error": "Bad Request",
"path": "/api/produtos"
}- Diz o que aconteceu para a máquina, não para quem integra.
- Não diz qual campo está errado. Quem integra descobre por tentativa.
- Formato diferente do resto da API: quem trata erro precisa de dois parsers.
Trabalho com UX na Lojas Marisa desde março de 2025. Meu dia é olhar dado de comportamento e decidir o que muda numa página de alta conversão. Gosto disso, mas sempre parei na mesma parede: eu entregava a tela e outra pessoa decidia como o dado ia ser guardado, validado e devolvido.
Então fui aprender essa parte. Estudo Ciência da Computação na Anhembi Morumbi e escolhi Java e Spring porque é o que a maioria das empresas grandes daqui roda, e porque eu queria uma linguagem que não me deixasse ser vago.
O que veio do design eu não larguei. Quando desenho uma resposta de erro, penso em quem vai ler ela às duas da manhã tentando descobrir por que a integração quebrou. Isso não é firula. É a diferença entre um 400 que resolve e um 400 que gera um ticket.
- 01Autenticação e permissão eu desenho antes do primeiro endpoint.
- 02Regra de negócio fica no domínio. Controller só traduz HTTP.
- 03Teste de integração passando pelo caminho real da requisição, com banco subindo.
- 04Se eu fiz duas vezes na mão, viro script.
§ 04Stack
O que eu uso.
Só o que apareceu em projeto que eu terminei.
- Backend
- JavaSpring BootSpring SecuritySpring Data JPANode.jsTypeScriptPython
- Dados
- PostgreSQLMySQLSQLHibernate / JPQLMongoDBPandas
- Operação & Qualidade
- DockerGit / GitHubGitHub ActionsJUnit 5Playwright
- Produto & Design
- FigmaUX/UIDesign SystemUX Research
§ 05Trajetória
Onde eu trabalho, o que eu estudo.
Designer de Experiência do Usuário (UX) · Lojas Marisa
Mar 2025 — Atual- Analiso dado de comportamento para decidir o que muda em página de produto e checkout.
- Trabalho junto do time técnico, então leio contrato de API e sei onde o front vai quebrar antes de desenhar.
- Aprendi aqui que quase toda discussão de conversão termina em algum detalhe de backend: latência, validação, estado.
Formação
Bacharelado em Ciência da Computação
Universidade Anhembi Morumbi · 2025 — 2028
Técnico em Processamento de Dados
Hashtag Treinamentos · 2026
Técnico Integrado em Information Technology
Senac São Paulo · 2023 — 2024
§ 06Contato
Me chama.
CLT, estágio ou freela. Remoto, híbrido ou presencial em São Paulo. Eu respondo em até um dia útil.
- Telefone
- +55 (11) 97172-7565
- Redes
- GitHub ↗LinkedIn ↗
