<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vitor Araujo</title>
    <description>The latest articles on Forem by Vitor Araujo (@arauhovitor).</description>
    <link>https://forem.com/arauhovitor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1131797%2F027e438f-31be-4051-a142-b6cca5607ecd.png</url>
      <title>Forem: Vitor Araujo</title>
      <link>https://forem.com/arauhovitor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/arauhovitor"/>
    <language>en</language>
    <item>
      <title>Introdução à Mensageria com RabbitMQ (Parte 1 – Conceitos)</title>
      <dc:creator>Vitor Araujo</dc:creator>
      <pubDate>Wed, 10 Sep 2025 03:44:14 +0000</pubDate>
      <link>https://forem.com/arauhovitor/introducao-a-mensageria-com-rabbitmq-parte-1-conceitos-671</link>
      <guid>https://forem.com/arauhovitor/introducao-a-mensageria-com-rabbitmq-parte-1-conceitos-671</guid>
      <description>&lt;p&gt;Ao final deste artigo, espera-se que você seja capaz de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Definir mensageria e entender seu objetivo;&lt;/li&gt;
&lt;li&gt;Explicar a relação entre mensageria, sistemas de mensagem e um message broker;&lt;/li&gt;
&lt;li&gt;Identificar os componentes fundamentais de um sistema de mensagem;&lt;/li&gt;
&lt;li&gt;Reconhecer e diferenciar os termos message broker, producer, consumer, exchange, queue, binding, listener, mensagem e topologia;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Quando navegamos na Internet, realizamos constantemente trocas de informações: recebemos o conteúdo de um site, enviamos dados por meio de formulários ou acionamos serviços ao clicar em botões.&lt;/p&gt;

&lt;p&gt;Em determinadas situações, a prioridade é a velocidade da transmissão, mesmo correndo o risco de perda de pacotes.&lt;/p&gt;

&lt;p&gt;Por exemplo, em videoconferências, para garantir comunicação em tempo real, voz e vídeo são enviados via protocolo UDP, que não assegura a entrega íntegra dos pacotes, o que pode resultar em queda de qualidade de imagem ou distorções de áudio.&lt;/p&gt;

&lt;p&gt;Já em outras situações, como em arquiteturas de microsserviços, a prioridade é &lt;strong&gt;garantir&lt;/strong&gt; a entrega da informação de um serviço ao outro e é nesse ponto que a mensageria ganha destaque.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que é mensageria, sistema de mensagem e message broker?
&lt;/h2&gt;

&lt;p&gt;O termo &lt;strong&gt;Mensageria&lt;/strong&gt; é utilizado para descrever o processo de comunicação entre sistemas, componentes de software ou serviços através do envio e recebimento de mensagens. &lt;/p&gt;

&lt;p&gt;Ao utilizarmos esse termo, não estamos fazendo referência a uma ferramenta específica mas sim ao &lt;strong&gt;mecanismo&lt;/strong&gt; que possibilita a comunicação síncrona ou assíncrona entre sistemas distribuídos.&lt;/p&gt;

&lt;p&gt;As mensagens enviadas e recebidas são blocos de dados (geralmente binários ou em formatos como JSON) definidos pelo desenvolvedor.&lt;/p&gt;

&lt;p&gt;Para implementar essa comunicação em um sistema real, precisamos de uma infraestrutura capaz de aplicar esse mecanismo na prática.&lt;/p&gt;

&lt;p&gt;E é aí que entra o &lt;strong&gt;sistema de mensagem&lt;/strong&gt; que oferece recursos para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criação, transmissão, armazenamento e entrega de mensagens entre aplicações&lt;/li&gt;
&lt;li&gt;Protocolos de transporte (AMQP, MQTT, STOMP)&lt;/li&gt;
&lt;li&gt;APIs e SDKs para produção e consumo&lt;/li&gt;
&lt;li&gt;Suporte a filas, tópicos e roteamento.&lt;/li&gt;
&lt;li&gt;message broker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como exemplo de sistema de mensagens, temos o RabbitMQ que &lt;a href="https://www.rabbitmq.com/docs/protocols" rel="noopener noreferrer"&gt;suporta os protocolos&lt;/a&gt; AMQP, MQTT e STOMP. E também possui um &lt;strong&gt;message broker&lt;/strong&gt;, componente responsável por receber, armazenar e encaminhar as mensagens entre os produtores e consumidores.&lt;/p&gt;

