Pular para o conteúdo

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.

Guilherme Araújo de Oliveira
Local
São Paulo, Brasil
Atual
UX · Lojas Marisa
Foco
Java · Spring · Postgres

§ 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.

Outros projetos

04
  • Forja — 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.

  1. 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
  2. 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
  3. 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
  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