Pitch: Como eu criei um encurtador de URL com Spring Boot, Next.JS e Redis
Oi, meu nome é Vitor Medeiro, sou desenvolvedor há mais ou menos 7 anos e estou criando o curto.io, um micro-saas de engajamento com links curtos, que está em um pré do pré do pré stage, mas com um Beta Launch a caminho.
Com o objetivo de tirar algo do papel e conseguir passar algum conhecimento com isso, decidi lançar uma versão simples de um encurtador (motor usado pelo curto.io), grauito, utilizando as tecnologias Spring Boot, Next.js, Mongo.db e Redis.
Arquitetura
O desenho da solução inicial para esse sistema é o seguinte:
Next.js
A aplicação web com qual o usuário vai interagir, que vai carregar tanto a parte "deslogada" quanto a parte logada do sistema, que ainda está em desenvolvimento mas podemos ter um preview da página de criação de links.
Foi feito da maneira mais simples que eu conheço, pois não domino muito da arte do frontend, então foi feito na mais básica stack no frontend com CSS Modules, pois eu já tinha alguns componentes prontos.
Nesse momento está hospedado na vercel, e você pode vê-lo aqui: https://curto.io
Spring Boot
É o backend principal da minha aplicação, feita em Kotlin somente pelo motivo de eu já conhecer a linguagem e ter experiência com o ecossistema Java, partir pra esse lado me deu muita produtivdade na hora de codificar os endpoints da API.
Apesar de existir a opção de usar as API routes do Next.js, e ser uma ótima opção devido ao incrível serverless da Vercel, decidi por manter o melhor dos dois mundos separados, para que a aplicação não fique tão cara 🤑, então to mantendo o melhor dos dois mundos, o uptime magnífico do serverless, com o conforto do serverfull, devido minha experiência no passado.
OBS: Deixo aqui uma coisa extremamente importante na adoção de uma tecnologia para um produto e/ou sistema: trabalhe com o que você conhece e domina 🤝, isso é extremamente importante no sucesso de um produto.
Redis
Devido sua característica de KVS (Key Value Store), funciona como uma luva para armazenar os tokens dos links curtos para que possamos posteriormente "trocar" por links longos na aplicação, garantindo rapidez e escala na hora de redirecionarmos os usuários, evitando com que a minha API principal seja bombardeada com tanto tráfego no redirecionamento.
Para o redis, estou utilizando Upstash, uma solução que provê o redis como uma plataforma serverless, que vai ser muito legal para o momento da minha aplicação, que vai escalar no decorrer do tempo, além de oferecer um preço muito bacana.
Como funciona o Redirecionamento?
Coloquei dois desenhos (de procedência duvidosa) que explica mais ou menos o fluxo das duas principais funções do projeto: Criar links curtos e redirecioná-los para links longos.
- Criação de um link curto
- Redirecionamento de um link curto para um link longo.
Roadmap do produto
Você pode acompanhar um roadmap público do projeto aqui, com as principais features sendo feitas antes do lançamento beta da aplicação, do qual vou avisar vocês assim que estiver perto 🤝.
Pretendo postar mais coisas a medida que as features forem sendo feitas, acredito que podemos aprender muitas coisas juntos.
Conclusão
Espero que com isso alguém possa ter tido algum insight sobre como funciona um encurtador, que apesar de simples, pode carregar um desafio enorme na hora de escalar.
Quer conversar mais comigo? Vou deixar abaixo formas de me contatar.
E-mail: [email protected]
Linkedin: https://curr.to/COm4c
GitHub: https://curr.to/fb2uA