&lt;p&gt;Na imagem abaixo, temos a interface visual do RabbitMQ que mostra em tempo real o que acontece dentro do message broker:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgiwefqjuwjh0apepv9ah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgiwefqjuwjh0apepv9ah.png" alt="Interface visual do RabbitMQ que mostra em tempo real o que acontece dentro do message broker" width="800" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observação:&lt;/strong&gt; Tecnicamente, o message broker do RabbitMQ é apenas uma parte do sistema de mensagens. Mas no dia a dia, costuma-se chamar o RabbitMQ diretamente de broker.&lt;/p&gt;




&lt;h2&gt;
  
  
  Diagrama de um Sistema de Mensagem
&lt;/h2&gt;

&lt;p&gt;Agora que entendemos os principais conceitos, fica mais fácil visualizar esse processo em funcionamento. No diagrama abaixo, é possível acompanhar o caminho percorrido por uma mensagem: da aplicação produtora, passando pelo message broker (exchange e queue), até chegar ao consumidor que processa a informação e retorna o resultado para a aplicação final.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnrhaeabokb7e5l031qj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnrhaeabokb7e5l031qj7.png" alt="Diagrama generalista de um Sistema de Mensagem" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1 - A camada de negócio chama o componente produtor&lt;br&gt;
2 - O produtor envia a mensagem para uma exchange do message broker&lt;br&gt;
3 - A exchange roteia a mensagem para uma ou mais filas&lt;br&gt;
4 - O consumidor lê da fila e processa a mensagem&lt;br&gt;
5 - O resultado do processamento é utilizado pela aplicação&lt;/p&gt;

&lt;p&gt;No diagrama observamos o fluxo da mensagem desde o produtor até o consumidor. Dentro do próprio message broker, como você deve ter percebido, existem elementos que fazem esse processo acontecer de forma organizada.&lt;/p&gt;




&lt;h2&gt;
  
  
  Componentes dentro do Message Broker
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsla3c70kbtjnwqqrf4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsla3c70kbtjnwqqrf4j.png" alt="Diagrama interno do Message Broker" width="505" height="698"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;exchange&lt;/strong&gt; recebe as mensagens enviadas pelo produtor e decide para onde cada uma deve seguir. Ela não armazena dados, apenas encaminha a mensagem com base em regras definidas.&lt;/p&gt;

&lt;p&gt;Em seguida, temos a &lt;strong&gt;queue&lt;/strong&gt;, que funciona como uma fila de espera. As mensagens ficam armazenadas nela até que algum consumidor esteja disponível para processá-las.&lt;/p&gt;

&lt;p&gt;A ligação entre uma exchange e uma fila é chamada de &lt;strong&gt;binding&lt;/strong&gt;. É através dessa configuração que o broker entende quais mensagens devem ser direcionadas para cada fila. Essa organização envolve as exchanges que estão presentes e o tipo de cada uma delas, como &lt;a href="https://www.rabbitmq.com/tutorials/amqp-concepts?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;direct, fanout, topic ou headers&lt;/a&gt; (tópico que possivelmente será discutido em alguma postagem futura).&lt;/p&gt;




&lt;h2&gt;
  
  
  Consumo de mensagens na aplicação
&lt;/h2&gt;

&lt;p&gt;A mensagem que chega à fila é processada por um consumidor. Na aplicação, esse papel costuma ser implementado por um &lt;strong&gt;listener&lt;/strong&gt; que escuta a fila e, ao receber uma nova mensagem, executa a lógica de negócio. Com o processamento bem-sucedido, o consumidor envia um &lt;strong&gt;ACK&lt;/strong&gt; ao broker, que então remove a mensagem da fila.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observação:&lt;/strong&gt; ACK é um sinal confirmando o processamento com sucesso da mensagem.&lt;/p&gt;

&lt;p&gt;Essa relação entre exchange, queue, binding e listener e a forma como eles se organizam dentro do sistema de mensagem é chamada de &lt;strong&gt;topologia&lt;/strong&gt;. A topologia mostra quais exchanges existem e seus tipos, quais filas recebem mensagens, como os bindings conectam cada exchange às filas e quais consumidores estão ligados a cada uma delas.&lt;/p&gt;

&lt;p&gt;Com isso, conseguimos modelar desde cenários simples, em que existe apenas uma fila consumida por um único serviço, até arquiteturas complexas, em que várias exchanges distribuem mensagens para diferentes filas e consumidores especializados.&lt;/p&gt;

&lt;p&gt;Pensar na topologia é essencial porque ela define o caminho da informação dentro do sistema e garante que cada mensagem chegue ao destino correto.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Nesta primeira parte, organizamos os conceitos: produtor, exchange, fila, binding, listener e topologia. Com os termos claros e o percurso da mensagem bem entendido, implementar a topologia em código fica muito mais simples. Na parte dois, vamos para a prática com Java e RabbitMQ.&lt;/p&gt;




&lt;h3&gt;
  
  
  Referências:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rabbitmq.com/docs" rel="noopener noreferrer"&gt;RabbitMQ Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@gauravingalkar/overview-of-messaging-systems-b67ddaa860d0" rel="noopener noreferrer"&gt;Overview of a Messaging System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html" rel="noopener noreferrer"&gt;Part 1: RabbitMQ for beginners - What is RabbitMQ?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>microservices</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>Como começar a lidar com código duplicado em Microsserviços</title>
      <dc:creator>Vitor Araujo</dc:creator>
      <pubDate>Sun, 24 Aug 2025 17:03:24 +0000</pubDate>
      <link>https://forem.com/arauhovitor/reutilizando-codigo-em-arquitetura-de-microsservicos-1c83</link>
      <guid>https://forem.com/arauhovitor/reutilizando-codigo-em-arquitetura-de-microsservicos-1c83</guid>
      <description>&lt;p&gt;Esse artigo é um guia introdutório sobre técnicas de reutilização de código em microsserviços, voltado principalmente para desenvolvedores iniciantes e intermediários que estão começando a lidar com arquitetura distribuída. É mais um um mapa inicial para quem deseja entender os trade-offs entre diferentes técnicas de reutilização em microsserviços. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnzin3bre6mcghix7pdj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnzin3bre6mcghix7pdj.png" alt="Duplicated Duke" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/arauhovitor/minha-trajetoria-como-desenvolvedor-jr-53i7"&gt;Na minha postagem anterior&lt;/a&gt;, comentei sobre duplicação de código em microsserviços e que uma das possibilidades de resolvê-la seria a criação de uma biblioteca compartilhada.&lt;/p&gt;

&lt;p&gt;Recentemente recebi o livro Arquitetura de software: as partes difíceis (&lt;a href="https://amzn.to/4oPp4cD" rel="noopener noreferrer"&gt;https://amzn.to/4oPp4cD&lt;/a&gt;, link de associado caso queira comprar). A primeira coisa que fiz foi analisar o sumário para ver os tópicos abordados já que comprei pelo título do livro e pelas avaliações rs. &lt;/p&gt;

&lt;p&gt;Um dos capítulos aborda exatamente as técnicas de reutilização de código entre microsserviços, descrevendo com diagramas, trade-offs e as situações que cada técnica é mais adequada. &lt;/p&gt;

&lt;p&gt;Não sei vocês, mas eu amo de paixão quando consigo conectar diferentes informações e de fato começar a entender algo mais profundamente... e foi isso que aconteceu ao ler esse capítulo haha.&lt;/p&gt;

&lt;p&gt;O livro traz 4 técnicas que os desenvolvedores utilizam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replicação de Código&lt;/li&gt;
&lt;li&gt;Biblioteca Compartilhada&lt;/li&gt;
&lt;li&gt;Serviço Compartilhado&lt;/li&gt;
&lt;li&gt;Side-cars com malha de serviços&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vou falar brevemente sobre cada uma e deixo pros senhores e senhoras se aprofundarem por conta própria :)&lt;/p&gt;




&lt;h3&gt;
  
  
  Replicação de Código
&lt;/h3&gt;

&lt;p&gt;Nome autoexplicativo, o desenvolvedor replica o mesmo trecho de código em todos os microsserviços. Essa solução é a menos recomendada (rs) pois a depender do tipo de código que você está replicando, terá um retrabalho enorme sempre que haver modificações... tendo que dar ctrl v em todos os projeto, trabalhar dessa forma aumenta muito as chances de cometer erro.&lt;/p&gt;

&lt;p&gt;A melhor aplicação dessa técnica, é quando estamos tratando de códigos que mudam muito pouco ou que são específicos para cada projeto. Por exemplo, uma classe Útil que fez o tratamento de strings ou formatação de datas... Todos os projetos podem possuir uma classe "DataUtil" mas cada um teria apenas os métodos necessários. &lt;/p&gt;




&lt;h3&gt;
  
  
  Biblioteca Compartilhada
&lt;/h3&gt;

&lt;p&gt;A biblioteca compartilhada é bem interessante. Você cria um projeto a parte que vai armazenar toda a lógica que será reutilizada pelos outros serviços. No caso citado na minha postagem anterior, temos um serviço que é responsável pelo tratamento de exceção. Como trabalhamos com java, sempre que a versão é alterada, é gerado um novo .jar e esse arquivo é copiado para os outros projetos.&lt;/p&gt;

&lt;p&gt;Você instala ele como se fosse uma biblioteca interna e tem acesso ao código do projeto. Você tem acesso as classes em tempo de compilação, então consegue executar os testes e verificar se a nova versão causou ou não problemas no projeto.&lt;/p&gt;

&lt;p&gt;Um ponto negativo seria justamente o controle de versão dessa biblioteca e a quantidade de projetos que a utilizam... Por exemplo, se ela for altamente acoplada, ou seja, uma modificação nela afeta muitos outros projetos... você precisa ter um plano de atualização de versão da biblioteca.&lt;/p&gt;

&lt;p&gt;No livro, é feita uma discussão entre a &lt;strong&gt;criação de uma única biblioteca compartilhada&lt;/strong&gt; que armazena toda lógica duplicada nos serviços vs &lt;strong&gt;criação de bibliotecas mais especializadas&lt;/strong&gt; como, biblioteca de autorização, de logging, de tratamento de exceção... &lt;/p&gt;

&lt;p&gt;Levando em consideração os seus conhecimentos... Qual das opções seria mais vantajosa no desenvolvimento de software? Tira um tempinho pra pensar a respeito dos pontos positivos, pontos negativos e impactos de cada uma dessas duas opções.&lt;/p&gt;

&lt;p&gt;Bom, &lt;strong&gt;normalmente&lt;/strong&gt; a melhor opção é evitar a criação de bibliotecas grandes em que as alterações afetem muitos serviços... dê preferência sempre a criação de bibliotecas menores e mais especializadas... dessa forma, o impacto das alterações dessas bibliotecas menores não vai atingir muitos serviços, diminuindo o tempo gasto em testes.&lt;/p&gt;




&lt;h3&gt;
  
  
  Serviço Compartilhado
&lt;/h3&gt;

&lt;p&gt;Nessa técnica, temos a criação de um serviço que vai armazenar a lógica duplicada. Diferente da biblioteca compartilhada, que você tem acesso ao código em &lt;strong&gt;tempo de compilação&lt;/strong&gt;, no serviço compartilhado você terá acesso em &lt;strong&gt;tempo de execução&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;As alterações nesse serviço, afetam todos os outros que o utilizam. Então caso ele fique fora do ar, todos os outros ficarão sem acesso ao mesmo. &lt;/p&gt;

&lt;p&gt;Outro ponto é que os serviços que utilizam esse serviço compartilhado precisam realizar requisições para ele, essas requisições levam um tempo por conta da latência de rede e segurança. &lt;/p&gt;

&lt;p&gt;E aqui vem um ponto interessante, há um tempo atrás eu estava estudando a respeito de Remote Procedure Call (RPC), que é uma forma de comunicação entre serviços. Eu havia entendido o que era RPC mas não tinha em mente uma situação interessante para utilizá-lo. Uma das características do RPC é que as chamadas tendem a ser mais rápidas que as chamadas para API's REST... então nessa situação do serviço compartilhado, a utilização de RPC seria mais vantajosa. &lt;/p&gt;

&lt;p&gt;E além disso, essa técnica é recomendada também quando temos um projeto de microsserviços que utilizam linguagens diversas... porque, caso a gente prefira utilizar a técnica de biblioteca compartilhada, teríamos que criar a biblioteca em diferentes linguagens, o que já não acontece com o serviço compartilhado... que para acessá-lo, basta realizar chamadas/requisições.&lt;/p&gt;




&lt;h3&gt;
  
  
  Side Cars com Malha de Serviço
&lt;/h3&gt;

&lt;p&gt;Por fim, temos os Side Cars e as Malhas de Serviços. Essas técnicas são bem mais complexas do que as anteriores e eu não pretendo explicá-las sem a devida profundidade que merece rs. &lt;/p&gt;

&lt;p&gt;Então, fica como recomendação de tópico para aprofundamento para caso você se interesse. &lt;/p&gt;

&lt;p&gt;Alguns links de vídeos que resumem bem essas técnicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=sh2nwXJLDkE&amp;amp;t=204s&amp;amp;ab_channel=ByteMonk" rel="noopener noreferrer"&gt;Sidecar Pattern in Microservices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=xuOJF3w4vQQ&amp;amp;ab_channel=ByteMonk" rel="noopener noreferrer"&gt;Service Mesh Explained | Sidecar Proxy &amp;amp; Microservices Communication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Julguei esse conteúdo interessante de ser compartilhado e talvez eu aborde de forma mais aprofundada no futuro algumas dessas soluções :P&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>programming</category>
      <category>learning</category>
      <category>backend</category>
    </item>
    <item>
      <title>minha trajetória como desenvolvedor jr</title>
      <dc:creator>Vitor Araujo</dc:creator>
      <pubDate>Wed, 13 Aug 2025 22:54:46 +0000</pubDate>
      <link>https://forem.com/arauhovitor/minha-trajetoria-como-desenvolvedor-jr-53i7</link>
      <guid>https://forem.com/arauhovitor/minha-trajetoria-como-desenvolvedor-jr-53i7</guid>
      <description>&lt;p&gt;Essa postagem é pra compartilhar pontos interessantes na minha trajetória como desenvolvedor&lt;/p&gt;

&lt;p&gt;Tenho dois anos de experiência profissional como desenvolvedor backend com Java. Nesses dois anos trabalhei com projetos bem diferentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 meses em um sistema legado em Java 7, JSF, Primefaces e SVN&lt;/li&gt;
&lt;li&gt;1 ano e 6 meses com microsserviços em Java 21, Spring e git&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw4lk81ku684gk71a2x7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw4lk81ku684gk71a2x7.png" alt="imagem ilustrativa do Duke mascote do java" width="300" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trabalhar com um sistema legado me fez ter contato com muitos problemas citados pelo Martin Fowler no seu livro de Refatoração como por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classes e métodos grandes realizando diversas funções&lt;/li&gt;
&lt;li&gt;Duplicação de código&lt;/li&gt;
&lt;li&gt;Nomes misteriosos&lt;/li&gt;
&lt;li&gt;Lista longa de parâmetros&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E por causa disso, eu tinha medo de alterar uma vírgula e o sistema parar de funcionar kkk. Por não ter pra onde correr, já que escolhi como profissão ser um desenvolvedor de software, precisei superar essas inseguranças. E foi através do trabalho desenvolvido em cima desse sistema, que ganhei confiança ao atuar como desenvolvedor e subir modificações em produção.&lt;/p&gt;

&lt;p&gt;Como eu ganhei essa segurança testando localmente os caminhos felizes e os edge cases, e resolvendo os eventuais BO's que apareciam. Isso me ajudou a melhorar a qualidade do código e diminuiu consideravelmenteas chances de erros em produção.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmpsmyzg327k9ud3iexo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmpsmyzg327k9ud3iexo.jpg" alt="eu" width="300" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois disso, comecei a trabalhar com microsserviços... e foi aqui que comecei a aprender sobre desenvolvimento de software na atualidade... tendo contato com tópicos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Versionamento com git, Docker, Kubernetes, AWS, SOLID, Clean Code, testes de software, integração de APIs, Design Patterns&lt;/li&gt;
&lt;li&gt;Mensageria, paralelismo e concorrência&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eu sinto que isso abriu um universo dentro da minha cabeça, porque até então eu só tinha trabalhado com monolitos tanto profissionalmente quanto academicamente. &lt;/p&gt;

&lt;p&gt;Ao trabalhar com microsserviços, os prós e contras dele se comparado com os monolitos tornaram-se mais evidentes. Fora que também percebi a importância de gerenciamento de recursos como memória e até mesmo a utilização de logs nos projetos. &lt;/p&gt;

&lt;p&gt;Um outro ponto interessante é que existem trechos de códigos que se repetem em todos os projetos. Por exemplo, você quer que seu tratamento de exceção seja padronizado. Então, se o projeto x retornar um código de erro "5x5x5x5" que significa "Dados de excel não encontrado", se o projeto y, retornar esse mesmo código de erro, deve ter o mesmo significado.&lt;/p&gt;

&lt;p&gt;Caso você não tire um tempo pra extrair essa duplicação e criar uma “biblioteca interna“, sempre que você alterar esse código em um projeto, você vai ter que alterar em todos os outros projetos e as chances de dar errado são grandes. (problema clássico da duplicação de código)&lt;/p&gt;

&lt;p&gt;Se você parar pra pensar, é algo óbvio mas apesar disso, eu só percebi a dimensão do problema depois de ter tido contato na prática rs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lrjlb8dys4ie6sihpr7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lrjlb8dys4ie6sihpr7.jpg" alt="eu" width="300" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bom, além do trabalho, estou sempre estudando alguma coisa… Atualmente estou lendo o livro &lt;strong&gt;Fundamentos da Arquitetura de Software: uma Abordagem de Engenharia&lt;/strong&gt; e estou achando bem legal. &lt;/p&gt;

&lt;p&gt;Espero terminar de ler até o final do ano. Comprei ele recentemente pela amazon, caso você queira comprar também aqui está meu link de associado &lt;a href="https://amzn.to/45xrlAi%E2%80%A6" rel="noopener noreferrer"&gt;https://amzn.to/45xrlAi…&lt;/a&gt; caso você compre pelo link, vai estar me ajudando a comprar mais livros e matar minha sede por conhecimento!!!&lt;/p&gt;

&lt;p&gt;Fora isso, também estou fazendo meu TCC do curso de ADS do Instituto Federal do Piauí… estou construindo um aplicativo m-health com React Native mas quero dar mais detalhes só quando ele tiver mais encaminhado.&lt;/p&gt;

&lt;p&gt;Bom, acho que com essa breve postagem deu pra você conhecer um pouco mais sobre minha pessoa e sobre minha carreira.&lt;/p&gt;

&lt;p&gt;E por fim, o objetivo dessas postagens é compartilhar pensamentos e conhecimentos que eu julgar interessante de serem compartilhados. Uma das próximas postagens será sobre uma introdução a mensageria e uma proposta de implementação em Java com RabbitMQ.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>career</category>
      <category>development</category>
    </item>
  </channel>
</rss>
