{"id":200,"date":"2022-08-23T10:13:22","date_gmt":"2022-08-23T13:13:22","guid":{"rendered":"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/?post_type=v1&#038;p=200"},"modified":"2024-07-03T16:13:20","modified_gmt":"2024-07-03T19:13:20","slug":"documento-de-arquitetura","status":"publish","type":"v1","link":"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/sumario\/documento-de-arquitetura\/","title":{"rendered":"Documento de Arquitetura"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"1-introdu\u00e7\u00e3o\"><strong>1 &#8211; INTRODU\u00c7\u00c3O<\/strong><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"11-vis\u00e3o-geral\"><strong>1.1 &#8211; VIS\u00c3O GERAL<\/strong><\/h4>\n\n\n\n<p>O &#8220;Documento Arquitetural de Software da DPMG&#8221; possui como finalidade definir os conceitos a serem aplicados no processo de desenvolvimento de sistemas da institui\u00e7\u00e3o. Reunir todas as informa\u00e7\u00f5es necess\u00e1rias para concluir as atividades demandadas, atrav\u00e9s de uma vis\u00e3o macrosc\u00f3pica em termos de componentes que interagem entre si.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"12-escopo\"><strong>1.2 &#8211; ESCOPO<\/strong><\/h4>\n\n\n\n<p>Est\u00e3o contemplados neste documento informa\u00e7\u00f5es de tecnologias de desenvolvimento (backend e frontend) e tamb\u00e9m tecnologias de implanta\u00e7\u00e3o dos produtos finais (configura\u00e7\u00e3o e mudan\u00e7a) atrav\u00e9s de um fluxo j\u00e1 pr\u00e9-definido de entregas condizentes \u00e0 testes e produ\u00e7\u00e3o, obrigatoriamente atrav\u00e9s de controle de vers\u00f5es (reposit\u00f3rios) para facilitar a rastreabilidade.<\/p>\n\n\n\n<p>\u00c9 tamb\u00e9m escopo deste documento, a orienta\u00e7\u00e3o aos colaboradores sobre os padr\u00f5es de desenvolvimento definidos pela DPMG al\u00e9m das suas respectivas defini\u00e7\u00f5es de projetos. Ser\u00e3o descritas as camadas que comp\u00f5e a arquitetura da institui\u00e7\u00e3o, requisitos de desempenho e seguran\u00e7a da informa\u00e7\u00e3o.<\/p>\n\n\n\n<p>A defini\u00e7\u00e3o de bancos de dados utilizados nos projetos ser\u00e1 explicada no decorrer deste documento, assim como os servidores de aplica\u00e7\u00e3o dos mesmos. Ser\u00e3o relatadas ferramentas de monitoramento de aplica\u00e7\u00f5es e servidores, com o intuito de ajudar na an\u00e1lise de erros e prever poss\u00edveis &#8220;problemas&#8221; futuros agindo de forma antecipada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2-representa\u00e7\u00e3o-da-arquitetura\"><strong>2 &#8211; REPRESENTA\u00c7\u00c3O DA ARQUITETURA<\/strong><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"21-backend\"><strong>2.1 &#8211; BACKEND<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"211-java\"><strong>2.1.1 &#8211; JAVA<\/strong><\/h5>\n\n\n\n<p>Baseado na escalabilidade necess\u00e1ria para melhor funcionamento dos sistemas da DPMG, de forma integrada, foi definido a utiliza\u00e7\u00e3o do JAVA e toda sua stack para implementa\u00e7\u00f5es de aplica\u00e7\u00f5es robustas.<\/p>\n\n\n\n<p>Java \u00e9 uma linguagem de programa\u00e7\u00e3o e plataforma computacional lan\u00e7ada pela pela Sun Microsystems em 1995. Existem muitas aplica\u00e7\u00f5es cujo funcionamento est\u00e3o condicionados \u00e0 presen\u00e7a do Java instalado. Java \u00e9 uma linguagem gratuita, est\u00e1 entre as linguagens mundialmente mais usadas e atualmente \u00e9 mantida pela Oracle.<\/p>\n\n\n\n<p>Principais caracter\u00edsticas do Java:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Suporte \u00e0 orienta\u00e7\u00e3o a objetos;<\/li>\n\n\n\n<li>Portabilidade;<\/li>\n\n\n\n<li>Seguran\u00e7a;<\/li>\n\n\n\n<li>Linguagem Simples;<\/li>\n\n\n\n<li>Alta Performance;<\/li>\n\n\n\n<li>Dinamismo;<\/li>\n\n\n\n<li>Interpretada (o compilador pode executar os bytecodes do Java diretamente em qualquer m\u00e1quina);<\/li>\n\n\n\n<li>Distribu\u00eddo;<\/li>\n\n\n\n<li>Independente de plataforma;<\/li>\n\n\n\n<li>Tipada (detecta os tipos de vari\u00e1veis quando declaradas).<\/li>\n<\/ul>\n\n\n\n<p>Os sistemas comunicam entre si atrav\u00e9s de &#8220;cliente-servidor&#8221;, onde as aplica\u00e7\u00f5es frontends (cliente) realizam requisi\u00e7\u00f5es na API Gateway (servidor) para manipula\u00e7\u00f5es e consultas de dados. As API&#8217;s s\u00e3o respons\u00e1veis por receber as request de microsservi\u00e7os, validar o acesso aos endpoints via permiss\u00e3o do usu\u00e1rio, manipular o dado e retornar a informa\u00e7\u00e3o solicitada via response.<\/p>\n\n\n\n<p>Os microsservi\u00e7os possuem defini\u00e7\u00f5es a serem seguidas, como por exemplo a implementa\u00e7\u00e3o de rollbacks em todos os m\u00e9todos que utilize transa\u00e7\u00e3o. Tamb\u00e9m dever\u00e3o ser servi\u00e7os simples e objetivos. Todos os endpoints devem ser documentados atrav\u00e9s do Swagger e com o SCSDP corretamente configurado.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"22-frontend\"><strong>2.2 &#8211; FRONTEND<\/strong><\/h4>\n\n\n\n<p>Sempre com o pensamento de utiliza\u00e7\u00e3o de tecnologias atuais do mercado, foi definido o framework Vue.js (vers\u00e3o 2 e 3) para as implementa\u00e7\u00f5es referentes ao Frontend dos sistemas. Vue possui uma comunidade nova, por\u00e9m j\u00e1 bem extensa e colaborativa, facilitando assim o desenvolvimento das solu\u00e7\u00f5es.<\/p>\n\n\n\n<p>Vue JS \u00e9 um framework progressivo utilizado para a constru\u00e7\u00e3o de interfaces de usu\u00e1rio. O framework Vue foi projetado desde o in\u00edcio para ser adot\u00e1vel incrementalmente. A biblioteca principal \u00e9 direcionada exclusivamente na camada visual (view layer), sendo f\u00e1cil adotar e integrar com outras bibliotecas ou projetos existentes. Por outro lado, Vue tamb\u00e9m \u00e9 capaz de dar poder a sofisticadas Single-Page Applications quando usado em conjunto com ferramentas modernas e bibliotecas de apoio.<\/p>\n\n\n\n<p>O framework Vue tamb\u00e9m oferece suporte \u00e0 linguagem typescript que \u00e9 um sistema de tipagem est\u00e1tica e pode ajudar a prevenir muitos erros potenciais em tempo de execu\u00e7\u00e3o, especialmente conforme as aplica\u00e7\u00f5es v\u00e3o crescendo.<\/p>\n\n\n\n<p>O Vue possui como principais caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utiliza abordagem de DOM virtual;<\/li>\n\n\n\n<li>Prov\u00eam componentes visuais reativos e combin\u00e1veis;<\/li>\n\n\n\n<li>Mantem foco na biblioteca principal, com preocupa\u00e7\u00f5es como roteamento e gerenciamento de estado global tratada por biblioteca companheira;<\/li>\n\n\n\n<li>Desempenho de execu\u00e7\u00e3o de renderiza\u00e7\u00e3o\/atualiza\u00e7\u00e3o com \u00e1rvores de componentes bem simples;<\/li>\n\n\n\n<li>Vue, diferente de algumas novas tecnologias como React, constr\u00f3i os componentes com base em tecnologias cl\u00e1ssicas (como HTML e CSS);<\/li>\n\n\n\n<li>Grande escalabilidade possuindo solu\u00e7\u00f5es de roteamento robustas;<\/li>\n\n\n\n<li>A complexidade do Vue \u00e9 bem menor, se comparada a outras tecnologias como AngularJs;<\/li>\n\n\n\n<li>Vue \u00e9 bem flex\u00edvel e modular.<\/li>\n<\/ul>\n\n\n\n<p>A linguagem padr\u00e3o definida pela DPMG para o frontend \u00e9 o TypeScript, por motivo de tornar mais f\u00e1cil a identifica\u00e7\u00e3o de erros no c\u00f3digo deixando assim a manutenalibidade futura mais simples. Por ser uma linguagem que permite a tipagem das vari\u00e1veis, \u00e9 poss\u00edvel perceber falhas durante o processo de desenvolvimento. O TypeScript n\u00e3o interfere na transpila\u00e7\u00e3o do c\u00f3digo a ser lido por todas vers\u00f5es de browser, como geralmente \u00e9 feito com o Babel em aplica\u00e7\u00f5es JavaScript.<\/p>\n\n\n\n<p>Para vers\u00f5es do Vue 3 foi adotado o m\u00e9todo de Composition API. Utilizamos pre-processador Sass mais especificamente Scss para facilitar e melhorar sintaxe CSS, a ideia \u00e9 manter a l\u00f3gica do CSS (seletores, regras etc), mas de uma maneira mais organizada, intuitiva e com trechos de c\u00f3digo facilmente reutiliz\u00e1veis.<\/p>\n\n\n\n<p>O Quasar foi o framework de componentes e sistema de grid escolhido para cria\u00e7\u00e3o das telas dos sistemas vue vers\u00f5es 2, visto que oferece uma vasta gama de op\u00e7\u00f5es j\u00e1 dispon\u00edveis em seu cat\u00e1logo, al\u00e9m de ser nativo do Vue, ele tamb\u00e9m \u00e9 baseado no Material Design e seus \u00edcones.<\/p>\n\n\n\n<p>As telas devem ser padronizadas de acordo com sistemas anteriores, ou com aceita\u00e7\u00e3o do demandante, obedecendo as regras definidas na paleta de cor da Defensoria P\u00fablica de Minas Gerais. Os sistemas devem ser gerenciados pelo roteador nativo que se integra na inst\u00e2ncia do Vue. As rotas obrigatoriamente precisam estar corretamente configuradas com o SCSDP.<\/p>\n\n\n\n<p>O desenvolvimento conta tamb\u00e9m com a op\u00e7\u00e3o de controles de estados utilizando o Vuex, deixando centralizado o armazenamento dos estados para todos as telas do sistema. Para Vers\u00f5es do Vue 3 foi escolhido o Pinia por indica\u00e7\u00e3o da documenta\u00e7\u00e3o do pr\u00f3prio vuex (<a href=\"http:\/\/vuex.vuejs.org\/\">http:\/\/vuex.vuejs.org\/<\/a>)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"23-mobile\"><strong>2.3 &#8211; MOBILE<\/strong><\/h4>\n\n\n\n<p>A linguagem para o desenvolvimento de aplica\u00e7\u00f5es mobile \u00e9 Dart, pelo fato da DPMG ter escolhido o Flutter, que \u00e9 um kit de ferramentas de UI da Google para cria\u00e7\u00e3o de aplicativos nativamente compilados para Android e iOS a partir de uma \u00fanica base de c\u00f3digo, tornando assim a manuten\u00e7\u00e3o mais eficaz e produtiva.<\/p>\n\n\n\n<p>\u201cFlutter \u00e9 um kit de ferramentas do Google para construir aplica\u00e7\u00f5es lindas, nativamente compiladas para mobile, web, desktop a partir de um \u00fanico c\u00f3digo-base.\u201d(FLUTTER, 2021)<\/p>\n\n\n\n<p>Em mais detalhes o Flutter \u00e9 um framework desenvolvido pelo Google na linguagem Dart para a cria\u00e7\u00e3o de aplicativos multiplataforma, web, mobile e desktop. Diferentemente de outras solu\u00e7\u00f5es, como Ionic e React Native, o Flutter n\u00e3o \u00e9 executado em uma WebView (Ionic) e nem utiliza componentes nativos atrav\u00e9s de uma \u201cponte\u201d (DEVMEDIA, 2021). Ao inv\u00e9s disso gera c\u00f3digo verdadeiramente nativo, tanto para Android quanto para iOS.<\/p>\n\n\n\n<p>O Dart \u00e9 uma linguagem de cliente otimizada (Dart VM) utilizada para o desenvolvimento de aplica\u00e7\u00f5es r\u00e1pidas em qualquer plataforma. Seu objetivo \u00e9 oferecer uma linguagem de programa\u00e7\u00e3o mais produtiva para o desenvolvimento multiplataforma, associado \u00e0 uma plataforma de execu\u00e7\u00e3o flex\u00edvel para frameworks de aplica\u00e7\u00e3o. A tecnologia de compila\u00e7\u00e3o do Dart possibilita a execu\u00e7\u00e3o do c\u00f3digo em diferentes meios:<\/p>\n\n\n\n<p><strong>Plataforma Nativa<\/strong><\/p>\n\n\n\n<p>Para aplica\u00e7\u00f5es direcionadas para dispositivos mobile e desktop, o Dart inclue tanto a Dart VM com compila\u00e7\u00e3o just-in-time (JIT) e um compilador ahead-of-time (AOT) para gera\u00e7\u00e3o do c\u00f3digo de m\u00e1quina.<\/p>\n\n\n\n<p><strong>Plataforma Web<\/strong><\/p>\n\n\n\n<p>Para aplica\u00e7\u00f5es direcionadas para a web, o Dart inclui tanto o compilador development time (dartdevc) e o compilador production time (dart2js). Ambos os compiladores traduzem o Dart em JavaScript.<\/p>\n\n\n\n<p>Um dos principais diferenciais do Flutter \u00e9 a rapidez de desenvolvimento, visto que possui um rico conjunto de widgets totalmente personaliz\u00e1veis e de f\u00e1cil utiliza\u00e7\u00e3o atrav\u00e9s da sua arquitetura em camadas, resultando em uma renderiza\u00e7\u00e3o r\u00e1pida.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"24-portal-institucional\"><strong>2.4 &#8211; PROJETOS WORDPRESS<\/strong><\/h4>\n\n\n\n<p><strong>Introdu\u00e7\u00e3o<\/strong>&nbsp;<\/p>\n\n\n\n<p>A escolha do WordPress como plataforma baseia-se na sua facilidade de uso, rapidez de desenvolvimento e flexibilidade na gest\u00e3o de conte\u00fados.\u00a0<\/p>\n\n\n\n<p><strong>WordPress<\/strong>&nbsp;<\/p>\n\n\n\n<p>O WordPress \u00e9 uma ferramenta gratuita e open-source, desenvolvida em PHP, amplamente utilizada para cria\u00e7\u00e3o de blogs e portais. Suas principais vantagens incluem:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Desenvolvimento \u00c1gil<\/strong>: Possibilita um desenvolvimento r\u00e1pido e eficiente.&nbsp;<\/li>\n\n\n\n<li><strong>Gest\u00e3o Flex\u00edvel<\/strong>: Permite a gest\u00e3o de conte\u00fados a qualquer momento e de qualquer lugar.&nbsp;<\/li>\n\n\n\n<li><strong>Comunidade Ativa<\/strong>: Conta com uma grande comunidade de desenvolvedores e suporte.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><strong>PHP<\/strong>&nbsp;<\/p>\n\n\n\n<p>PHP (Hypertext Preprocessor) \u00e9 uma linguagem de script open-source, altamente adequada para o desenvolvimento web e embut\u00edvel em HTML. Suas principais caracter\u00edsticas incluem:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Velocidade e Robustez<\/strong>&nbsp;<\/li>\n\n\n\n<li><strong>Orienta\u00e7\u00e3o a Objetos<\/strong>&nbsp;<\/li>\n\n\n\n<li><strong>Portabilidade<\/strong>&nbsp;<\/li>\n\n\n\n<li><strong>Tipagem Din\u00e2mica<\/strong>&nbsp;<\/li>\n\n\n\n<li><strong>Sintaxe Similar ao C\/C++ e Perl<\/strong>&nbsp;<\/li>\n\n\n\n<li><strong>C\u00f3digo Aberto<\/strong>&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><strong>Defini\u00e7\u00e3o de Objetivos<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>Facilitar a Gest\u00e3o de Conte\u00fados<\/strong>&nbsp;<\/p>\n\n\n\n<p>Utilizar o WordPress para facilitar a gest\u00e3o de conte\u00fados, permitindo a publica\u00e7\u00e3o de not\u00edcias, artigos e outras pautas da institui\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p><strong>Desenvolvimento \u00c1gil<\/strong>&nbsp;<\/p>\n\n\n\n<p>Aproveitar as capacidades do WordPress para permitir um desenvolvimento r\u00e1pido e flex\u00edvel, possibilitando a gest\u00e3o de conte\u00fados a qualquer momento e lugar.&nbsp;<\/p>\n\n\n\n<p><strong>Estrutura<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>Padr\u00f5es de Desenvolvimento de Temas<\/strong>&nbsp;<\/p>\n\n\n\n<p>A estrutura do portal deve ser compat\u00edvel com a cria\u00e7\u00e3o de temas para WordPress, seguindo rigorosamente os padr\u00f5es estabelecidos. Isso inclui:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Estrutura de Diret\u00f3rios<\/strong>: Seguir a organiza\u00e7\u00e3o padr\u00e3o de diret\u00f3rios (e.g., wp-content\/themes\/seu-tema).&nbsp;<\/li>\n\n\n\n<li><strong>Arquivos Necess\u00e1rios<\/strong>: Incluir os arquivos essenciais como style.css, index.php, functions.php, e outros templates padr\u00e3o.<\/li>\n\n\n\n<li><strong>Suporte a Funcionalidades<\/strong>: Implementar suporte para funcionalidades padr\u00e3o de temas como menus de navega\u00e7\u00e3o, widgets, thumbnails de posts, e custom headers.&nbsp;<\/li>\n\n\n\n<li><strong>Codifica\u00e7\u00e3o Padr\u00e3o<\/strong>: Utilizar as melhores pr\u00e1ticas de codifica\u00e7\u00e3o recomendadas pela documenta\u00e7\u00e3o oficial do WordPress.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><strong>Documenta\u00e7\u00e3o<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>Requisitos Funcionais e N\u00e3o-Funcionais<\/strong>&nbsp;<\/p>\n\n\n\n<p>Documentar todos os requisitos funcionais e n\u00e3o-funcionais do projeto para garantir clareza no escopo e expectativas.&nbsp;<\/p>\n\n\n\n<p><strong>Especifica\u00e7\u00f5es T\u00e9cnicas<\/strong>&nbsp;<\/p>\n\n\n\n<p>Elaborar especifica\u00e7\u00f5es t\u00e9cnicas detalhadas, incluindo:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arquitetura do Sistema&nbsp;<\/li>\n\n\n\n<li>Fluxos de Dados&nbsp;<\/li>\n\n\n\n<li>Integra\u00e7\u00e3o com outros Sistemas e Microservi\u00e7os&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><strong>Manuais de Usu\u00e1rio<\/strong>&nbsp;<\/p>\n\n\n\n<p>Criar manuais de usu\u00e1rio para administradores e gestores de conte\u00fado, explicando o uso eficiente das funcionalidades do WordPress.&nbsp;<\/p>\n\n\n\n<p><strong>Tecnologias Utilizadas no Frontend<\/strong>&nbsp;<\/p>\n\n\n\n<p>Utiliza\u00e7\u00e3o de JavaScript Vanilla para consumir APIs REST, garantindo simplicidade e efici\u00eancia na comunica\u00e7\u00e3o com microservi\u00e7os.&nbsp;<\/p>\n\n\n\n<p><strong>Plugins<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>Seguran\u00e7a e Compatibilidade<\/strong>&nbsp;<\/p>\n\n\n\n<p>Plugins de terceiros n\u00e3o s\u00e3o utilizados para evitar problemas de seguran\u00e7a e incompatibilidades futuras.&nbsp;<\/p>\n\n\n\n<p><strong>An\u00e1lise e Possibilidades<\/strong>&nbsp;<\/p>\n\n\n\n<p>Caso algum plugin seja necess\u00e1rio, deve-se abrir um chamado interno detalhando a necessidade e os benef\u00edcios esperados para solicitar um plugin espec\u00edfico.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Todos os chamados s\u00e3o analisados pela equipe de desenvolvimento para avaliar a viabilidade t\u00e9cnica e a seguran\u00e7a antes da aprova\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p><strong>Desenvolvimento de Plugins<\/strong>&nbsp;<\/p>\n\n\n\n<p>O plugin ser\u00e1 desenvolvido, seguindo padr\u00f5es de codifica\u00e7\u00e3o, seguran\u00e7a e integra\u00e7\u00e3o com o sistema existente.&nbsp;<\/p>\n\n\n\n<p><strong>Documenta\u00e7\u00e3o e Testes<\/strong>&nbsp;<\/p>\n\n\n\n<p>Cada plugin deve ser bem documentado e passar por testes rigorosos para garantir funcionalidade e integra\u00e7\u00e3o sem problemas com outros componentes do sistema.&nbsp;<\/p>\n\n\n\n<p><strong>Arquitetura e Integra\u00e7\u00e3o com Microservi\u00e7os<\/strong>&nbsp;<\/p>\n\n\n\n<p>Cada servi\u00e7o \u00e9 respons\u00e1vel por uma funcionalidade espec\u00edfica, facilitando a escalabilidade e manuten\u00e7\u00e3o do sistema.&nbsp;<\/p>\n\n\n\n<p><strong>APIs<\/strong><\/p>\n\n\n\n<p>Utilizar APIs REST em JSON para comunica\u00e7\u00e3o entre os microservi\u00e7os, frontend e backend, garantindo intera\u00e7\u00e3o eficiente e flex\u00edvel.<\/p>\n\n\n\n<p><strong>Arquivos<\/strong><\/p>\n\n\n\n<p>Utilizar servidor de arquivos ( file server ) para fazer uploads e downloads atrav\u00e9s da API.<\/p>\n\n\n\n<p><strong>Autentica\u00e7\u00e3o e Autoriza\u00e7\u00e3o<\/strong>&nbsp;<\/p>\n\n\n\n<p>Implementar mecanismos robustos de autentica\u00e7\u00e3o e autoriza\u00e7\u00e3o para proteger a comunica\u00e7\u00e3o entre os servi\u00e7os e garantir a seguran\u00e7a dos dados.\u00a0<\/p>\n\n\n\n<p><strong>Seguran\u00e7a<\/strong><\/p>\n\n\n\n<p>Utilizar a seguran\u00e7a do sistema *Gerais para liberar acesso a administra\u00e7\u00e3o e autenticar\u00a0envio dos arquivos ao file server.<\/p>\n\n\n\n<p><strong>Manuten\u00e7\u00e3o e Suporte<\/strong>&nbsp;<\/p>\n\n\n\n<p><strong>Atualiza\u00e7\u00f5es Regulares<\/strong>&nbsp;<\/p>\n\n\n\n<p>Manter todos os componentes do sistema atualizados, incluindo WordPress, plugins e depend\u00eancias de microservi\u00e7os.&nbsp;<\/p>\n\n\n\n<p><strong>Sistema de Suporte Interno<\/strong>&nbsp;<\/p>\n\n\n\n<p>Estabelecer um sistema de suporte interno para resolver rapidamente quaisquer problemas, garantindo a continuidade e efici\u00eancia das opera\u00e7\u00f5es.&nbsp;<\/p>\n\n\n\n<p><strong>Monitoramento Cont\u00ednuo<\/strong>&nbsp;<\/p>\n\n\n\n<p>Implementar ferramentas de monitoramento para acompanhar a performance do sistema e identificar poss\u00edveis problemas em tempo real, permitindo uma resposta r\u00e1pida e eficaz.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"25-testes\"><strong>2.5 &#8211; TESTES<\/strong><\/h4>\n\n\n\n<p>Os testes automatizados buscam garantir a qualidade e padr\u00e3o das aplica\u00e7\u00f5es, seguindo as regras de neg\u00f3cio e os prot\u00f3tipos determinados. Para tanto, o Selenium Java foi escolhido para tal finalidade por possuir uma vasta quantidade de recursos que permitem automa\u00e7\u00f5es robustas.<\/p>\n\n\n\n<p>O Selenium Java \u00e9 uma ferramenta utilizada no java que permite acessar e navegar por p\u00e1ginas web de forma automatizada, parametrizada e que permite verificar exist\u00eancia e funcionalidade de elementos nas p\u00e1ginas.<\/p>\n\n\n\n<p>Um grande diferencial do Selenium Java \u00e9 a possibilidade de integra\u00e7\u00e3o com o Jenkins via maven, al\u00e9m de executar os testes em paralelo, reduzindo consideravelmente o tempo de execu\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"3-padr\u00f5es-de-desenvolvimento\"><strong>3 &#8211; PADR\u00d5ES DE DESENVOLVIMENTO<\/strong><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"31-camadas-no-backend\"><strong>3.1 &#8211; CAMADAS NO BACKEND<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"311-java\"><strong>3.1.1 &#8211; JAVA<\/strong><\/h5>\n\n\n\n<p><span class=\"TextRun SCXW107358875 BCX9\" lang=\"PT-BR\" xml:lang=\"PT-BR\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW107358875 BCX9\">Baseado em organiza\u00e7\u00e3o dos c\u00f3digos para garantir melhor leitura e manuten\u00e7\u00e3o de servi\u00e7os, foi definido uma arquitetura de forma que seus m\u00f3dulos possuam baixo acoplamento entre si e de f\u00e1cil compreens\u00e3o, permitindo um desenvolvimento \u00e1gil.<\/span><\/span><span class=\"EOP SCXW107358875 BCX9\" data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n\n\n\n<p><span class=\"TextRun SCXW167767099 BCX9\" lang=\"PT-BR\" xml:lang=\"PT-BR\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW167767099 BCX9\">A arquitetura base \u00e9 composta por 1 projeto \u201cpai\u201d que agrupa 4 projetos \u201cfilhos\u201d. Estes 4 projetos s\u00e3o definidos como m\u00f3dulos, e eles s\u00e3o separados em: <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW167767099 BCX9\">Dependencies<\/span><span class=\"NormalTextRun SCXW167767099 BCX9\">, <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW167767099 BCX9\">Migration<\/span><span class=\"NormalTextRun SCXW167767099 BCX9\">, <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW167767099 BCX9\">Persistence<\/span><span class=\"NormalTextRun SCXW167767099 BCX9\"> e Service.<\/span><span class=\"NormalTextRun SCXW167767099 BCX9\"> Em casos espec\u00edficos em que o projeto tenha automa\u00e7\u00f5es, <\/span><span class=\"NormalTextRun SCXW167767099 BCX9\">poder\u00e1<\/span><span class=\"NormalTextRun SCXW167767099 BCX9\"> ser inclu\u00eddo <\/span><span class=\"NormalTextRun SCXW167767099 BCX9\">os <\/span><span class=\"NormalTextRun SCXW167767099 BCX9\">m\u00f3dulos <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW167767099 BCX9\">Job<\/span><span class=\"NormalTextRun SCXW167767099 BCX9\"> e <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW167767099 BCX9\">Shared<\/span><span class=\"NormalTextRun SCXW167767099 BCX9\">.<\/span><\/span><span class=\"EOP SCXW167767099 BCX9\" data-ccp-props=\"{&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:240}\">&nbsp;<\/span><\/p>\n\n\n\n<p><strong>O M\u00f3dulo de Dependencies<\/strong> tem como objetivo gerenciar as bibliotecas que os demais m\u00f3dulos poder\u00e3o utilizar.<\/p>\n\n\n\n<p><strong>O M\u00f3dulo Migration<\/strong> \u00e9 respons\u00e1vel pela gest\u00e3o dos scripts de banco de dados que dever\u00e3o ser executados para o correto funcionamento do m\u00f3dulo Persistence. Os scripts s\u00e3o organizados em pasta de estrutura e pasta de dados. Os dados devem ser separados por ambiente (Desenvolvimento, Homologa\u00e7\u00e3o e Produ\u00e7\u00e3o).<\/p>\n\n\n\n<p><strong>O M\u00f3dulo Persistence<\/strong> \u00e9 respons\u00e1vel pelas classes Java de mapeamento objeto relacional das tabelas e seus relacionamentos. Por fim, e n\u00e3o menos importante, existe o m\u00f3dulo Service, que cont\u00e9m todo o fluxo de desenvolvimento das regras de neg\u00f3cio da aplica\u00e7\u00e3o. \u00c9 neste m\u00f3dulo que devem ser criados as Controllers (para servi\u00e7os REST), os DTOs (para objetos JSON), os EJB&#8217;s (para codifica\u00e7\u00f5es das regras de neg\u00f3cio), os DAOs (para persistir ou buscar no banco de dados).<\/p>\n\n\n\n<p><strong><span class=\"TextRun SCXW71807507 BCX9\" lang=\"PT-BR\" xml:lang=\"PT-BR\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW71807507 BCX9\">O M\u00f3dulo <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW71807507 BCX9\">Job<\/span><\/span><\/strong><span class=\"TextRun SCXW71807507 BCX9\" lang=\"PT-BR\" xml:lang=\"PT-BR\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW71807507 BCX9\"> possibilita o agendamento de tarefas, as quais ser\u00e3o executadas em hor\u00e1rios pr\u00e9-definidos.<\/span><\/span><\/p>\n\n\n\n<p><strong><span class=\"TextRun SCXW88272640 BCX9\" lang=\"PT-BR\" xml:lang=\"PT-BR\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW88272640 BCX9\">O M\u00f3dulo <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW88272640 BCX9\">Shared<\/span><\/span><\/strong><span class=\"TextRun SCXW88272640 BCX9\" lang=\"PT-BR\" xml:lang=\"PT-BR\" data-contrast=\"none\"> <span class=\"NormalTextRun SCXW88272640 BCX9\">tem como objetivo<\/span><span class=\"NormalTextRun SCXW88272640 BCX9\"> evitar que o M\u00f3dulo <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW88272640 BCX9\">Job<\/span><span class=\"NormalTextRun SCXW88272640 BCX9\"> tenha que fazer uma integra\u00e7\u00e3o para acessar a servi\u00e7os remotos dentro do projeto.<\/span><\/span><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"32-pacotes-no-frontend\"><strong>3.2 &#8211; PACOTES NO FRONTEND<\/strong><\/h4>\n\n\n\n<p>Os projetos Frontend&#8217;s da institui\u00e7\u00e3o DPMG deve seguir o Style Guide do Vue.Js por default. Sendo isso, eles devem ter separa\u00e7\u00f5es dos seus arquivos por objetivo em diret\u00f3rios: models, utils, controllers, router, service,&nbsp; store e views. Vale ressaltar que \u00e9 poss\u00edvel, e recomendado, a cria\u00e7\u00e3o de subdiret\u00f3rios para organiza\u00e7\u00e3o da feature.<\/p>\n\n\n\n<p>Todos os arquivos referentes \u00e0 algum POJO ou Model devem ficar na pasta de models, assim como todos os arquivos para consumo de API via servi\u00e7os devem ficar na pasta controllers\/services. Tudo que for \u00fatil para v\u00e1rias telas devem estar na pasta de utils. O arquivo de defini\u00e7\u00f5es do Vuetify\/Quasar fica na pasta de controllers\/plugins, assim como a configura\u00e7\u00e3o de outros plugins, caso tenha. As rotas devem ser definidas e configuradas no arquivo base (index.ts) do diret\u00f3rio router, separados por suas hooks.<\/p>\n\n\n\n<p>O Vuex\/Pinia possui uma pasta separada, com o nome de store, em que \u00e9 organizado em pastas distintas por m\u00f3dulos. As telas informadas nas rotas devem estar na pasta de views e caso alguma parte da tela seja utilizada em v\u00e1rios lugares, deve ser criado um componente gen\u00e9rico com funcionamento independente. O arquivo deste componente deve estar no diret\u00f3rio: views\/components.<\/p>\n\n\n\n<p>Obedecendo os princ\u00edpios recomendados pelo Style Guide do Vue.js, as defini\u00e7\u00f5es de nomes de vari\u00e1veis, classes e arquivos de extens\u00e3o .vue devem seguir o padr\u00e3o de CamelCase\/SnackCase. Importante ressaltar que nomes de classes e de arquivos devem ser iniciados com letra mai\u00fascula.<\/p>\n\n\n\n<p>Para o Vue.js v3.* e utilizamos para cria\u00e7\u00e3o de formul\u00e1rios o vee-validate em conjunto com Pinia sendo suas regras definidas utilizando o Yup.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"33-pacotes-no-mobile\"><strong>3.3 &#8211; PACOTES NO MOBILE<\/strong><\/h4>\n\n\n\n<p>Para trabalhar com aplicativos, devemos ter em mente alguns princ\u00edpios de Clean Code para melhorar a qualidade do seu c\u00f3digo, como por exemplo: obedecer ao padr\u00e3o de desenvolvimento (Design Pattern) e seguir a estrutura do projeto (arquitetura). Com isso a institui\u00e7\u00e3o definiu separa\u00e7\u00f5es dos arquivos em pacotes apesar de que a flexibilidade \u00e9 a marca registrada do Flutter.<\/p>\n\n\n\n<p>A organiza\u00e7\u00e3o do projeto se d\u00e1 a partir da pasta lib, que geralmente ter\u00e1 apenas o arquivo main (executa o projeto com as propriedades de um determinado ambiente) e uma pasta de src (source), nela teremos os demais arquivos Dart.<\/p>\n\n\n\n<p>No desenvolvimento de aplicativos adotamos a estrutura de pastas usando o padr\u00e3o BLoC. Os BLoC&#8217;s s\u00e3o criados para separar regras de neg\u00f3cio da interface de usu\u00e1rio, algo recomendado em diversas tecnologias, baseado em fluxos que podem ser observados de qualquer tela e parte do seu c\u00f3digo<\/p>\n\n\n\n<p>Ainda sobre a organiza\u00e7\u00e3o de pastas do projeto, deve ser separado por features (funcionalidades) em que dentro de cada uma fique todos os seus respectivos arquivos codificados, dentro de diret\u00f3rios: services, models e screens (onde ficam as screen, os blocs, as actions, os states e os listeners). As telas s\u00e3o compostas por screens que acionam states (o layout em si).<\/p>\n\n\n\n<p>O state da tela faz utiliza\u00e7\u00e3o do BLoC da feature, que consequentemente trabalha em conjunto com as actions e seus respectivos states e listeners para realizar uma a\u00e7\u00e3o final.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"4-defini\u00e7\u00f5es-de-projetos\"><strong>4 &#8211; DEFINI\u00c7\u00d5ES DE PROJETOS<\/strong><\/h2>\n\n\n\n<p>Neste t\u00f3pico abordaremos padr\u00f5es definidos pela institui\u00e7\u00e3o DPMG que devem ser seguidos no decorrer das implementa\u00e7\u00f5es das aplica\u00e7\u00f5es demandadas, sejam elas no backend, frontend ou mobile. \u00c9 importante ressaltar a necessidade disso para tornar mais eficiente a sustenta\u00e7\u00e3o dos c\u00f3digos produzidos, al\u00e9m de garantir maior seguran\u00e7a para os servidores da Defensoria P\u00fablica de Minas Gerais.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"41-tecnologias-utilizadas\"><strong>4.1 &#8211; TECNOLOGIAS UTILIZADAS<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"411-backend\"><strong>4.1.1 &#8211; BACKEND<\/strong><\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"4111-java\"><strong>4.1.1.1 &#8211; JAVA<\/strong><\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Os projetos devem ser no m\u00ednimo Java 17 ou superior;<\/li>\n\n\n\n<li>\u00c9 obrigat\u00f3rio que a cria\u00e7\u00e3o dos projetos sejam atrav\u00e9s do archtype disponibilizado pela DPMG;<\/li>\n\n\n\n<li>Todos os projetos devem possuir as depend\u00eancias: dpmg-commons e scsdp-commons;<\/li>\n\n\n\n<li>O arquivo de configura\u00e7\u00e3o do maven (settings.xml) deve ter o apontamento para o Nexus interno da DPMG para realiza\u00e7\u00e3o dos downloads.<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"4112-comandos-b\u00e1sicos\"><strong>4.1.1.2 &#8211; COMANDOS B\u00c1SICOS<\/strong><\/h6>\n\n\n\n<p>Para criar o projeto: Execute o comando na pasta onde deseja criar o projeto.<\/p>\n\n\n\n<p><strong>mvn archetype:generate -DarchetypeGroupId=br.def.mg.defensoria &#8211; DarchetypeArtifactId=archetype-backend -DarchetypeVersion=2.1.9 -Dprojeto=nome-projeto<\/strong><\/p>\n\n\n\n<p>Ps: Caso o settings do Maven n\u00e3o esteja na pasta padr\u00e3o dever\u00e1 adicionar o seguinte atributo-s \/diretorio\/arquivoSettings.xml<\/p>\n\n\n\n<p>Ao gerar esse comando ser\u00e1 gerado um projeto maven multi-modules com a camada de persist\u00eancia e servi\u00e7o, um m\u00f3dulo de depend\u00eancias tamb\u00e9m ser\u00e1 gerado com as depend\u00eancias mais utilizadas nos projetos.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"4113-configura\u00e7\u00e3o-do-projeto\"><strong>4.1.1.3 &#8211; CONFIGURA\u00c7\u00c3O DO PROJETO<\/strong><\/h6>\n\n\n\n<p>O projeto gerado ser\u00e1 montado com a seguinte Stack de tecnologias:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java 17 ou superior<\/li>\n\n\n\n<li>JPA<\/li>\n\n\n\n<li>EclipseLink<\/li>\n\n\n\n<li>Apache Commons 3.1<\/li>\n\n\n\n<li>Jakarta JAX-RS<\/li>\n\n\n\n<li>Jakarta EJB<\/li>\n\n\n\n<li>Swagger<\/li>\n\n\n\n<li>JUnit 5<\/li>\n\n\n\n<li>Lombook<\/li>\n\n\n\n<li>Integra\u00e7\u00e3o com SCSDP<\/li>\n\n\n\n<li>JACOCO<\/li>\n\n\n\n<li>Surefire reports<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"4114-depend\u00eancias-entre-projetos\"><strong>4.1.1.4 &#8211; DEPEND\u00caNCIAS ENTRE PROJETOS<\/strong><\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dpmg-commons<\/li>\n\n\n\n<li>scsdp-commons<\/li>\n<\/ul>\n\n\n\n<p>As configura\u00e7\u00f5es de charset e encode j\u00e1 ser\u00e3o realizadas. O pacote de todos os modulos j\u00e1 definidos por padr\u00e3o com o seguinte valor: br.def.mg.defensoria.nomeProjeto O groupId \u00e9 definido pelo padr\u00e3o da defensoria:br.def.mg.defensoria<\/p>\n\n\n\n<p>Observa\u00e7\u00e3o: O pacote default gerado deve ser alterado caso o nome do projeto seja composto, alterando para nome.projeto n\u00e3o \u00e9 poss\u00edvel automatizar essa parte trocando &#8220;-&#8221; por <strong>&#8220;.&#8221;<\/strong><\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"412-dpmg-api-util\"><strong>4.1.2 &#8211; DPMG API UTIL<\/strong><\/h5>\n\n\n\n<p>Classe utilit\u00e1ria utilizada para a realiza\u00e7\u00e3o de requisi\u00e7\u00f5es HTTP.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"4121--depend\u00eancias\"><strong>4.1.2.1- DEPEND\u00caNCIAS<\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.1.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Para a realiza\u00e7\u00e3o de requisi\u00e7\u00f5es do tipo GET retornando um objeto Java:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.1-segundo.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Onde:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/doc_arquitetura_4.jpg\" alt=\"img\"\/><\/figure>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"4122-exemplos\"><strong>4.1.2.2 &#8211; EXEMPLOS<\/strong><\/h6>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"41221-requisi\u00e7\u00f5es-tipo-get\"><strong>4.1.2.2.1 &#8211; REQUISI\u00c7\u00d5ES TIPO GET<\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.1.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Para adicionar query par\u00e2metro:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.1-segundo.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Para ignorar a resposta:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.1-terceiro.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"41222-requisi\u00e7\u00f5es-tipo-post\"><strong>4.1.2.2.2 &#8211; REQUISI\u00c7\u00d5ES TIPO POST<\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.2.jpg\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Onde:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/doc_arquitetura_4.1.2.2.jpg\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Para retornar uma resposta do tipo text\/plain :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.2-segundo.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"41223-requisi\u00e7\u00f5es-tipo-put\"><strong>4.1.2.2.3 &#8211; REQUISI\u00c7\u00d5ES TIPO PUT<\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.3.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Onde:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/doc_arquitetura_4.1.2.3.jpg\" alt=\"img\"\/><\/figure>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"41224-requisi\u00e7\u00f5es-tipo-delete\"><strong>4.1.2.2.4 &#8211; REQUISI\u00c7\u00d5ES TIPO DELETE<\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.4.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Onde:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/doc_arquitetura_4.1.2.4.jpg\" alt=\"img\"\/><\/figure>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"41225-para-adicionar-token-na-requisi\u00e7\u00e3o\"><strong>4.1.2.2.5 &#8211; PARA ADICIONAR TOKEN NA REQUISI\u00c7\u00c3O<\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.1.2.2.5.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Onde:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/doc_arquitetura_4.1.2.5.jpg\" alt=\"img\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"413-frontend\"><strong>4.1.3 &#8211; FRONTEND<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Os projetos novos de devem ser com Vue.js (vers\u00e3o 3.x);<\/li>\n\n\n\n<li>Obrigatoriamente o framework de componentes deve ser o Vuetify para vers\u00f5es 2.x e Quasar para vers\u00f5es 3.x, com exce\u00e7\u00f5es para situa\u00e7\u00f5es que n\u00e3o possua suporte e seja aprovado pelo l\u00edder t\u00e9cnico da DPMG;<\/li>\n\n\n\n<li>Para gerenciamento de estados, deve ser optar pela utiliza\u00e7\u00e3o da lib nativa do Vue.js: Vuex para vers\u00f5es 2.x e para vers\u00f5es 3.x utilizamos o Pinia;<\/li>\n\n\n\n<li>Toda as rotas devem ser controladas atrav\u00e9s da lib nativa do Vue.js: RouterVue;<\/li>\n\n\n\n<li>Todas as rotas obrigatoriamente precisam estar configuradas com o plugin de seguran\u00e7a da DPMG;<\/li>\n\n\n\n<li>O TypeScript \u00e9 a linguagem obrigat\u00f3ria para os projetos frontend;<\/li>\n\n\n\n<li>Parte de tela que ser\u00e3o utilizadas em mais de um lugar, deve se tornar um componente independente, para tornar a manutenibilidade mais eficaz;<\/li>\n\n\n\n<li>\u00c9 importante que os layouts, bot\u00f5es, fontes e \u00edcones estejam de acordo com a paleta de Cor da DPMG;<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"414-mobile\"><strong>4.1.4 &#8211; MOBILE<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Os projetos mobiles devem ser com Flutter (v. atual 3.0.5);<\/li>\n\n\n\n<li>A linguagem para desenvolvimento Flutter \u00e9 o Dart (v. atual 2.17.6);<\/li>\n\n\n\n<li>O ambiente deve possuir o JDK 8, para a execu\u00e7\u00e3o do SDK;<\/li>\n\n\n\n<li>A vers\u00e3o do Android SDK deve ser 32.1.0-rc1;<\/li>\n\n\n\n<li>As bibliotecas utilizadas no padr\u00e3o\/estrutura BLoC s\u00e3o 8.0.1;<\/li>\n\n\n\n<li>O banco local atualmente \u00e9 o SQFLITE na vers\u00e3o 1.3.2+1.<\/li>\n<\/ul>\n\n\n\n<p>\u00c9 importante que os layouts, bot\u00f5es, fontes e \u00edcones estejam de acordo com a Paleta de Cor da DPMG.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/paleta-cor.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Partes de telas que ser\u00e3o utilizadas em mais de um lugar, dever\u00e3o ser componentizadas, para tornar a manutenibilidade mais eficaz.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"42-plugin-de-seguran\u00e7a\"><strong>4.2 &#8211; PLUGIN DE SEGURAN\u00c7A<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"421-backend\"><strong>4.2.1 &#8211; BACKEND<\/strong><\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"4212-java\"><strong>4.2.1.2 &#8211; JAVA<\/strong><\/h6>\n\n\n\n<p>Conforme mencionado no item 4.1.1 todos os microsservi\u00e7os dos projetos obrigatoriamente devem estar com seus acessos configurados atrav\u00e9s de perfis do SCSDP. Para isso, o projeto tem que possuir a depend\u00eancia do SCSDP e assim conseguir realizar intercepta\u00e7\u00f5es das requisi\u00e7\u00f5es.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"422-frontend\"><strong>4.2.2 &#8211; FRONTEND<\/strong><\/h5>\n\n\n\n<p>Assim como no backend, \u00e9 necess\u00e1rio tamb\u00e9m realizar a configura\u00e7\u00e3o no frontend para realizar intercepta\u00e7\u00f5es das requisi\u00e7\u00f5es nas rotas, impedindo assim o acesso indevido \u00e0s funcionalidades dos projetos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5-fluxo-de-entregas-teste-e-produ\u00e7\u00e3o\"><strong>5 &#8211; FLUXO DE ENTREGAS (<strong>AMBIENTES DE DEV, TST, HML<\/strong>, PROD)<\/strong><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"51-fluxo-de-in\u00edcio-de-nova-feature\"><strong>5.1 &#8211; <strong>PADR\u00c3O DE CRIA\u00c7\u00c3O DE BRANCHs<\/strong><\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>A vers\u00e3o da aplica\u00e7\u00e3o dever\u00e1 conter 3 posi\u00e7\u00f5es, exemplo: vers\u00e3o frontend &#8220;1.0.0&#8221;;&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>&nbsp;A primeira posi\u00e7\u00e3o, diz respeito a evolu\u00e7\u00e3o arquitetural e deve ser incrementada sempre que evoluirmos arquiteturalmente a aplica\u00e7\u00e3o, exemplo: evoluir o painel de senha de VUE2 para VUE3, vers\u00e3o frontend &#8220;2.0.0&#8221;;&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>&nbsp;A segunda posi\u00e7\u00e3o, diz respeito as melhorias. Deve ser incrementada sempre que uma melhoria for realizada, exemplo: chamar a senha do assistido atrav\u00e9s de \u00e1udio no painel de senha, vers\u00e3o frontend &#8220;2.1.0&#8221;;&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>&nbsp;A terceira posi\u00e7\u00e3o, diz respeito as corre\u00e7\u00f5es de defeitos. Deve ser incrementada sempre que um defeito for corrigido, exemplo: o painel de senha est\u00e1 anunciando senhas que n\u00e3o est\u00e3o cadastradas no painel de senha, vers\u00e3o frontend &#8220;2.1.1&#8221;;&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li>Criar as branchs seguindo o padr\u00e3o:&nbsp;<br><strong>5.1.<\/strong> Branch de evolu\u00e7\u00e3o arquitetural deve seguir o padr\u00e3o de nome \u201c<strong>ARQ\/<\/strong> #N\u00fameroIssue \u2013 Descri\u00e7\u00e3o da evolu\u00e7\u00e3o arquitetural\u201d;&nbsp;&nbsp;<br><strong>5.2.<\/strong> Branch de melhoria deve seguir o padr\u00e3o de nome \u201c<strong>FEA\/<\/strong> #N\u00fameroIssue \u2013 Descri\u00e7\u00e3o da melhoria\u201d;&nbsp;&nbsp;<br><strong>5.3.<\/strong> Branch de corre\u00e7\u00e3o de defeito deve seguir o padr\u00e3o de nome \u201c<strong>FIX\/<\/strong> #N\u00fameroIssue \u2013 Descri\u00e7\u00e3o da corre\u00e7\u00e3o\u201d.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"52-feature-validada-no-ambiente-de-desenvolvimento\"><strong>5.2 &#8211; FLUXO DE IN\u00cdCIO DE DESENVOLVIMENTO<\/strong><\/h4>\n\n\n\n<p>Para iniciar uma evolu\u00e7\u00e3o arquitetural, melhoria e\/ou corre\u00e7\u00e3o, o desenvolvedor deve criar uma branch a partir da branch \u201cdev\u201d conforme padr\u00e3o citado no item 5.1. Ap\u00f3s a conclus\u00e3o, o c\u00f3digo deve ser disponibilizado na branch \u201cdev\u201d. Com isso, automaticamente ser\u00e1 disparado uma execu\u00e7\u00e3o de deploy no ambiente de desenvolvimento.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"53-fluxo-de-corre\u00e7\u00e3o-de-bugs-em-homologa\u00e7\u00e3o\"><strong>5.3 &#8211; <strong>FLUXO DE LIBERA\u00c7\u00c3O PARA O AMBIENTE DE TESTE<\/strong><\/strong><\/h4>\n\n\n\n<p>Ap\u00f3s conclus\u00e3o do deploy no ambiente de desenvolvimento deve ser realizada uma valida\u00e7\u00e3o b\u00e1sica do produto entregue. N\u00e3o havendo erros\/falhas o desenvolvedor em quest\u00e3o pode promover as altera\u00e7\u00f5es para o ambiente de teste \u201ctst\u201d atrav\u00e9s de MR (Merge Request). Al\u00e9m disso o c\u00f3digo deve atender as regras do SonarQube.&nbsp;<\/p>\n\n\n\n<p>Quando \u00e9 encontrada alguma falha na entrega realizada, o testador registra uma issue e a atribui ao desenvolvedor respons\u00e1vel pela entrega. Para realizar a corre\u00e7\u00e3o, o desenvolvedor deve criar uma branch a partir da branch \u201cdev\u201d, conforme o padr\u00e3o citado no item 5.1. Ap\u00f3s a corre\u00e7\u00e3o, o fluxo retorna ao passo 5.3.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"54-fluxo-de-entrega-para-produ\u00e7\u00e3o\"><strong>5.4 &#8211; <strong>FLUXO DE LIBERA\u00c7\u00c3O PARA O AMBIENTE DE HOMOLOGA\u00c7\u00c3O<\/strong>&nbsp;<\/strong><\/h4>\n\n\n\n<p>Ap\u00f3s a valida\u00e7\u00e3o em ambiente de teste, o l\u00edder t\u00e9cnico da DDSP deve promover as altera\u00e7\u00f5es para o ambiente de homologa\u00e7\u00e3o, com o objetivo de realizar a homologa\u00e7\u00e3o do produto com a \u00e1rea demandante.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"55-fluxo-de-hotfix\"><strong>5.5 &#8211; <strong>FLUXO DE ENTREGA PARA PRODU\u00c7\u00c3O<\/strong><\/strong><\/h4>\n\n\n\n<p>Ap\u00f3s homologa\u00e7\u00e3o com a \u00e1rea demandante (cliente), as altera\u00e7\u00f5es (evolu\u00e7\u00e3o arquitetura, melhorias ou corre\u00e7\u00f5es) seguem para o processo de delivery em ambiente de produ\u00e7\u00e3o atrav\u00e9s do l\u00edder t\u00e9cnico da DDSP.&nbsp;<\/p>\n\n\n\n<p><strong>5.6 &#8211; <strong><strong>FLUXO DE HOTFIX<\/strong><\/strong><\/strong><\/p>\n\n\n\n<p>Quando \u00e9 identificado a necessidade de uma corre\u00e7\u00e3o imediata diretamente em ambiente de produ\u00e7\u00e3o, deve-se obrigatoriamente criar uma branch de hotfix a partir da branch \u201cprod\u201d onde ser\u00e1 executada a corre\u00e7\u00e3o. Ap\u00f3s a conclus\u00e3o, deve-se disponibilizar na branch \u201cprod\u201d a corre\u00e7\u00e3o atrav\u00e9s de MR. A branch deve seguir o padr\u00e3o de cria\u00e7\u00e3o definido no item 5.1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"6-configura\u00e7\u00f5es\"><strong>6 &#8211; CONFIGURA\u00c7\u00d5ES<\/strong><\/h2>\n\n\n\n<p>Neste t\u00f3pico iremos abordar ferramentas e configura\u00e7\u00f5es dos projetos, ensinando o colaborador a instalar e utilizar conforme necessidade da demanda. Os prints de exemplos contidos aqui podem vir a ser diferente da vers\u00e3o da ferramenta utilizada pelo profissional no futuro.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"61-ferramentas-de-desenvolvimento\"><strong>6.1 &#8211; FERRAMENTAS DE DESENVOLVIMENTO<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"611-backend-frontend-e-mobile\"><strong>6.1.1 &#8211; BACKEND, FRONTEND E MOBILE<\/strong><\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6111-intellij-idea-community-20211-build-2116693111\"><strong>6.1.1.1 &#8211; INTELLIJ IDEA COMMUNITY (2021.1, Build: 211.6693.111)<\/strong><\/h6>\n\n\n\n<p>IntelliJ IDEA \u00e9 um ambiente de desenvolvimento integrado (IDE) para linguagens JVM, desenvolvida para maximizar a produtividade do desenvolvimento. Ele faz a rotina e as tarefas repetitivas para voc\u00ea, fornecendo uma inteligente complementa\u00e7\u00e3o de c\u00f3digo, an\u00e1lise est\u00e1tica de c\u00f3digo, refatoramentos, permitindo ao desenvolvedor manter o foco apenas no lado importante do desenvolvimento de software. IntelliJ IDEA foi desenvolvido como um IDE para linguagens JVM, mas diversos plugins pode extende-la para proporcionar uma experi\u00eancia poliglota.<\/p>\n\n\n\n<p><strong>Linguagens JVM suportadas<\/strong>: <em>Java, Kotlin, Scala, Groovy<\/em><\/p>\n\n\n\n<p><strong>Outras linguagens<\/strong>: <em>Python, Ruby, PHP, SQL, Go, JavaScript, TypeScript, CoffeeScript, Thymeleaf, JSON, Markdown, HTML e XHTML, XML e XSL, XPath e XSLT, Velocity e FreeMarker, StyleSheet (CSS, Less, Sass), Dart, Erlang.<\/em><\/p>\n\n\n\n<p>O Intellij \u00e9 a IDE preferencial para codifica\u00e7\u00e3o dos projetos (backend, frontend e mobile). Para utiliza\u00e7\u00e3o, o desenvolvedor deve acessar o site oficial do fabricante: (Jetbrains) <a href=\"http:\/\/www.jetbrains.com\/idea\/download\/#section=windows\">http:\/\/www.jetbrains.com\/idea\/download\/#section=windows<\/a>. E realizar o download conforme o seu sistema operacional. (No exemplo abaixo foi utilizado o Windows)<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/1.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Ap\u00f3s concluir o download da ferramenta, localize o arquivo e o <strong>execute<\/strong>. Nos passos da instala\u00e7\u00e3o deve ser definido o diret\u00f3rio da instala\u00e7\u00e3o e na sequ\u00eancia clique em <strong>&#8220;Next&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/2.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>O processo de instala\u00e7\u00e3o desta ferramenta n\u00e3o possui nenhuma diferen\u00e7a das demais instala\u00e7\u00f5es convencionais. Ap\u00f3s a conclus\u00e3o da instala\u00e7\u00e3o clique para iniciar o programa e em seguida clique em <strong>&#8220;Finish&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/3.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>No fluxo de inicializa\u00e7\u00e3o selecione o termo de aceite, e clique em <strong>&#8220;Continue&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/4.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Com a ferramenta j\u00e1 em execu\u00e7\u00e3o, deve-se <strong>realizar o login<\/strong> com a finalidade de ativar a licen\u00e7a fornecida pela institui\u00e7\u00e3o DPMG:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/5.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Com a ferramenta ativada, inicia-se a configura\u00e7\u00e3o global. Para isso, clique em <strong>&#8220;Customize&#8221;<\/strong> e em seguida <strong>&#8220;All Settings<\/strong>&#8220;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/6.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>\u00c9 necess\u00e1rio que a ferramenta esteja com o Copyright devidamente configurado, para isso, no campo de busca, localize a aba de <strong>&#8220;Copyright Profiles&#8221;<\/strong> e clique no \u00edcone de <strong>Importar<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/7.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Localize no computador o arquivo de profile do Copyright fornecido pela institui\u00e7\u00e3o DPMG:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/8.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Se a tela estiver igual a evid\u00eancia abaixo, significa que tudo ocorreu corretamente com a importa\u00e7\u00e3o do profile de Copyright, clique em <strong>&#8220;Apply&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/9.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Para padronizar os atalhos de desenvolvimento mundialmente utilizados, deve-se a encontrar a aba de <strong>&#8220;Keymap&#8221;<\/strong> e suas op\u00e7\u00f5es:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/10.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Selecione a op\u00e7\u00e3o Eclipse:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/11.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Se a tela estiver igual a evid\u00eancia abaixo, significa que os principais atalhos de desenvolvimento durante utiliza\u00e7\u00e3o da ferramenta seguir\u00e1 o padr\u00e3o da IDE Eclipse, clique em <strong>&#8220;Apply&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/12.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Para realizar download das depend\u00eancias dos projetos que ser\u00e3o utilizados na ferramenta, \u00e9 necess\u00e1rio que seja realizado o apontamento para o reposit\u00f3rio Nexus da DPMG. Para isso, localize a aba <strong>&#8220;Maven&#8221;<\/strong>, localize a op\u00e7\u00e3o <strong>&#8220;User settings file&#8221;<\/strong>, clique em <strong>&#8220;Override&#8221;<\/strong> e em seguida no \u00edcone, ao lado, de uma pasta:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/13.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Localize na sua m\u00e1quina o arquivo &#8220;settings.xml&#8221; fornecido pela institui\u00e7\u00e3o DPMG, que conter\u00e1 os apontamentos necess\u00e1rios:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/14.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Com a op\u00e7\u00e3o de <strong>&#8220;Override&#8221;<\/strong> selecionada, e com o arquivo devidamente informado, clique em <strong>&#8220;Apply&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/15.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Por fim, devemos realizar instala\u00e7\u00f5es de plugins \u00fateis pra auxiliar o desenvolvimento, para isso localize a aba <strong>&#8220;Plugins&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/16.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Fa\u00e7a a instala\u00e7\u00e3o dos seguintes plugins: <strong>Flutter, Dart e Vue.js<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/17.png\" alt=\"img\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/18.png\" alt=\"img\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/19.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Ap\u00f3s a instala\u00e7\u00e3o do \u00faltimo plugin, clique em <strong>&#8220;OK&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/20.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Com isso, a ferramenta Intellij estar\u00e1 devidamente configurada, e pode-se dar in\u00edcio \u00e0 abertura do seu projeto Maven, clicando em <strong>&#8220;Projects&#8221;<\/strong> e em seguida, clicando em <strong>&#8220;Open&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/21.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"612-outras-ides\"><strong>6.1.2 &#8211; OUTRAS IDEs<\/strong><\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6121-visual-studio-code-vscode-v155\"><strong>6.1.2.1 &#8211; VISUAL STUDIO CODE &#8211; VSCODE (v1.5.5+)<\/strong><\/h6>\n\n\n\n<p>Visual Studio Code \u00e9 um editor de c\u00f3digo-fonte, leve por\u00e9m poderoso, dispon\u00edvel para Windows, Linux e MacOS. Ele vem com suporte integrado para JavaScript, TypeScript e Node.js e tem um rico ecossistema de extens\u00f5es para outras linguagens (como C ++, C #, Java, Python, PHP, Go) e tempos de execu\u00e7\u00e3o (como .NET e Unity).<\/p>\n\n\n\n<p>No Visual Studio Code, temos suporte para quase todas as principais linguagens de programa\u00e7\u00e3o, como por exemplo, JavaScript, TypeScript, CSS e HTML, mas mais extens\u00f5es de linguagem rica podem ser encontradas no VS Code Marketplace.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6122-eclipse-ide-for-java-ee-developers-eclipse-ide-2021-03-r-packages-v1419\"><strong>6.1.2.2 &#8211; ECLIPSE IDE FOR JAVA EE DEVELOPERS (Eclipse IDE 2021-03 R Packages v14.19+)<\/strong><\/h6>\n\n\n\n<p>A plataforma Eclipse \u00e9 fornecida com um ambiente de desenvolvimento integrado (IDE) Java completo. O conjunto de ferramentas de desenvolvimento Java (JDT) permite aos usu\u00e1rios escrever, compilar, testar, depurar e editar programas escritos na linguagem de programa\u00e7\u00e3o Java, consequentemente contribuindo com a visualiza\u00e7\u00e3o, edi\u00e7\u00e3o e a\u00e7\u00f5es espec\u00edficas do Java para o ambiente de trabalho.<\/p>\n\n\n\n<p>**Principais Ferramentas: **<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Plataforma de ferramentas de dados;<\/li>\n\n\n\n<li>Provedor de equipe Eclipse Git;<\/li>\n\n\n\n<li>Eclipse Java Development Tools;<\/li>\n\n\n\n<li>Eclipse Java EE Developer Tools;<\/li>\n\n\n\n<li>Ferramentas de desenvolvimento de JavaScript;<\/li>\n\n\n\n<li>Integra\u00e7\u00e3o Maven para Eclipse;<\/li>\n\n\n\n<li>Lista de Tarefas Mylyn;<\/li>\n\n\n\n<li>Ambiente de desenvolvimento de plug-in Eclipse;<\/li>\n\n\n\n<li>Explorador de sistema remoto;<\/li>\n\n\n\n<li>Editores e ferramentas do Eclipse XML.<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6123-xcode-v124\"><strong>6.1.2.3 &#8211; XCODE (v12.4+)<\/strong><\/h6>\n\n\n\n<p>O Xcode consiste em um conjunto de ferramentas que os desenvolvedores usam para construir aplicativos para as plataformas Apple. Usa-se o Xcode para gerenciar todo o fluxo de trabalho de desenvolvimento &#8211; desde a cria\u00e7\u00e3o do seu aplicativo at\u00e9 o teste, a otimiza\u00e7\u00e3o e o envio para a App Store. Ele pode iniciar suas ferramentas de desenvolvimento ou voc\u00ea pode inici\u00e1-las independentemente do menu Xcode.<\/p>\n\n\n\n<p><strong>Principais ferramentas:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simulador para fazer prototipagem r\u00e1pida e testar seu aplicativo em um ambiente simulado quando um dispositivo real n\u00e3o estiver dispon\u00edvel. O simulador fornece ambientes para dispositivos iPhone, iPad, Apple Watch e Apple TV com diferentes configura\u00e7\u00f5es, arquivos e vers\u00f5es de sistema operacional;<\/li>\n\n\n\n<li>Instrumentos para criar um perfil e analisar seu aplicativo, melhorar o desempenho e encontrar problemas de mem\u00f3ria. Instrumentos coleta dados e apresenta os resultados usando diferentes ferramentas chamadas instrumentos;<\/li>\n\n\n\n<li>Create ML para criar e treinar modelos de aprendizado de m\u00e1quina personalizados para seu aplicativo;<\/li>\n\n\n\n<li>Reality Composer para construir composi\u00e7\u00f5es 3D e experi\u00eancias de realidade aumentada (AR).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"62-cliente-de-banco-de-dados-db\"><strong>6.2 &#8211; CLIENTE DE BANCO DE DADOS (DB)<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"621-dbeaver-v2103\"><strong>6.2.1 &#8211; DBEAVER (v21.0.3+)<\/strong><\/h5>\n\n\n\n<p>Dbeaver \u00e9 uma ferramenta de Banco de Dados gratuita, opensource, para desenvolvedores e administradores de banco de dados. A ferramenta \u00e9 escrita em Java e baseada na plataforma Eclipse.<\/p>\n\n\n\n<p><strong>Principais caracter\u00edsticas:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usabilidade \u00e9 o objetivo principal deste projeto. A IU do programa \u00e9 cuidadosamente projetada e implementada;<\/li>\n\n\n\n<li>\u00c9 gratuito e de c\u00f3digo aberto;<\/li>\n\n\n\n<li>\u00c9 multiplataforma;<\/li>\n\n\n\n<li>\u00c9 baseado em framework de c\u00f3digo aberto e permite a escrita de v\u00e1rias extens\u00f5es (plugins);<\/li>\n\n\n\n<li>Suporta qualquer banco de dados com driver JDBC;<\/li>\n\n\n\n<li>Ele pode lidar com qualquer fonte de dados externa que pode ou n\u00e3o ter um driver JDBC;<\/li>\n\n\n\n<li>H\u00e1 um conjunto de plug-ins para diferentes bancos de dados e diferentes utilit\u00e1rios de gerenciamento de banco de dados (por exemplo, ERD, transfer\u00eancia de dados, compara\u00e7\u00e3o, exporta\u00e7\u00e3o \/ importa\u00e7\u00e3o de dados, gera\u00e7\u00e3o de dados simulados, etc);<\/li>\n\n\n\n<li>Possui um grande n\u00famero de recursos.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"63-banco-de-dados\"><strong>6.3 &#8211; BANCO DE DADOS<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"631-sql\"><strong>6.3.1 &#8211; SQL<\/strong><\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6311-mysql-v5534\"><strong>6.3.1.1 &#8211; MYSQL (v5.5.34)<\/strong><\/h6>\n\n\n\n<p>O MySQL foi criado na Su\u00e9cia por suecos e um finland\u00eas: David Axmark, Allan Larsson e Michael &#8220;Monty&#8221; Widenius, que t\u00eam trabalhado juntos desde a d\u00e9cada de 1980. Hoje seu desenvolvimento e manuten\u00e7\u00e3o empregam aproximadamente 400 profissionais no mundo inteiro, e mais de mil contribuem testando o software, integrando-o a outros produtos, e escrevendo a respeito dele.<\/p>\n\n\n\n<p>O sucesso do MySQL deve-se em grande medida \u00e0 f\u00e1cil integra\u00e7\u00e3o com o PHP inclu\u00eddo, quase que obrigatoriamente, nos pacotes de hospedagem de sites da Internet oferecidos atualmente. Sem entrar muito nos m\u00e9ritos t\u00e9cnicos, os principais processos e caracter\u00edsticas que acontecem em um ambiente MySQL s\u00e3o os mesmos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O MySQL cria um banco de dados para armazenamento e manipula\u00e7\u00e3o de dados, definindo a rela\u00e7\u00e3o de cada tabela;<\/li>\n\n\n\n<li>Clientes podem fazer solicita\u00e7\u00f5es digitando comandos SQL espec\u00edficos no MySQL;<\/li>\n\n\n\n<li>A aplica\u00e7\u00e3o do servidor responde com a informa\u00e7\u00e3o solicitada fazendo aparecer no cliente;<\/li>\n\n\n\n<li>Flexibilidade e facilidade de uso;<\/li>\n\n\n\n<li>Alto Desempenho e Seguran\u00e7a.<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6312-postgressql-122-131\"><strong>6.3.1.2 &#8211; POSTGRESSQL (12.2\/ 13.1)<\/strong><\/h6>\n\n\n\n<p>PostgreSQL \u00e9 um sistema de gerenciador de banco de dados objeto relacional (SGBD), desenvolvido como um projeto open-source. O PostgreSQL foi o pioneiro em muitos conceitos que s\u00f3 se tornaram dispon\u00edveis em alguns sistemas de banco de dados comerciais muito mais tarde.<\/p>\n\n\n\n<p>O PostgreSQL foi projetado para rodar em plataformas semelhantes ao Unix. No entanto, o PostgreSQL tamb\u00e9m foi projetado para ser port\u00e1til, para que pudesse ser executado em v\u00e1rias plataformas, como Mac OS X, Solaris e Windows. \u00c9 f\u00e1cil de manter devido a sua estabilidade. Portanto, se voc\u00ea desenvolver aplica\u00e7\u00f5es baseados no PostgreSQL, o custo de desenvolvimento ser\u00e1 baixo em compara\u00e7\u00e3o com outros sistemas de gerenciamento de banco de dados.<\/p>\n\n\n\n<p>O PostgreSQL \u00e9 um descendente de c\u00f3digo aberto do c\u00f3digo original desenvolvido em Berkeley e suporta uma grande parte do padr\u00e3o SQL e oferece muitas caracter\u00edsticas modernas, como \u00e9 o caso de chaves estrangeiras, functions, triggers, Views, integridades transacionais, data types, fun\u00e7\u00f5es agregadas, operadores, dentre muitos outros. Ele consiste em um processo de servidor que l\u00ea e grava os arquivos de banco de dados reais, e um conjunto de programas cliente que se comunicam com o servidor. O mais comumente utilizado \u00e9 o comando psql, que permite ao usu\u00e1rio executar consultas SQL e visualizar os seus resultados.<\/p>\n\n\n\n<p>**O PostgreSQL oferece muitos recursos: **<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consultas complexas;<\/li>\n\n\n\n<li>Chaves estrangeiras (Foreign keys);<\/li>\n\n\n\n<li>Triggers;<\/li>\n\n\n\n<li>Views atualiz\u00e1veis;<\/li>\n\n\n\n<li>Integridade transacional;<\/li>\n\n\n\n<li>Controle de simultaneidade multivers\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p>De v\u00e1rias maneiras, o usu\u00e1rio ainda pode customizar adicionando novos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tipos de dados;<\/li>\n\n\n\n<li>Fun\u00e7\u00f5es;<\/li>\n\n\n\n<li>Operadores;<\/li>\n\n\n\n<li>Fun\u00e7\u00f5es agregadas;<\/li>\n\n\n\n<li>M\u00e9todos de \u00edndice.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"632-nosql\"><strong>6.3.2 &#8211; NOSQL<\/strong><\/h5>\n\n\n\n<p>Banco de dados NoSQL (\u201cnot only SQL\u201d) s\u00e3o n\u00e3o tabulares e armazenam dados de forma diferente das tabelas relacionais, bancos de dados NoSQL vem com uma variedade de tipos baseada no seu modelo de dados. Os principais tipos s\u00e3o documentos, chave-valor, coluna ampla e grafo. Eles prov\u00eam esquemas flex\u00edveis e escalam facilmente com grandes por\u00e7\u00f5es de dados e altas cargas de usu\u00e1rios.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6321-mongodb-v442\"><strong>6.3.2.1 &#8211; MONGODB (v.4.4.2)<\/strong><\/h6>\n\n\n\n<p>MongoDB \u00e9 o banco de dados orientado a documentos, projetado para o desenvolvimento de aplica\u00e7\u00f5es modernas, est\u00e1 dispon\u00edvel como software para download e tamb\u00e9m na forma de um banco de dados como servi\u00e7o (DBaaS) totalmente gerenciado. A grande caracter\u00edstica de Banco de Dados Orientados a Documentos \u00e9 possuir todas as informa\u00e7\u00f5es relevantes em um \u00fanico documento, ser livre de esquemas, possuir identificadores \u00fanicos universais (UUID), possibilitar a consulta de documentos pelo uso de m\u00e9todos avan\u00e7ados de agrupamento e filtragem (MapReduce) e tamb\u00e9m permitir redund\u00e2ncia e inconsist\u00eancia.<\/p>\n\n\n\n<p>Um registro no MongoDB \u00e9 um documento, que \u00e9 uma estrutura de dados composta de pares campo e valor. Documentos MongoDB s\u00e3o similares a objetos JSON. Os valores dos campos podem incluir outros documentos, arrays e arrays de documentos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/mongo.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p><strong>Caracter\u00edsticas:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Alto desempenho;<\/li>\n\n\n\n<li>N\u00e3o possui esquemas;<\/li>\n\n\n\n<li>Multiplataforma.<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6322-apache-cassandra-344\"><strong>6.3.2.2 &#8211; APACHE CASSANDRA (3.4.4)<\/strong><\/h6>\n\n\n\n<p>Apache Cassandra \u00e9 um banco de dados distribu\u00eddo NoSQL de c\u00f3digo aberto confi\u00e1vel por milhares de empresas para escalabilidade e alta disponibilidade sem comprometer o desempenho. A escalabilidade linear e a toler\u00e2ncia a falhas comprovada em hardware comum ou infraestrutura em nuvem tornam-no a plataforma perfeita para dados de miss\u00e3o cr\u00edtica.<\/p>\n\n\n\n<p>O Cassandra foi inicialmente desenvolvido pelo Facebook para ser utilizado na busca da caixa de entrada de mensagens. Seu modelo de distribui\u00e7\u00e3o do sistema \u00e9 baseado no Dynamo (desenvolvido pela Amazon) enquanto a forma de organiza\u00e7\u00e3o dos dados \u00e9 baseado no BigTable (desenvolvido pelo Google).<\/p>\n\n\n\n<p>O Dynamo surgiu a partir da necessidade de um banco de dados simples, altamente escal\u00e1vel e confi\u00e1vel para lidar com grandes demandas de leitura\/escrita.<\/p>\n\n\n\n<p>O Big Table tamb\u00e9m surgiu como uma solu\u00e7\u00e3o altamente escal\u00e1vel e distribu\u00edda, o desafio era armazenar o volume imenso de dados de indexa\u00e7\u00e3o de todas as p\u00e1ginas web mapeadas pelo Google que \u00e9 utilizado para alimentar a busca.<\/p>\n\n\n\n<p><strong>Caracter\u00edsticas:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compat\u00edvel com todas as distribui\u00e7\u00f5es de Linux e com Mac OS;<\/li>\n\n\n\n<li>Alto desempenho em leitura e escrita;<\/li>\n\n\n\n<li>Estrutura de dados muito mais flex\u00edvel em compara\u00e7\u00e3o ao MySql;<\/li>\n\n\n\n<li>Grande elasticidade: pode-se alocar um n\u00famero maior de servidores e quando n\u00e3o for mais necess\u00e1rio, basta remov\u00ea-los da estrutura e economizar na infraestrutura;<\/li>\n\n\n\n<li>Os valores s\u00e3o armazenados e indexados por meio de uma chave.<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6323-redis-623\"><strong>6.3.2.3 &#8211; REDIS (6.2.3)<\/strong><\/h6>\n\n\n\n<p>O Redis \u00e9 um armazenamento de estrutura de dados de chave-valor de c\u00f3digo aberto e na mem\u00f3ria. O Redis oferece um conjunto de estruturas vers\u00e1teis de dados na mem\u00f3ria que permite a f\u00e1cil cria\u00e7\u00e3o de v\u00e1rias aplica\u00e7\u00f5es personalizadas.<\/p>\n\n\n\n<p>\u00c9 o armazenamento de chave-valor mais conhecido atualmente. Ele tem a licen\u00e7a BSD, \u00e9 escrito em c\u00f3digo C otimizado e \u00e9 compat\u00edvel com v\u00e1rias linguagens de desenvolvimento. Redis \u00e9 um acr\u00f4nimo de REmote DIctionary Server (servidor de dicion\u00e1rio remoto).<\/p>\n\n\n\n<p>Por conta da sua velocidade e facilidade de uso, o Redis \u00e9 uma escolha em alta demanda para aplica\u00e7\u00f5es web e m\u00f3veis, como tamb\u00e9m de jogos, tecnologia de an\u00fancios e IoT, que exigem o melhor desempenho do mercado. A AWS oferece compatibilidade com o Redis por meio de um servi\u00e7o de banco de dados gerenciado e otimizado chamado Amazon ElastiCache for Redis, al\u00e9m de permitir que os clientes executem o Redis autogerenciado no AWS EC2.<\/p>\n\n\n\n<p><strong>Os benef\u00edcios proporcionados pelo Redis s\u00e3o:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Desempenho muito r\u00e1pido. Todos os dados do Redis residem na mem\u00f3ria principal do seu servidor, em contraste com a maioria dos sistemas de gerenciamento de banco de dados que armazenam dados em disco ou SSDs;<\/li>\n\n\n\n<li>Estrutura de dados na mem\u00f3ria. O Redis permite que os usu\u00e1rios armazenem chaves que fazem o mapeamento para v\u00e1rios tipos de dados;<\/li>\n\n\n\n<li>Versatilidade e facilidade de uso. O Redis \u00e9 disponibilizado com v\u00e1rias ferramentas que tornam o desenvolvimento e as opera\u00e7\u00f5es mais r\u00e1pidas e f\u00e1ceis, inclusive o PUB\/SUB para publicar mensagens nos canais que s\u00e3o entregues para os assinantes;<\/li>\n\n\n\n<li>Replica\u00e7\u00e3o e persist\u00eancia. O Redis emprega uma arquitetura no estilo mestre\/subordinado e \u00e9 compat\u00edvel com a replica\u00e7\u00e3o ass\u00edncrona em que os dados podem ser replicados para v\u00e1rios servidores subordinados. Isso pode disponibilizar desempenho de leitura melhorado;<\/li>\n\n\n\n<li>Compatibilidade com sua linguagem de desenvolvimento preferencial. Mais de cem clientes de c\u00f3digo aberto est\u00e3o dispon\u00edveis para os desenvolvedores do Redis.<\/li>\n<\/ul>\n\n\n\n<p><strong>Casos de uso do Redis:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Armazenamento em cache. O Redis inserido na &#8220;frente&#8221; de outro banco de dados cria um cache na mem\u00f3ria com excelente desempenho para diminuir a lat\u00eancia de acesso, aumentar o throughput e facilitar a descarga de um banco de dados relacional ou NoSQL;<\/li>\n\n\n\n<li>O Redis \u00e9 altamente indicado para tarefas de gerenciamento de sess\u00f5es;<\/li>\n\n\n\n<li>Classifica\u00e7\u00f5es em tempo real. Ao usar a estrutura de dados Sorted Set do Redis, os elementos s\u00e3o mantidos em uma lista, classificada de acordo com suas pontua\u00e7\u00f5es em tempo real;<\/li>\n\n\n\n<li>Limite de taxa. O Redis pode calcular e, quando necess\u00e1rio, acelerar a taxa dos eventos, mas principalmente limitar o n\u00famero de acessos\/requisi\u00e7\u00f5es;<\/li>\n\n\n\n<li>Filas. A estrutura de dados Redis List facilita implementar uma fila leve e persistente;<\/li>\n\n\n\n<li>Chat e sistemas de mensagens. O Redis seja compat\u00edvel com salas de chat de alto desempenho, streams de coment\u00e1rios em tempo real e intercomunica\u00e7\u00f5es do servidor.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"64-ferramentas-de-migra\u00e7\u00e3o-de-dados\"><strong>6.4 &#8211; FERRAMENTAS DE MIGRA\u00c7\u00c3O DE DADOS<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"641-flyway-v782\"><strong>6.4.1 &#8211; FLYWAY (v7.8.2)<\/strong><\/h5>\n\n\n\n<p>Flyway \u00e9 uma ferramenta de migra\u00e7\u00e3o de banco de dados de c\u00f3digo aberto. Favorece fortemente a simplicidade e a conven\u00e7\u00e3o sobre a configura\u00e7\u00e3o.<\/p>\n\n\n\n<p>\u00c9 baseado em apenas 7 comandos b\u00e1sicos:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Migrar;<\/li>\n\n\n\n<li>Limpar;<\/li>\n\n\n\n<li>Informa\u00e7\u00f5es;<\/li>\n\n\n\n<li>Validar;<\/li>\n\n\n\n<li>Desfazer;<\/li>\n\n\n\n<li>Linha de Base;<\/li>\n\n\n\n<li>Reparar.<\/li>\n<\/ol>\n\n\n\n<p><strong>Migrar<\/strong><\/p>\n\n\n\n<p>Migrar o esquema para a vers\u00e3o mais recente. O Flyway criar\u00e1 a tabela de hist\u00f3rico de esquema automaticamente se ela n\u00e3o existir.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/Migrar.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Ela \u00e9 a pe\u00e7a central do fluxo de trabalho do Flyway. Ele far\u00e1 a varredura no sistema de arquivos ou no caminho de classe em busca de migra\u00e7\u00f5es dispon\u00edveis. Ele os comparar\u00e1 com as migra\u00e7\u00f5es que foram aplicadas ao banco de dados. Se alguma diferen\u00e7a for encontrada, ele migrar\u00e1 o banco de dados para fechar a lacuna.<\/p>\n\n\n\n<p>A migra\u00e7\u00e3o deve ser executado preferencialmente na inicializa\u00e7\u00e3o do aplicativo para evitar incompatibilidades entre o banco de dados e as expectativas do c\u00f3digo.<\/p>\n\n\n\n<p><strong>Limpar<\/strong><\/p>\n\n\n\n<p>Descarta todos os objetos nos esquemas configurados.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/limpar.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>O Clean \u00e9 uma grande ajuda no desenvolvimento e teste. Ele efetivamente proporcionar\u00e1 a voc\u00ea um novo come\u00e7o, limpando completamente seus esquemas configurados. Todos os objetos (tabelas, visualiza\u00e7\u00f5es, procedimentos, &#8230;) ser\u00e3o eliminados.<\/p>\n\n\n\n<p><em><strong>N\u00e3o use contra seu banco de dados de produ\u00e7\u00e3o!<\/strong><\/em><\/p>\n\n\n\n<p><strong>Informa\u00e7\u00f5es<\/strong><\/p>\n\n\n\n<p>Imprime os detalhes e informa\u00e7\u00f5es de status sobre todas as migra\u00e7\u00f5es.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"213\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2023\/12\/066ada86-8737-4b9d-8fc5-82b784377a98-1024x213.png\" alt=\"\" class=\"wp-image-426\" srcset=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2023\/12\/066ada86-8737-4b9d-8fc5-82b784377a98-1024x213.png 1024w, https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2023\/12\/066ada86-8737-4b9d-8fc5-82b784377a98-300x63.png 300w, https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2023\/12\/066ada86-8737-4b9d-8fc5-82b784377a98-768x160.png 768w, https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2023\/12\/066ada86-8737-4b9d-8fc5-82b784377a98.png 1190w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>As informa\u00e7\u00f5es permitem que voc\u00ea saiba onde voc\u00ea est\u00e1. Voc\u00ea ver\u00e1 rapidamente quais migra\u00e7\u00f5es j\u00e1 foram aplicadas, quais outras ainda est\u00e3o pendentes, quando foram executadas e se foram bem-sucedidas ou n\u00e3o.<\/p>\n\n\n\n<p><strong>Validar<\/strong><\/p>\n\n\n\n<p>Valida as migra\u00e7\u00f5es aplicadas em rela\u00e7\u00e3o \u00e0s dispon\u00edveis.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/validar.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Validar ajuda a verificar se as migra\u00e7\u00f5es aplicadas ao banco de dados correspondem \u00e0s dispon\u00edveis localmente. Isso \u00e9 muito \u00fatil para detectar altera\u00e7\u00f5es acidentais que podem impedir que voc\u00ea recrie o esquema de forma confi\u00e1vel.<\/p>\n\n\n\n<p>Validar funciona armazenando uma soma de verifica\u00e7\u00e3o (CRC32 para migra\u00e7\u00f5es SQL) quando uma migra\u00e7\u00e3o \u00e9 executada. O mecanismo de valida\u00e7\u00e3o verifica se a migra\u00e7\u00e3o localmente ainda possui a mesma soma de verifica\u00e7\u00e3o que a migra\u00e7\u00e3o j\u00e1 executada no banco de dados.<\/p>\n\n\n\n<p><strong>Desfazer<\/strong><\/p>\n\n\n\n<p>Desfaz a migra\u00e7\u00e3o com vers\u00e3o aplicada mais recentemente.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/desfazer.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Se o alvo for especificado, o Flyway tentar\u00e1 desfazer as migra\u00e7\u00f5es com a vers\u00e3o na ordem em que foram aplicadas at\u00e9 atingir uma com uma vers\u00e3o abaixo do destino. Se o grupo estiver ativo, o Flyway tentar\u00e1 desfazer todas essas migra\u00e7\u00f5es em uma \u00fanica transa\u00e7\u00e3o. Se n\u00e3o houver migra\u00e7\u00e3o com vers\u00e3o para desfazer, chamar desfazer n\u00e3o ter\u00e1 efeito.<\/p>\n\n\n\n<p><strong>Linha de base<\/strong><\/p>\n\n\n\n<p>Limita um banco de dados existente, excluindo todas as migra\u00e7\u00f5es at\u00e9 a incluis\u00e3o da linha de base.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/linha-da-base.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>A linha de base \u00e9 para apresentar o Flyway aos bancos de dados existentes, definindo a linha de base deles em uma vers\u00e3o espec\u00edfica. Isso far\u00e1 com que o Migrate ignore todas as migra\u00e7\u00f5es at\u00e9 a inclus\u00e3o da vers\u00e3o de linha de base. As migra\u00e7\u00f5es mais recentes ser\u00e3o aplicadas normalmente.<\/p>\n\n\n\n<p><strong>Reparar<\/strong><\/p>\n\n\n\n<p>Repara a tabela de hist\u00f3rico do esquema.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/reparar.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Reparar \u00e9 uma ferramenta para corrigir problemas com a tabela de hist\u00f3rico do esquema.<\/p>\n\n\n\n<p><strong>Os principais usos s\u00e3o:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remover entradas de migra\u00e7\u00e3o com falha (apenas para bancos de dados que n\u00e3o suportam transa\u00e7\u00f5es DDL);<\/li>\n\n\n\n<li>Realinha as verifica\u00e7\u00f5es, descri\u00e7\u00f5es e tipos das migra\u00e7\u00f5es aplicadas com aquelas das migra\u00e7\u00f5es dispon\u00edveis;<\/li>\n\n\n\n<li>Marca todas as migra\u00e7\u00f5es ausentes como exclu\u00eddas.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"65-ferramenta-de-alta-disponibilidade-postgres\"><strong>6.5 &#8211; FERRAMENTA DE ALTA DISPONIBILIDADE POSTGRES<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"651-patroni\"><strong>6.5.1 &#8211; PATRONI<\/strong><\/h5>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6511-servi\u00e7os-necess\u00e1rios\"><strong>6.5.1.1 SERVI\u00c7OS NECESS\u00c1RIOS<\/strong><\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HAPROXY<\/strong> : Utilizado como balanceador;<\/li>\n\n\n\n<li><strong>ETCD<\/strong> : Banco de dados chave-valor distribu\u00eddo;<\/li>\n\n\n\n<li><strong>PATRONI<\/strong> : Template em python para configura\u00e7\u00e3o de banco de dados (PostgreSQL) com alta disponibilidade. Esse servi\u00e7o abstrai Configura\u00e7\u00f5es e estrat\u00e9gias de replica\u00e7\u00e3o nativas do PostgreSQL;<\/li>\n\n\n\n<li><strong>POSTGRESQL<\/strong> : B6.5.1.2 DIAGRAMA ARQUITETURA Banco de dados relacional.<\/li>\n<\/ul>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6512-diagrama-arquitetura\"><strong>6.5.1.2 DIAGRAMA ARQUITETURA<\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"270\" height=\"300\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/12\/image-270x300.png\" alt=\"\" class=\"wp-image-415\" srcset=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/12\/image-270x300.png 270w, https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/12\/image-921x1024.png 921w, https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/12\/image-768x854.png 768w, https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/12\/image-1381x1536.png 1381w, https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/12\/image.png 1400w\" sizes=\"auto, (max-width: 270px) 100vw, 270px\" \/><\/figure>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6513-passos-para-configura\u00e7\u00e3o\"><strong>6.5.1.3 PASSOS PARA CONFIGURA\u00c7\u00c3O<\/strong><\/h6>\n\n\n\n<p>Pode-se instalar todos os servi\u00e7os necess\u00e1rios para manter o banco de dados com alta disponibilidade em uma \u00fanica VM, mas isso n\u00e3o \u00e9 uma boa pr\u00e1tica j\u00e1 que a ideia \u00e9 reduzir a depend\u00eancia de uma s\u00f3 m\u00e1quina caso essa tenha algum problema e precise ser reiniciada ou desligada.<\/p>\n\n\n\n<p>O ideal \u00e9 instalar cada servi\u00e7o necess\u00e1rio em um VM espec\u00edfica (seguindo a arquitetura de servidores da DPMG).<\/p>\n\n\n\n<p>Com base na arquitetura da DPMG, ser\u00e1 seguido os seguintes passos:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Instala\u00e7\u00e3o HAPROXY E ETCD;<\/li>\n\n\n\n<li>Instala\u00e7\u00e3o n\u00f3s PATRONI\/POSTGRESQL.<\/li>\n<\/ol>\n\n\n\n<p>Atualmente s\u00e3o ofertadas 4 VMs para disponibiliza\u00e7\u00e3o dessa infraestrutura com banco de dados. Partindo dessa premissa vamos para um caso real, segue VMs e seus respectivos servi\u00e7os que ser\u00e3o necess\u00e1rios instalar e configurar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>10.100.246.126 -&gt; HAPROXY E ETCD;<\/li>\n\n\n\n<li>10.100.246.127 -&gt; 1\u00ba N\u00d3 PATRONI;<\/li>\n\n\n\n<li>10.100.246.128 -&gt; 2\u00ba N\u00d3 PATRONI;<\/li>\n\n\n\n<li>10.100.246.129 -&gt; 3\u00ba N\u00d3 PATRONI.<\/li>\n<\/ul>\n\n\n\n<p>Antes de realizar a configura\u00e7\u00e3o dos servi\u00e7os, realize as seguintes configura\u00e7\u00f5es:<\/p>\n\n\n\n<p>Fa\u00e7a login na VM e execute o comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo su\n<\/code><\/pre>\n\n\n\n<p>Para alternar para o usu\u00e1rio sudo execute o seguinte para editar o arquivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vim \/etc\/environment**\n<\/code><\/pre>\n\n\n\n<p>Edite o arquivo acima e o deixe de acordo com o conte\u00fado abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export http_proxy=http:\/\/10.100.246.125:3128\nexport http_proxy=http:\/\/10.100.246.125:3128\nexport ftp_proxy=ftp:\/\/10.100.246.125:3128\nexport no_proxy=localhost,127.0.0.1,10.100.246.*\n<\/code><\/pre>\n\n\n\n<p>Para entrar no modo de edi\u00e7\u00e3o digite:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> 'i'\n<\/code><\/pre>\n\n\n\n<p>Movimente o cursor por meio das setas do teclado. Para sair do modo de edi\u00e7\u00e3o pressione:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> 'ESC'\n<\/code><\/pre>\n\n\n\n<p>Para salvar e sair digite o comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>:wq\n<\/code><\/pre>\n\n\n\n<p>V\u00e1 para home:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\n<\/code><\/pre>\n\n\n\n<p>Clone o projeto server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone http:\/\/gitlab.defensoria.mg.def.br\/dpmg-ddsp-infra\/server.git\n<\/code><\/pre>\n\n\n\n<p>Entre na pasta correspondente de acordo com a VM:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server\/patroni\/prod\/'X'   -&gt; sendo X o n\u00famero da VM\n<\/code><\/pre>\n\n\n\n<p>D\u00ea permiss\u00e3o para o script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 777 script.sh\n<\/code><\/pre>\n\n\n\n<p>execute o comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"652-configura\u00e7\u00e3o-etcd\"><strong>6.5.2 CONFIGURA\u00c7\u00c3O ETCD<\/strong><\/h5>\n\n\n\n<p>VM: 10.100.246.126<\/p>\n\n\n\n<p>Crie o arquivo com o nome &#8216;etcd&#8217; sem extens\u00e3o e com as seguintes configura\u00e7\u00f5es. Obs.: substitua os valores referentes ao ip da m\u00e1quina para a m\u00e1quina em que ser\u00e1 instalado o ETCD.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ETCD_INITIAL_CLUSTER_STATE=\"new\"\nETCD_NAME=\"etcd0\"\nETCD_LISTEN_PEER_URLS=\"http:\/\/0.0.0.0:2380,http:\/\/0.0.0.0:7001\"\nETCD_LISTEN_CLIENT_URLS=\"http:\/\/0.0.0.0:2379\"\nETCD_INITIAL_ADVERTISE_PEER_URLS=\"http:\/\/10.100.246.126:2380, http:\/\/localhost:2380\"\nETCD_INITIAL_CLUSTER=\"etcd0=http:\/\/10.100.246.126:2380,etcd0=http:\/\/localhost:2380\"\nETCD_ADVERTISE_CLIENT_URLS=\"http:\/\/10.100.246.126:2379\"\nETCD_INITIAL_CLUSTER_TOKEN=\"cluster_etcd_10.100.246.126\"\n<\/code><\/pre>\n\n\n\n<p>Na mesma pasta onde foi criado o arquivo etcd. Execute o seguinte script para instala\u00e7\u00e3o e configura\u00e7\u00e3o do etcd:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\napt-get install etcd -y\nsystemctl stop etcd\ncp etcd \/etc\/default\/etcd\nsystemctl start etcd\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"653-configura\u00e7\u00e3o-haproxy\"><strong>6.5.3 CONFIGURA\u00c7\u00c3O HAPROXY<\/strong><\/h5>\n\n\n\n<p>VM: 10.100.246.126<\/p>\n\n\n\n<p>Crie o arquivo com o nome &#8216;haproxy.cfg&#8217; com o seguinte conte\u00fado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nyaml\nglobal\n    maxconn 100\n\ndefaults\n    log global\n    mode tcp\n    retries 2\n    timeout client 30m\n    timeout connect 4s\n    timeout server 30m\n    timeout check 5s\n\nlisten stats\n    mode http\n    bind *:9000\n    stats enable\n    stats uri \/\n\nlisten postgres\n    bind *:5060\n    option httpchk\n    http-check expect status 200\n    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions\n    server 10.100.246.127:4433 10.100.246.127:4433 maxconn 100 check port 8008\n    server 10.100.246.128:4434 10.100.246.128:4434 maxconn 100 check port 8008\n    server 10.100.246.129:4435 10.100.246.129:4435 maxconn 100 check port 8008\n<\/code><\/pre>\n\n\n\n<p>Na mesma pasta onde foi criado o arquivo &#8216;haproxy.cfg&#8217;. Execute o seguinte script para instala\u00e7\u00e3o e configura\u00e7\u00e3o do haproxy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\napt-get install haproxy -y\nsystemctl stop haproxy\ncp haproxy.cfg \/etc\/haproxy\/haproxy.cfg\nsystemctl start haproxy\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"654-configura\u00e7\u00e3o-1\u00ba-n\u00f3-patroni\">6.5.4 CONFIGURA\u00c7\u00c3O 1\u00ba N\u00d3 PATRONI<\/h5>\n\n\n\n<p>VM: 10.100.246.127<\/p>\n\n\n\n<p>Crie o arquivo de configura\u00e7\u00e3o &#8216;patroni.yml&#8217; :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scope: geralpessoa\nname: pg0\n\nrestapi:\n  listen: 0.0.0.0:8008\n  connect_address: 127.0.0.1:8008\n\netcd:\n  host: 10.100.246.126:2379\n\nbootstrap:\n  dcs:\n    ttl: 30\n    loop_wait: 10\n    retry_timeout: 10\n    maximum_lag_on_failover: 1048576\n    postgresql:\n      use_pg_rewind: true\n      luse_slots: true\n      parameters:\n        wal_level: replica\n        hot_standby: \"on\"\n        wal_keep_size: 8\n        max_wal_senders: 5\n        max_replication_slots: 5\n        checkpoint_timeout: 30\n\n  initdb:\n  - encoding: UTF8\n  - data-checksums  \n\n  pg_hba:\n  - host all postgres all md5\n  - host replication replicator all md5\n  - host all all 0.0.0.0\/0 md5\n  - host replication replicator 0.0.0.0\/0 md5\n  - host all postgres 0.0.0.0\/0 md5 \n\n  users:\n    postgres:\n      password: senhabd\n      options:\n        - createrole\n        - createdb\n    replicator:\n      password: senhabd\n      options:\n        - replication\n\npostgresql:\n  listen: 0.0.0.0:4433\n  connect_address: 10.100.246.127:4433\n  data_dir: \/data\/postgresql\n  #config_dir: \/var\/lib\/postgresql\/data\n  bin_dir: \/usr\/lib\/postgresql\/13\/bin\n  authentication:\n    replication:\n      username: replicator\n      password: senhabd\n    superuser:\n      username: postgres\n      password: senhabd\n  parameters:\n    unix_socket_directories: '.'\n    port: 4433\n<\/code><\/pre>\n\n\n\n<p>Crie o arquivo de configura\u00e7\u00e3o patroni.service :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Runners to orchestrate a high-availability PostgreSQL\nAfter=syslog.target network.target\n\n&#91;Service]\nType=simple\n\nUser=postgres\nGroup=postgres\n\nExecStart=\/usr\/local\/bin\/patroni \/data\/patroni\/patroni.yml\n\nKillMode=process\n\nTimeoutSec=30\n\nRestart=no\n\n&#91;Install]\nWantedBy=default.targ\n<\/code><\/pre>\n\n\n\n<p>Crie o arquivo &#8216;environment&#8217; :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export http_proxy=http:\/\/10.100.246.125:3128\nexport http_proxy=http:\/\/10.100.246.125:3128\nexport ftp_proxy=ftp:\/\/10.100.246.125:3128\nexport no_proxy=localhost,127.0.0.1,10.100.246.*\n<\/code><\/pre>\n\n\n\n<p>Execute o seguinte script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n#atualiza\u00e7\u00e3o proxy\ncp environment \/etc\/environment\n\n#instala\u00e7\u00e3o postgresql 13\nsudo sh -c 'echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt $(lsb_release -cs)-pgdg main\" &gt; \/etc\/apt\/sources.list.d\/pgdg.list'\nwget --quiet -O - http:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc | sudo apt-key add -\nsudo apt-get update\nsudo apt-get -y install postgresql-13 postgresql-doc-13\nsystemctl stop postgresql\n\n\n#instala\u00e7\u00e3o PATRONI\nsudo apt-get update -y\napt-get install python3 python3-pip -y\npip3 install --upgrade setuptools\npip3 install psycopg2-binary \npip3 install patroni \npip3 install python-etcd \nmkdir \/data\/patroni -p \nchown postgres:postgres \/data\/patroni \nchmod -R 700 \/data\/patroni\n\nmkdir -p \/data\/postgresql\nchown postgres:postgres \/data\/postgresql\nchmod -R 700 \/data\/postgresql\n\n#copiando arquivos de configura\u00e7\u00e3o PATRONI\ncp patroni.yml \/data\/patroni\/patroni.yml\n\n#copiando startup script PATRONI\ncp patroni.service \/etc\/systemd\/system\/patroni.service\n\nsystemctl enable patroni\nsystemctl start patroni\n\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"655-configura\u00e7\u00e3o-2\u00ba-n\u00f3-patroni\"><strong>6.5.5 CONFIGURA\u00c7\u00c3O 2\u00ba N\u00d3 PATRONI<\/strong><\/h5>\n\n\n\n<p>VM: 10.100.246.128<\/p>\n\n\n\n<p>Crie o arquivo de configura\u00e7\u00e3o &#8216;patroni.yml&#8217; :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scope: geralpessoa\nname: pg1\n\nrestapi:\n  listen: 0.0.0.0:8008\n  connect_address: 127.0.0.1:8008\n\netcd:\n  host: 10.100.246.126:2379\n\nbootstrap:\n  dcs:\n    ttl: 30\n    loop_wait: 10\n    retry_timeout: 10\n    maximum_lag_on_failover: 1048576\n    postgresql:\n      use_pg_rewind: true\n      luse_slots: true\n      parameters:\n        wal_level: replica\n        hot_standby: \"on\"\n        wal_keep_size: 8\n        max_wal_senders: 5\n        max_replication_slots: 5\n        checkpoint_timeout: 30\n\n  initdb:\n  - encoding: UTF8\n  - data-checksums  \n\n  pg_hba:\n  - host all postgres all md5\n  - host replication replicator all md5\n  - host all all 0.0.0.0\/0 md5\n  - host replication replicator 0.0.0.0\/0 md5\n  - host all postgres 0.0.0.0\/0 md5 \n\n  users:\n    postgres:\n      password: senhabd\n      options:\n        - createrole\n        - createdb\n    replicator:\n      password: senhabd\n      options:\n        - replication\n\npostgresql:\n  listen: 0.0.0.0:4434\n  connect_address: 10.100.246.128:4434\n  data_dir: \/data\/postgresql\n  #config_dir: \/var\/lib\/postgresql\/data\n  bin_dir: \/usr\/lib\/postgresql\/13\/bin\n  authentication:\n    replication:\n      username: replicator\n      password: senhabd\n    superuser:\n      username: postgres\n      password: senhabd\n  parameters:\n    unix_socket_directories: '.'\n    port: 4434\n<\/code><\/pre>\n\n\n\n<p>Crie o arquivo de configura\u00e7\u00e3o patroni.service :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Runners to orchestrate a high-availability PostgreSQL\nAfter=syslog.target network.target\n\n&#91;Service]\nType=simple\n\nUser=postgres\nGroup=postgres\n\nExecStart=\/usr\/local\/bin\/patroni \/data\/patroni\/patroni.yml\n\nKillMode=process\n\nTimeoutSec=30\n\nRestart=no\n\n&#91;Install]\nWantedBy=default.targ\n<\/code><\/pre>\n\n\n\n<p>Crie o arquivo &#8216;environment&#8217; :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export http_proxy=http:\/\/10.100.246.125:3128\nexport http_proxy=http:\/\/10.100.246.125:3128\nexport ftp_proxy=ftp:\/\/10.100.246.125:3128\nexport no_proxy=localhost,127.0.0.1,10.100.246.*\n<\/code><\/pre>\n\n\n\n<p>Execute o seguinte script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n#!\/bin\/bash\n\n#atualiza\u00e7\u00e3o proxy\ncp environment \/etc\/environment\n\n#instala\u00e7\u00e3o postgresql 13\nsudo sh -c 'echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt $(lsb_release -cs)-pgdg main\" &gt; \/etc\/apt\/sources.list.d\/pgdg.list'\nwget --quiet -O - http:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc | sudo apt-key add -\nsudo apt-get update\nsudo apt-get -y install postgresql-13 postgresql-doc-13\nsystemctl stop postgresql\n\n\n#instala\u00e7\u00e3o PATRONI\nsudo apt-get update -y\napt-get install python3 python3-pip -y\npip3 install --upgrade setuptools\npip3 install psycopg2-binary \npip3 install patroni \npip3 install python-etcd \nmkdir \/data\/patroni -p \nchown postgres:postgres \/data\/patroni \nchmod -R 700 \/data\/patroni\n\nmkdir -p \/data\/postgresql\nchown postgres:postgres \/data\/postgresql\nchmod -R 700 \/data\/postgresql\n\n#copiando arquivos de configura\u00e7\u00e3o PATRONI\ncp patroni.yml \/data\/patroni\/patroni.yml\n\n#copiando startup script PATRONI\ncp patroni.service \/etc\/systemd\/system\/patroni.service\n\nsystemctl enable patroni\nsystemctl start patroni\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"656-configura\u00e7\u00e3o-3\u00ba-n\u00f3-patroni\">6.5.6 CONFIGURA\u00c7\u00c3O 3\u00ba N\u00d3 PATRONI<\/h5>\n\n\n\n<p>VM: 10.100.246.129<\/p>\n\n\n\n<p>Crie o arquivo de configura\u00e7\u00e3o &#8216;patroni.yml&#8217; :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scope: geralpessoa\nname: pg2\n\nrestapi:\n  listen: 0.0.0.0:8008\n  connect_address: 127.0.0.1:8008\n\netcd:\n  host: 10.100.246.126:2379\n\nbootstrap:\n  dcs:\n    ttl: 30\n    loop_wait: 10\n    retry_timeout: 10\n    maximum_lag_on_failover: 1048576\n    postgresql:\n      use_pg_rewind: true\n      luse_slots: true\n      parameters:\n        wal_level: replica\n        hot_standby: \"on\"\n        wal_keep_size: 8\n        max_wal_senders: 5\n        max_replication_slots: 5\n        checkpoint_timeout: 30\n\n  initdb:\n  - encoding: UTF8\n  - data-checksums  \n\n  pg_hba:\n  - host all postgres all md5\n  - host replication replicator all md5\n  - host all all 0.0.0.0\/0 md5\n  - host replication replicator 0.0.0.0\/0 md5\n  - host all postgres 0.0.0.0\/0 md5 \n\n  users:\n    postgres:\n      password: senhabd\n      options:\n        - createrole\n        - createdb\n    replicator:\n      password: senhabd\n      options:\n        - replication\n\npostgresql:\n  listen: 0.0.0.0:4435\n  connect_address: 10.100.246.129:4435\n  data_dir: \/data\/postgresql\n  #config_dir: \/var\/lib\/postgresql\/data\n  bin_dir: \/usr\/lib\/postgresql\/13\/bin\n  authentication:\n    replication:\n      username: replicator\n      password: senhabd\n    superuser:\n      username: postgres\n      password: senhabd\n  parameters:\n    unix_socket_directories: '.'\n    port: 4435\n<\/code><\/pre>\n\n\n\n<p>Crie o arquivo de configura\u00e7\u00e3o patroni.service :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Runners to orchestrate a high-availability PostgreSQL\nAfter=syslog.target network.target\n\n&#91;Service]\nType=simple\n\nUser=postgres\nGroup=postgres\n\nExecStart=\/usr\/local\/bin\/patroni \/data\/patroni\/patroni.yml\n\nKillMode=process\n\nTimeoutSec=30\n\nRestart=no\n\n&#91;Install]\nWantedBy=default.targ\n<\/code><\/pre>\n\n\n\n<p>Crie o arquivo &#8216;environment&#8217; :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export http_proxy=http:\/\/10.100.246.125:3128\nexport http_proxy=http:\/\/10.100.246.125:3128\nexport ftp_proxy=ftp:\/\/10.100.246.125:3128\nexport no_proxy=localhost,127.0.0.1,10.100.246.*\n<\/code><\/pre>\n\n\n\n<p>Execute o seguinte script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n#!\/bin\/bash\n\n#atualiza\u00e7\u00e3o proxy\ncp environment \/etc\/environment\n\n#instala\u00e7\u00e3o postgresql 13\nsudo sh -c 'echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt $(lsb_release -cs)-pgdg main\" &gt; \/etc\/apt\/sources.list.d\/pgdg.list'\nwget --quiet -O - http:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc | sudo apt-key add -\nsudo apt-get update\nsudo apt-get -y install postgresql-13 postgresql-doc-13\nsystemctl stop postgresql\n\n\n#instala\u00e7\u00e3o PATRONI\nsudo apt-get update -y\napt-get install python3 python3-pip -y\npip3 install --upgrade setuptools\npip3 install psycopg2-binary \npip3 install patroni \npip3 install python-etcd \nmkdir \/data\/patroni -p \nchown postgres:postgres \/data\/patroni \nchmod -R 700 \/data\/patroni\n\nmkdir -p \/data\/postgresql\nchown postgres:postgres \/data\/postgresql\nchmod -R 700 \/data\/postgresql\n\n#copiando arquivos de configura\u00e7\u00e3o PATRONI\ncp patroni.yml \/data\/patroni\/patroni.yml\n\n#copiando startup script PATRONI\ncp patroni.service \/etc\/systemd\/system\/patroni.service\n\nsystemctl enable patroni\nsystemctl start patroni\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"657-logs-patroni-patroniyml\"><strong>6.5.7 LOGS PATRONI (patroni.yml)<\/strong><\/h5>\n\n\n\n<p>Para mais informa\u00e7\u00f5es:<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttp:\/\/patroni.readthedocs.io\/en\/latest\/SETTINGS.html\n<\/div><\/figure>\n\n\n\n<p>Quando um dos n\u00f3s do PATRONI \u00e9 o PRIM\u00c1RIO, ou seja, \u00e9 o utilizado atualmente \u00e9 exibido o seguinte log em seu console:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jul 21 17:21:17 vm-spp-db121 patroni&#91;1630876]: 2021-07-21 17:21:17,977 INFO: Lock owner: pg2; I am pg2\nJul 21 17:21:17 vm-spp-db121 patroni&#91;1630876]: 2021-07-21 17:21:17,980 INFO: no action.  i am the leader with the lock\n<\/code><\/pre>\n\n\n\n<p>Quando um dos n\u00f3s para e volta, por exemplo, ao reiniciar a VM e j\u00e1 existe um n\u00f3 PRIM\u00c1RIO \u00e9 exibido o seguinte log:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jul 21 17:20:55 vm-spp-db119 patroni&#91;2072298]: 2021-07-21 17:20:55,245 INFO: establishing a new patroni connection to the postgres cluster\nJul 21 17:20:55 vm-spp-db119 patroni&#91;2072298]: 2021-07-21 17:20:55,293 INFO: no action.  i am a secondary and i am following a leader\n<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"658-comandos-\u00fateis\"><strong>6.5.8 COMANDOS \u00daTEIS<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para verificar o STATUS do servi\u00e7o do PATRONI: <strong>systemctl status patroni<\/strong><\/li>\n\n\n\n<li>Para FINALIZAR o servi\u00e7o do PATRONI: <strong>systemctl stop patroni<\/strong><\/li>\n\n\n\n<li>Para INICIAR o servi\u00e7o do PATRONI: <strong>systemctl start patroni<\/strong><\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"659-links-\u00fateis\"><strong>6.5.9 LINKS \u00daTEIS<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/patroni.readthedocs.io\/en\/latest\/rest_api.html#rest-api\">DOCUMENTA\u00c7\u00c3O API PATRONI<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.alibabacloud.com\/blog\/how-to-set-up-a-highly-available-postgresql-cluster-using-patroni-on-ubuntu-16-04_594477\">TUTORIAL CONFIGURA\u00c7\u00c3O &#8211; How to Set Up a Highly Available PostgreSQL Cluster Using Patroni on Ubuntu 16.04<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/habr.com\/en\/post\/527370\/\">TUTORIAL CONFIGURA\u00c7\u00c3O &#8211; Patroni cluster (with Zookeeper) in a docker swarm on a local machine<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/medium.com\/@nicola.vitaly\/setting-up-high-availability-postgresql-cluster-using-patroni-pgbouncer-docker-consul-and-95c70445b1b1\">TUTORIAL CONFIGURA\u00c7\u00c3O &#8211; Setting up High Availability PostgreSQL Cluster using Patroni, PGBouncer, Docker, Consul and HAProxy<\/a> (Possui diagramas que representam a arquitetura com Patroni)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"66-servi\u00e7os\"><strong>6.6 &#8211; SERVI\u00c7OS<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"661-nexus-ossv3292-02\"><strong>6.6.1 &#8211; NEXUS OSS(v3.29.2-02)<\/strong><\/h5>\n\n\n\n<p>Nexus Repository OSS \u00e9 um reposit\u00f3rio de c\u00f3digo aberto que suporta v\u00e1rios formatos de artefatos incluindo Docker, Java e NPM. Com a ferramenta de integra\u00e7\u00e3o Nexus os pipelines do seu conjunto de ferramentas podem publicar e recuperar suas aplica\u00e7\u00f5es versionadas e suas depend\u00eancias, usando reposit\u00f3rios centrais que s\u00e3o acess\u00edveis por outros ambientes.<\/p>\n\n\n\n<p>**Benef\u00edcios: **<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Centraliza\u00e7\u00e3o: proporciona ao seu time uma \u00fanica fonte confi\u00e1vel para cada componente usado;<\/li>\n\n\n\n<li>Armazenamento: otimiza o desempenho do processo de build e confiabilidade a realizar cache de proxies de reposit\u00f3rios remotos;<\/li>\n\n\n\n<li>Adapta\u00e7\u00e3o: oferece uma cobertura para todos os pacotes, tipos e formatos;<\/li>\n\n\n\n<li>Escala: instala uma quantidade ilimitada de servidores para uma quantidade ilimitada de usu\u00e1rios.<\/li>\n<\/ul>\n\n\n\n<p>**Suporte a todas as ferramentas populares de build: **<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Armazena e distribui Maven\/Java, npm, NuGet, Helm, Docker, P2, OBR, APT, GO, R, Conan components e outros;<\/li>\n\n\n\n<li>Gerencia componentes do desenvolvimento \u00e0 entrega;<\/li>\n\n\n\n<li>Impressionante suporte para o ecossistema Java Virtual Machine (JVM), incluindo Gradle, Ant, Maven, e Ivy;<\/li>\n\n\n\n<li>Compat\u00edvel com todas as ferramentas populares como Eclipse, IntelliJ, Hudson, Jenkins, Puppet, Chef, Docker, e outros.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"662-wildfly-v2102-final\"><strong>6.6.2 &#8211; WILDFLY (v21.0.2. Final)<\/strong><\/h5>\n\n\n\n<p>O WildFly, que antes se chamava JBoss AS (JBoss Application Server), \u00e9 um servidor de aplica\u00e7\u00f5es open source, escrito em Java, baseado nos padr\u00f5es definidos pela especifica\u00e7\u00e3o Java EE e mantido pela comunidade e pela empresa Red Hat (DEVMEDIA, 2020).<\/p>\n\n\n\n<p>Atualmente trabalha-se com a vers\u00e3o WildFly 21 que possui suporte para a especifica\u00e7\u00e3o Java EE 8 + Jakarta EE 8. \u00c9 utilizado para prover os servi\u00e7os backend atr\u00e1ves de APIs rest. Possui integra\u00e7\u00e3o com Apache ActiveMQ.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"663-apache-camel374\"><strong>6.6.3 &#8211; APACHE CAMEL(3.7.4)<\/strong><\/h5>\n\n\n\n<p>O Apache Camel \u00e9 uma estrutura de integra\u00e7\u00e3o de c\u00f3digo aberto vers\u00e1til baseada em padr\u00f5es de integra\u00e7\u00e3o mais conhecidas.<\/p>\n\n\n\n<p>O Camel permite definir regras de roteamento e media\u00e7\u00e3o em uma variedade de linguagens espec\u00edficas de dom\u00ednio, incluindo uma API Fluent baseada em Java, arquivos de configura\u00e7\u00e3o Spring ou Blueprint XML. Possibilitando assim o preenchimento inteligente das regras de roteamento em sua IDE, seja em um editor Java ou XML.<\/p>\n\n\n\n<p>Em um alto n\u00edvel, Camel consiste em um CamelContext que cont\u00e9m uma cole\u00e7\u00e3o de inst\u00e2ncias de Component. Um Component \u00e9 essencialmente uma f\u00e1brica de inst\u00e2ncias de Endpoint. Voc\u00ea pode configurar explicitamente as inst\u00e2ncias do Component em c\u00f3digo Java ou um cont\u00eainer IoC como Spring, ou eles podem ser descobertos automaticamente usando URIs.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/Apache-Camel-2.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"6631-wildfly-camel\"><strong>6.6.3.1 &#8211; WILDFLY CAMEL<\/strong><\/h6>\n\n\n\n<p>O WildFly Camel fornece a integra\u00e7\u00e3o do Apache Camel com o WildFly Application Server.<\/p>\n\n\n\n<p>O subsistema WildFly-Camel permite adicionar Camel Routes como parte da configura\u00e7\u00e3o do WildFly. As rotas podem ser implantadas como parte de aplicativos JavaEE. Os componentes JavaEE podem acessar a API Camel Core e v\u00e1rias APIs de componentes Camel. Possibilitando que a solu\u00e7\u00e3o de integra\u00e7\u00e3o corporativa possa ser arquitetada como uma combina\u00e7\u00e3o das funcionalidades JavaEE e Camel.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"664-nginx-1200\"><strong>6.6.4 &#8211; NGINX (1.20.0)<\/strong><\/h5>\n\n\n\n<p>O NGINX \u00e9 um famoso software de servidor web de c\u00f3digo aberto. Em sua vers\u00e3o inicial, funcionava para a veicula\u00e7\u00e3o da Web HTTP. Hoje, no entanto, tamb\u00e9m serve como proxy reverso, balanceador de carga HTTP e proxy de e-mail para IMAP, POP3 e SMTP. O projeto, criado em 2002, tinha como expectativa responder ao problema C10k \u2014 o desafio de gerenciar dez mil conex\u00f5es ao mesmo tempo.<\/p>\n\n\n\n<p>Hoje, h\u00e1 ainda mais conex\u00f5es com as quais os servidores da Web precisam lidar. Por esse motivo, o Nginx oferece uma arquitetura baseada no fluxo de tarefas. Esse recurso o torna um dos servidores mais confi\u00e1veis em termos de velocidade e escalabilidade. Devido \u00e0 sua excelente capacidade de lidar com muitas conex\u00f5es, v\u00e1rios sites de alto tr\u00e1fego t\u00eam usado o servi\u00e7o da NGINX. Alguns desses gigantes online s\u00e3o Google, Netflix, Adobe, Cloudflare, WordPress.com e muitos outros.<\/p>\n\n\n\n<p>O NGINX consome menos mem\u00f3ria que o Apache, pois lida com requisi\u00e7\u00f5es Web do tipo \u201cevent-based web server\u201d enquanto o Apache \u00e9 baseado no \u201cprocess-based server\u201d. \u00c9 trabalhar com ambos ao mesmo tempo de tal forma que seja poss\u00edvel diminuir o consumo de mem\u00f3ria do Apache, passando as requisi\u00e7\u00f5es Web primeiro no Nginx. Dessa forma, o Apache n\u00e3o precisa servir arquivos est\u00e1ticos, e pode depender do bom controle de cache feito pelo Nginx.<\/p>\n\n\n\n<p>O Nginx foi projetado desde o in\u00edcio para usar um algoritmo de tratamento de conex\u00e3o sem bloqueio e orientado a eventos. Ele gera processos de trabalho, nos quais \u00e9 poss\u00edvel manipular milhares de conex\u00f5es. Esses processos, por sua vez, implementam um mecanismo de loop r\u00e1pido, que faz uma verifica\u00e7\u00e3o cont\u00ednua e processa eventos.<\/p>\n\n\n\n<p>Cada uma das conex\u00f5es \u00e9 colocada no loop de eventos no qual elas existem com outras conex\u00f5es. Dentro do loop, os eventos s\u00e3o processados de forma ass\u00edncrona, permitindo que o trabalho seja tratado de maneira n\u00e3o bloqueante. Quando a conex\u00e3o \u00e9 fechada, ela \u00e9 removida do loop. Esse estilo de processamento de conex\u00e3o permite que o Nginx seja extremamente eficaz, mesmo com recursos limitados. Como o servidor \u00e9 de encadeamento \u00fanico e os processos n\u00e3o s\u00e3o gerados para lidar com cada nova conex\u00e3o, a mem\u00f3ria e o uso da CPU tendem a permanecer relativamente consistentes, mesmo em momentos de carga pesada.<\/p>\n\n\n\n<p>O Nginx foi desenvolvido como forma de disponibilizar um baixo uso de mem\u00f3ria, al\u00e9m de uma alta simultaneidade. Ele trabalha de forma que as solicita\u00e7\u00f5es sejam tratadas em um \u00fanico thread. Isso evita que o servidor crie processos para cada solicita\u00e7\u00e3o.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"665-nodejsv1610\"><strong>6.6.5 &#8211; NODE.js(v18.*)<\/strong><\/h5>\n\n\n\n<p>Node.js \u00e9 um ambiente de execu\u00e7\u00e3o JavaScript ass\u00edncrono orientado a eventos, dessa forma, ele \u00e9 projetado para desenvolvimento de aplica\u00e7\u00f5es escal\u00e1veis em rede. A arquitetura Node.js fornece flexibilidade e baixo custo o tornando uma boa alternativa para implementar microsservi\u00e7os e componentes da arquitetura Servless. Os usu\u00e1rios Node.js n\u00e3o precisam se preocupar com deadlocks de processo e quase nenhuma fun\u00e7\u00e3o no Node.js realiza opera\u00e7\u00f5es E\/S, sendo assim, o processo nunca bloqueia. Como n\u00e3o existem opera\u00e7\u00f5es bloqueantes, sistemas escal\u00e1veis s\u00e3o razoavelmente f\u00e1ceis de serem desenvolvidos em Node.js.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/Servidor-Node.js-modelo.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>**Utilidades mais comuns: **<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aplica\u00e7\u00f5es em tempo real;<\/li>\n\n\n\n<li>Ambientes escal\u00e1veis;<\/li>\n\n\n\n<li>Camada de entrada do servidor;<\/li>\n\n\n\n<li>Mocks e prot\u00f3tipos;<\/li>\n\n\n\n<li>API com NoSql de forma bem intuitiva.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"666-jenkins-v1610\"><strong>6.6.6 &#8211; GitLab Runner<\/strong><\/h5>\n\n\n\n<p>O GitLab Runner \u00e9 um aplicativo, de c\u00f3digo aberto, que funciona com o GitLab CI\/CD para<br>executar tarefas para qual foi designado. O principal objetivo do GitLab Runner \u00e9 a automatiza\u00e7\u00e3o de<br>processos<\/p>\n\n\n\n<p><strong>Geralmente \u00e9 utilizado para:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Constru\u00e7\u00e3o de artefatos dos projetos;<\/li>\n\n\n\n<li>Realiza\u00e7\u00e3o de backup para banco de dados;<\/li>\n\n\n\n<li>Constru\u00e7\u00e3o\/Reconstru\u00e7\u00e3o de ambientes;<\/li>\n\n\n\n<li>Monitoramento dos clusters de banco de dados.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"667-git-v284\"><strong>6.6.7 &#8211; GIT (v.2.8.4+)<\/strong><\/h5>\n\n\n\n<p>O Git \u00e9 um sistema de controle de vers\u00f5es distribu\u00eddo, usado principalmente no desenvolvimento de software.<\/p>\n\n\n\n<p>Cada diret\u00f3rio de trabalho do Git \u00e9 um reposit\u00f3rio com um hist\u00f3rico completo e habilidade total de acompanhamento das revis\u00f5es, n\u00e3o dependente de acesso a uma rede ou a um servidor central.<\/p>\n\n\n\n<p><strong>Configurando&nbsp;sua&nbsp;auditoria&nbsp;no&nbsp;Git<\/strong><br>No&nbsp;git&nbsp;existem&nbsp;configura\u00e7\u00f5es&nbsp;que&nbsp;permitem&nbsp;definir&nbsp;seu&nbsp;nome&nbsp;de&nbsp;usu\u00e1rio&nbsp;e&nbsp;seu&nbsp;e-mail,&nbsp;que&nbsp;aparecer\u00e3o&nbsp;<br>nos&nbsp;commits&nbsp;do&nbsp;reposit\u00f3rio&nbsp;remoto,&nbsp;seja&nbsp;ele&nbsp;um&nbsp;reposit\u00f3rio&nbsp;pessoal&nbsp;ou&nbsp;corporativo.&nbsp;<br>Sendo&nbsp;assim,&nbsp;\u00e9&nbsp;importante&nbsp;que&nbsp;seu&nbsp;nome&nbsp;de&nbsp;usu\u00e1rio&nbsp;e&nbsp;e-mail&nbsp;sejam&nbsp;correspondentes&nbsp;aos&nbsp;que&nbsp;foram&nbsp;<br>definidos&nbsp;para&nbsp;sua&nbsp;conta&nbsp;do&nbsp;reposit\u00f3rio&nbsp;remoto&nbsp;da&nbsp;DDSP.<\/p>\n\n\n\n<p><br>A&nbsp;autoria&nbsp;permite&nbsp;saber&nbsp;quem&nbsp;exatamente&nbsp;fez&nbsp;cada&nbsp;commit,&nbsp;e&nbsp;como&nbsp;dito,&nbsp;suas&nbsp;credenciais&nbsp;devem&nbsp;ser&nbsp;as mesmas&nbsp;que&nbsp;as&nbsp;configuradas&nbsp;no&nbsp;reposit\u00f3rio&nbsp;remoto.&nbsp;Para&nbsp;manter&nbsp;a&nbsp;organiza\u00e7\u00e3o&nbsp;em&nbsp;sua&nbsp;\u00e1rea&nbsp;de&nbsp;trabalho, separando&nbsp;seus&nbsp;projetos&nbsp;pessoais&nbsp;dos&nbsp;destinados&nbsp;ao&nbsp;trabalho,&nbsp;poder\u00e3o&nbsp;ser&nbsp;criados&nbsp;gitconfigs&nbsp;individuais.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Criando gitconfig individual<\/strong><\/p>\n\n\n\n<p>Para isso, \u00e9 recomendado que seja criada uma pasta destinada apenas aos projetos da DDSP. <\/p>\n\n\n\n<p><strong>Crie uma pasta para os projetos da Defensoria<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir ~\/Documents\/projetos-DDSP\/<\/code><\/pre>\n\n\n\n<p><strong>Crie&nbsp;um&nbsp;arquivo&nbsp;na&nbsp;pasta&nbsp;que&nbsp;foi&nbsp;destinada&nbsp;para&nbsp;o&nbsp;armazenamento&nbsp;dos&nbsp;projetos<\/strong><br>No&nbsp;Linux<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/Documents\/projetos-DDSP\/\ntouch .gitconfig<\/code><\/pre>\n\n\n\n<p>No&nbsp;Windows<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/Documents\/projetos-DDSP\/\nni .gitconfig<\/code><\/pre>\n\n\n\n<p>No&nbsp;do&nbsp;arquivo&nbsp;&#8220;<strong>.gitconfig<\/strong>&#8221;&nbsp;especifique&nbsp;seu&nbsp;nome&nbsp;de&nbsp;usu\u00e1rio&nbsp;e&nbsp;e-mail&nbsp;que&nbsp;foram&nbsp;utilizados&nbsp;para&nbsp;criar&nbsp;sua&nbsp;conta&nbsp;no&nbsp;[reposit\u00f3rio&nbsp;remoto]:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;user]\n    name = Seu Nome # Nome que est\u00e1 no endere\u00e7o de e-mail\n    email = seuemail@defensoria.mg.def.br<\/code><\/pre>\n\n\n\n<p>Inclua&nbsp;as&nbsp;configura\u00e7\u00f5es&nbsp;no&nbsp;gitconfig&nbsp;global,&nbsp;no&nbsp;arquivo&nbsp;que&nbsp;est\u00e1&nbsp;localizado&nbsp;no&nbsp;diret\u00f3rio&nbsp;local&nbsp;do&nbsp;seu&nbsp;usu\u00e1rio&nbsp;(~\/.gitconfig)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;includeIf \"gitdir:~\/Documents\/projetos-DDSP\/\"]\n  path = ~\/Documents\/projetos-DDSP\/.gitconfig<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"668-gitlab-community-edition-v121014\"><strong>6.6.8 &#8211; GITLAB COMMUNITY EDITION (v12.10.14)<\/strong><\/h5>\n\n\n\n<p>O GitLab \u00e9 um gerenciador de reposit\u00f3rio de software baseado em GIT, com suporte a Wiki, gerenciamento de tarefas e CI\/CD. Ele \u00e9 software livre, distribu\u00eddo pela Licen\u00e7a MIT.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"669-docker-19038\"><strong>6.6.9 &#8211; DOCKER (19.03.8)<\/strong><\/h5>\n\n\n\n<p>O Docker \u00e9 uma plataforma <em>open<\/em> <em>source<\/em> que facilita a cria\u00e7\u00e3o e administra\u00e7\u00e3o de ambientes isolados. Ele possibilita o empacotamento de uma aplica\u00e7\u00e3o ou ambiente dentro de um <em>container<\/em>, se tornando port\u00e1til para qualquer outro host que contenha o Docker instalado (TREINAWEB, 2021).<\/p>\n\n\n\n<p>Ent\u00e3o, voc\u00ea consegue criar, implantar, copiar e migrar de um ambiente para outro com maior flexibilidade. A ideia do Docker \u00e9 subir apenas uma m\u00e1quina, ao inv\u00e9s de v\u00e1rias. E, nessa \u00fanica m\u00e1quina, voc\u00ea pode rodar v\u00e1rias aplica\u00e7\u00f5es sem que haja conflitos entre elas (TREINAWEB, 2021).<\/p>\n\n\n\n<p><strong>Como ele funciona?<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/Docker2.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>O Docker utiliza o modelo de container para \u201cempacotar\u201d a aplica\u00e7\u00e3o que, ap\u00f3s ser transformada em imagem Docker, pode ser reproduzida em plataforma de qualquer porte.<\/p>\n\n\n\n<p>Os containers s\u00e3o isolados a n\u00edvel de disco, mem\u00f3ria, processamento e rede. Essa separa\u00e7\u00e3o permite grande flexibilidade, onde ambientes distintos podem coexistir no mesmo host, sem causar qualquer problema. Vale salientar que o overhead nesse processo \u00e9 o m\u00ednimo necess\u00e1rio, pois cada container normalmente carrega apenas um processo, que \u00e9 aquele respons\u00e1vel pela entrega do servi\u00e7o desejado. Em todo caso, esse container tamb\u00e9m carrega todos os arquivos necess\u00e1rios (configura\u00e7\u00e3o, biblioteca e afins) para execu\u00e7\u00e3o completamente isolada (STACK.DESENVOLVEDOR.EXPERT, 2021).<\/p>\n\n\n\n<p>**Quais s\u00e3o os benef\u00edcios do Docker? **<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modularidade<\/li>\n<\/ul>\n\n\n\n<p>Configura\u00e7\u00e3o e disponibiliza\u00e7\u00e3o de servi\u00e7os isoladamente.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Camadas e controle de vers\u00e3o de imagens<\/li>\n\n\n\n<li>Imagens<\/li>\n<\/ul>\n\n\n\n<p>As imagens s\u00e3o compostas por v\u00e1rias camadas.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Containers<\/li>\n<\/ul>\n\n\n\n<p>Um container \u00e9 o local onde est\u00e3o as modifica\u00e7\u00f5es da aplica\u00e7\u00e3o que est\u00e1 em execu\u00e7\u00e3o.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implanta\u00e7\u00e3o r\u00e1pida<\/li>\n<\/ul>\n\n\n\n<p>O <em>Dockerfile<\/em> e o <em>DockerCompose<\/em> traduzem para uma linguagem em comum a configura\u00e7\u00e3o do ambiente para a disponibiliza\u00e7\u00e3o de servi\u00e7os. A disponibiliza\u00e7\u00e3o \u00e9 realizada atrav\u00e9s de poucos comandos.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"6610-python-377--poowershell1001\"><strong>6.6.10 &#8211; PYTHON (3.11.7) \u2013 PoOWERSHELL(10.0.1)<\/strong><\/h5>\n\n\n\n<p>Na DPMG atualmente utilizamos o Python na vers\u00e3o <strong>3.11.7<\/strong> e o Powershell na vers\u00e3o 10.0.1, essas linguagens de programa\u00e7\u00e3o s\u00e3o utilizadas para realizar manuten\u00e7\u00f5es, automa\u00e7\u00f5es, backup e restore de algumas aplica\u00e7\u00f5es, al\u00e9m de ser usadas esporadicamente para realizarmos mudan\u00e7as em massa nos nomes de arquivos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/6.6.10.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"6611-ansible-v296\"><strong>6.6.11 &#8211; ANSIBLE (v2.9.6)<\/strong><\/h5>\n\n\n\n<p>Para gerenciar e padronizar o ambiente de servidores da DPMG atualmente utilizamos o Ansible na vers\u00e3o 2.9.6, ferramenta essa que serve para provisionar configura\u00e7\u00f5es em massa e de forma autom\u00e1tica em nossos servi\u00e7os como por exemplo o cluster Patroni, ajustes ou cria\u00e7\u00e3o de usu\u00e1rios em servidores Linux, renova\u00e7\u00e3o de certificados SSL dentre outros.<\/p>\n\n\n\n<p><em>Fluxo Ansible<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/6.6.11.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"6612-kubernets-v1236\"><strong>6.6.12 &#8211; KUBERNETS (v1.23.6)<\/strong><\/h5>\n\n\n\n<p>No cen\u00e1rio atual da defensoria trabalhamos com o conceito de micro servi\u00e7o, esses micros servi\u00e7os s\u00e3o v\u00e1rios containers que est\u00e3o configurados em v\u00e1rios servidores distintos. Para realizar a gerencias desse grande n\u00famero de containers, utilizamos uma ferramenta chamada Kubernets, com ela conseguimos orquestrar de forma menos complexa, \u00e1gil e pratica o grande n\u00famero de containers que utilizamos, desde o deploy da aplica\u00e7\u00e3o at\u00e9 o rollback. Atualmente estamos utilizando o Kubernets na vers\u00e3o 1.23.6.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/6.6.12.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"6613-rancher-v265\"><strong>6.6.13 &#8211; RANCHER (v2.6.5)<\/strong><\/h5>\n\n\n\n<p>Para gerenciar todos os n\u00f3s do cluster Kubernets utilizamos o gerenciador Rancher. O Rancher \u00e9 uma ferramenta que tem como objetivo administrar uma infraestrutura em Docker e Kubernets, a vers\u00e3o utilizada do Rancher pela infraestrutura defensoria \u00e9 a 2.6.5.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/6.6.13.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"67-servi\u00e7os-de-monitoramento\"><strong>6.7 &#8211; SERVI\u00c7OS DE MONITORAMENTO<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"671-elk\"><strong>6.7.1 &#8211; ELK<\/strong><\/h5>\n\n\n\n<p>&#8220;ELK&#8221; \u00e9 o acr\u00f4nimo para tr\u00eas projetos open source: Elasticsearch, Logstash e Kibana.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/ELK.png\" alt=\"img\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"672-elasticsearch-7121\"><strong>6.7.2 &#8211; ELASTICSEARCH (7.12.1)<\/strong><\/h5>\n\n\n\n<p><em>Elasticsearch<\/em> \u00e9 um poderoso motor de busca desenvolvido em cima do <em>Apache Lucene<\/em> (uma das bibliotecas de busca textual mais importantes do mercado). O <em>Elasticsearch<\/em> \u00e9 um mecanismo de an\u00e1lise de dados e busca <em>RESTful<\/em> distribu\u00eddo baseado em JSON. Possui integra\u00e7\u00e3o com as tecnologias Java, .NET (C#), PHP, Python, Apache Groovy, Ruby, entre outras.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"673-logstash-v79\"><strong>6.7.3 &#8211; LOGSTASH (v7.9)<\/strong><\/h5>\n\n\n\n<p>O Logstash \u00e9 um pipeline gratuito e aberto de processamento de dados do lado do servidor que faz a ingest\u00e3o de dados de in\u00fameras fontes, transformando-os e enviando-os para o seu &#8220;esconderijo&#8221; favorito.<\/p>\n\n\n\n<p>Os dados com frequ\u00eancia est\u00e3o dispersos ou isolados em muitos sistemas e em muitos formatos. O Logstash oferece suporte a uma variedade de entradas que importa eventos de in\u00fameras fontes comuns, tudo ao mesmo tempo. Fa\u00e7a a an\u00e1lise e gest\u00e3o descomplicada de logs, m\u00e9tricas, aplicativos web, armazenamentos de dados e v\u00e1rios servi\u00e7os da AWS, tudo em um fluxo cont\u00ednuo.<\/p>\n\n\n\n<p>Os pipelines do Logstash geralmente possuem m\u00faltipla finalidade e podem se tornar sofisticados, tornando assim imprescind\u00edvel um s\u00f3lido entendimento do desempenho dos pipelines, da disponibilidade e dos gargalos. Com os recursos de monitoramento e de visualiza\u00e7\u00e3o do pipeline, voc\u00ea pode observar e estudar facilmente um n\u00f3 ativo do Logstash ou at\u00e9 mesmo uma implanta\u00e7\u00e3o total.<\/p>\n\n\n\n<p>\u00c0 medida que os dados trafegam da fonte ao armazenamento, os filtros do Logstash analisam cada evento, identificam campos nomeados para desenvolver a estrutura e os transformam para convergirem em um formato comum para proporcionar uma an\u00e1lise mais poderosa e com mais valor para os neg\u00f3cios.<\/p>\n\n\n\n<p>O Logstash transforma e prepara dinamicamente os dados, independentemente do formato ou da complexidade:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Obtenha a estrutura de dados n\u00e3o estruturados com o grok<\/li>\n\n\n\n<li>Decifre coordenadas geogr\u00e1ficas de endere\u00e7os IP<\/li>\n\n\n\n<li>Anonimize os dados de PII, exclua os campos sens\u00edveis completamente<\/li>\n\n\n\n<li>Facilite o processamento geral, independentemente da fonte, do formato ou do esquema dos dados.<\/li>\n<\/ul>\n\n\n\n<p>As possibilidades s\u00e3o infinitas com a nossa avan\u00e7ada biblioteca de filtros e o vers\u00e1til Elastic Common Schema.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"674-kibana-v712\">6.7.4 &#8211; KIBANA (v7.12)<\/h5>\n\n\n\n<p>O Kibana \u00e9 uma aplica\u00e7\u00e3o gratuita e aberta de front-end que trabalha com o Elastic Stack, fornecendo recursos de busca e visualiza\u00e7\u00e3o de dados indexados no Elasticsearch. Comumente conhecido como a ferramenta de gr\u00e1ficos para o Elastic Stack (que anteriormente chamava-se ELK Stack ap\u00f3s o Elasticsearch, o Logstash e o Kibana), o Kibana tamb\u00e9m atua como interface do usu\u00e1rio para monitorar, gerenciar e proteger um cluster do Elastic Stack, al\u00e9m de ser o hub centralizado para solu\u00e7\u00f5es integradas desenvolvidas no Elastic Stack. Desenvolvido em 2013 a partir da comunidade do Elasticsearch, o Kibana cresceu e se tornou a janela de acesso ao pr\u00f3prio Elastic Stack, oferecendo um portal para usu\u00e1rios e empresas.<\/p>\n\n\n\n<p>Com o Kibana \u00e9 poss\u00edvel:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pesquisar, observar e proteger as informa\u00e7\u00f5es. Da descoberta de documentos \u00e0 an\u00e1lise de logs, e a descoberta de vulnerabilidades de seguran\u00e7a;<\/li>\n\n\n\n<li>Visualizar e analisar os dados em gr\u00e1ficos, medidores, mapas, al\u00e9m de combin\u00e1-los em um painel. Com o Kibana tamb\u00e9m \u00e9 poss\u00edvel pesquisar por insights ocultos;<\/li>\n\n\n\n<li>Gerenciar, monitorar e proteger o Elastic Stack. Gerenciar os \u00edndices e ingest\u00e3o de pipelines, monitorar a integridade do cluster do Elastic Stack e controlar quais usu\u00e1rios tem acessos a quais recursos.<\/li>\n<\/ul>\n\n\n\n<p>Kibana \u00e9 para administradores, analistas e usu\u00e1rios de neg\u00f3cio. Trabalha com todos os tipos de dados. O n\u00facleo do Kibana fornece os recursos cl\u00e1ssicos: histogramas, gr\u00e1ficos de linha, gr\u00e1ficos de pizza, explos\u00e3o solar e muitos outros. E, evidentemente, voc\u00ea pode buscar por todos os documentos.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"675-filebeat-770\"><strong>6.7.5 &#8211; FILEBEAT (7.7.0)<\/strong><\/h5>\n\n\n\n<p>O <em>Filebeat<\/em> \u00e9 um <em>log shipper<\/em> pertencente \u00e0 fam\u00edlia <em>Beats<\/em>, que chama a aten\u00e7\u00e3o pela praticidade de configura\u00e7\u00e3o e pela pequena quantidade de recursos de sistema que consome. Na pr\u00e1tica ele funciona como um agente de envio de logs para um servi\u00e7o de coleta de logs qualquer. Como o pr\u00f3prio nome indica, \u00e9 dedicado ao envio de arquivos de log.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/filebeat-1.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Em um pipeline de registro, baseado no <em>ELK<\/em>, o <em>Filebeat<\/em> desempenha o papel de agente de registro \u2013 instalado na m\u00e1quina gerando arquivos de registro, acompanhando-os e encaminhando para o <em>Logstash<\/em> para um processamento mais avan\u00e7ado ou diretamente para o <em>Elasticsearch<\/em> para indexa\u00e7\u00e3o. <em>Filebeat<\/em>, portanto, n\u00e3o \u00e9 um substituto para o <em>Logstash<\/em>, mas sim, algo que pode e deve ser usado em conjunto na maioria dos casos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/filebeat-2.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Desenvolvido em Go;<\/li>\n\n\n\n<li>Baseado no protocolo Lumberjack;<\/li>\n\n\n\n<li>Projetado para ocupar pouco espa\u00e7o na mem\u00f3ria;<\/li>\n\n\n\n<li>Lida com grandes volumes de dados;<\/li>\n\n\n\n<li>Oferece suporte \u00e0 criptografia;<\/li>\n\n\n\n<li>Lida de forma eficiente com compress\u00e3o de dados.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"676-uptime-79\"><strong>6.7.6 &#8211; UPTIME (7.9)<\/strong><\/h5>\n\n\n\n<p>O aplicativo Uptime no Kibana possibilita monitorar o status dos <em>endpoints<\/em> na rede via HTTP\/S, TCP, e ICMP mostrando a disponibilidade e o tempo de resposta das aplica\u00e7\u00f5es e servi\u00e7os em tempo real com o objetivo de detectar problemas antes de afetar os usu\u00e1rios. Voc\u00ea pode explorar o status dos endpoints ao longo do tempo, aprofundar em monitores espec\u00edficos e ter uma vis\u00e3o geral do seu ecossistema em momentos espec\u00edficos.<\/p>\n\n\n\n<p>[IMG &#8211; UPTIME]<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"677-heartbeat-v712\"><strong>6.7.7 &#8211; HEARTBEAT (v7.12)<\/strong><\/h5>\n\n\n\n<p>A primeira vers\u00e3o do Heartbeat, lan\u00e7ado inicialmente em vers\u00e3o beta em janeiro de 2017, \u00e9 um shipper lightweight \u2014 bem parecida com o restante dos outros Beats (Metricbeat, Filebeat, Winlogbeat etc.) \u2014 mas foi projetado para monitorar o funcionamento.<\/p>\n\n\n\n<p>O Heartbeat executa verifica\u00e7\u00f5es peri\u00f3dicas para conferir se o endpoint est\u00e1 ativo ou inativo, e relata essas informa\u00e7\u00f5es, juntamente com outras m\u00e9tricas \u00fateis, ao Elasticsearch. Essas informa\u00e7\u00f5es s\u00e3o exibidas automaticamente em dashboards pr\u00e9-criados do Kibana para permitir o monitoramento de tempo de funcionamento completo. O Heartbeat pode operar de dentro ou de fora da rede. Basta ele ter acesso da rede ao endpoint HTTP, TCP ou ICMP desejado. A configura\u00e7\u00e3o \u00e9 t\u00e3o simples quanto fornecer ao Heartbeat a lista de URLs que se deseja monitorar.<\/p>\n\n\n\n<p>A combina\u00e7\u00e3o de dados do Heartbeat com fontes de dados adicionais como Metricbeat, Filebeat e APM pode fornecer informa\u00e7\u00f5es importantes ao fazer triagem de uma pane. O Heartbeat notificar\u00e1 quando um servi\u00e7o espec\u00edfico estiver inativo; o Metricbeat e o APM podem apresentar os poss\u00edveis suspeitos; podem melhorar significativamente o MTTR e far\u00e3o com que cada um olhe para o lugar certo, em vez de ficar \u201capontando o culpado\u201d.<\/p>\n\n\n\n<p>Alertas de detec\u00e7\u00e3o de anomalias:<\/p>\n\n\n\n<p>\u00c9 poss\u00edvel usar os recursos de alertas para obter alertas e notifica\u00e7\u00f5es sobre uma falha ou uma queda na performance com base nos dados de monitores do Heartbeat. Os recursos de Machine Learning do Elastic Stack tamb\u00e9m podem ser usados para detectar quaisquer anomalias com base na an\u00e1lise de dados de s\u00e9ries de tempo dos dados do Heartbeat.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"68-utilit\u00e1rios\"><strong>6.8 &#8211; UTILIT\u00c1RIOS<\/strong><\/h4>\n\n\n\n<p>Os utilit\u00e1rios s\u00e3o ferramentas adicionais, e n\u00e3o obrigat\u00f3rias, utilizadas pela equipe da Defensoria P\u00fablica de Minas Gerais para auxiliar em atividades espec\u00edficas.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"681-google-chrome-v89-ou-superior\"><strong>6.8.1 &#8211; GOOGLE CHROME (v.89 ou superior)<\/strong><\/h5>\n\n\n\n<p>Google Chrome \u00e9 um navegador livre desenvolvido pela Google, empresa multinacional de servi\u00e7os online e software dos Estados Unidos.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"682-firefox-browser-v87-ou-superior\"><strong>6.8.2 &#8211; FIREFOX BROWSER (v.87 ou superior)<\/strong><\/h5>\n\n\n\n<p>Mozilla Firefox \u00e9 um navegador livre e multiplataforma desenvolvido pela Mozilla Foundation. Esse utilit\u00e1rio \u00e9 utilizado para o acesso e desenvolvimento das aplica\u00e7\u00f5es WEB dentro da Defensoria P\u00fablica de Minas Gerais (DPMG).<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"683-cmder-v1318\"><strong>6.8.3 &#8211; CMDER (v1.3.18)<\/strong><\/h5>\n\n\n\n<p>Cmder (se pronuncia \u201cCommander\u201d) \u00e9 um pacote de software pr\u00e9-configurado que prov\u00ea para o usu\u00e1rio um emulador de terminal e um excelente shell para o Windows. Foi criado justamente pela aus\u00eancia de um emulador console utiliz\u00e1vel no Windows. Ele \u00e9 baseado no ConEmu com grande revis\u00e3o de configura\u00e7\u00e3o, esquema de cores Monokai, incr\u00edvel clink para fornecer um prompt do tipo bash usando a linha de leitura do GNU, e um layout de prompt personalizado.<\/p>\n\n\n\n<p>A principal vantagem do Cmder \u00e9 a portabilidade. Ele \u00e9 projetado para ser totalmente independente, sem a necessidade de depend\u00eancias externas, o que o torna um \u00f3timo dispositivos USB ou armazenamento em nuvem. Assim, voc\u00ea pode carregar seu console, aliases e bin\u00e1rios (como wget, curl e git) com voc\u00ea em qualquer lugar.<\/p>\n\n\n\n<p>Com o Cmder voc\u00ea ter\u00e1 todas as facilidades de copiar e colar, e tamb\u00e9m poder\u00e1 usar os comandos do Prompt de Comando do Windows ou do seu compat\u00edvel Linux, \u00e9 isso mesmo! Tudo na mesma janela de comando, portanto, use o que for mais familiar.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"684-openvpn-v112000\"><strong>6.8.4 &#8211; OPENVPN (v11.20.0.0)<\/strong><\/h5>\n\n\n\n<p>OpenVPN \u00e9 um daemon VPN de c\u00f3digo aberto que tem como objetivo ser uma ferramenta VPN universal oferecendo grande flexibilidade na utiliza\u00e7\u00e3o, suporte \u00e0 seguran\u00e7a SSL \/ TLS, ponte de ethernet, transporte de t\u00fanel TCP ou UDP por proxies ou NAT, suporte para endere\u00e7os IP din\u00e2micos e DHCP, escalabilidade para centenas ou milhares de usu\u00e1rios e portabilidade para a maioria das principais plataformas de sistema operacional.<\/p>\n\n\n\n<p>O OpenVPN est\u00e1 estreitamente ligado \u00e0 biblioteca OpenSSL e possui muito dos recursos de criptografia partindo dela. Tamb\u00e9m suporta criptografia mais convencional usando uma chave secreta pr\u00e9 compartilhada (modo de chave est\u00e1tica) ou seguran\u00e7a de chave p\u00fablica (modo SSL \/ TLS) usando certificados de cliente e servidor. Al\u00e9m de oferecer suporte a t\u00faneis TCP \/ UDP n\u00e3o criptografados.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"685-microsoft-teams-v89-ou-superior\"><strong>6.8.5 &#8211; MICROSOFT TEAMS (v.89 ou superior)<\/strong><\/h5>\n\n\n\n<p>Microsoft Teams \u00e9 uma plataforma criada para promover a colabora\u00e7\u00e3o e intera\u00e7\u00e3o em tempo real, permitindo aos usu\u00e1rios conversas individuais, em grupos, reuni\u00f5es por v\u00eddeo chamada, compartilhamento de anexos e anota\u00e7\u00f5es e colabora\u00e7\u00e3o de conte\u00fado com os aplicativos Microsoft 365 integrando fluxos de trabalho e aplicativos essenciais para a empresa.<\/p>\n\n\n\n<p>Gerenciamento: \u00e9 poss\u00edvel gerenciar os dispositivos dos trabalhadores remotos na nuvem com configura\u00e7\u00f5es de seguran\u00e7a, aplicativos permitidos e exigir conformidade com a integridade do sistema.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-content\/uploads\/2022\/08\/teams.png\" alt=\"img\"\/><\/figure>\n\n\n\n<p>Produtos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chamadas;<\/li>\n\n\n\n<li>Videoconfer\u00eancia;<\/li>\n\n\n\n<li>Compartilhamento de tela;<\/li>\n\n\n\n<li>Eventos virtuais;<\/li>\n\n\n\n<li>Sistemas de mensagens instant\u00e2neas;<\/li>\n\n\n\n<li>Compartilhamento de arquivos;<\/li>\n\n\n\n<li>Aplicativos de reuni\u00e3o;<\/li>\n\n\n\n<li>Aplicativos de fluxo de trabalho.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"686-notepad-v89-ou-superior\"><strong>6.8.6 &#8211; NOTEPAD++ (v.89 ou superior)<\/strong><\/h5>\n\n\n\n<p>O Notepad ++ \u00e9 um editor de c\u00f3digo-fonte gratuito e um substituto do Notepad que suporta v\u00e1rios idiomas. Rodando no Windows, seu uso \u00e9 regido pela GNU General Public License.<\/p>\n\n\n\n<p>Baseado no poderoso componente de edi\u00e7\u00e3o Scintilla, o Notepad ++ \u00e9 escrito em C ++ e usa Win32 API e STL puras, o que garante maior velocidade de execu\u00e7\u00e3o e menor tamanho do programa. Ao otimizar o m\u00e1ximo de rotinas poss\u00edveis sem perder a facilidade de uso, o Notepad ++ est\u00e1 tentando reduzir as emiss\u00f5es mundiais de di\u00f3xido de carbono. Ao usar menos energia da CPU, o PC pode desacelerar e reduzir o consumo de energia, resultando em um ambiente mais verde.<\/p>\n\n\n\n<p>Notepad++ suporta as linguagens: C, C++, Java, C#, XML, HTML, PHP, JavaScript, makefile, ASCII art, doxygen, ASP, VB\/VBScript, Unix Shell Script, BAT, SQL, Objective-C, CSS, Pascal, Perl, Python, Lua, Tcl, Assembly, Ruby, Lisp, Scheme, Smalltalk, PostScript e VHDL. Al\u00e9m disto, usu\u00e1rios podem definir suas pr\u00f3prias linguagens usando um &#8220;sistema de defini\u00e7\u00e3o de linguagem&#8221; integrado, que faz do Notepad++ extens\u00edvel, para ter realce de sintaxe e compacta\u00e7\u00e3o de trechos de c\u00f3digo.<\/p>\n\n\n\n<p>Ele suporta autocomplemento, busca e substitui\u00e7\u00e3o com integra\u00e7\u00e3o de express\u00f5es regulares, divis\u00e3o de tela, zoom, favoritos, etc. Tem suporte para macros e plugins. Um plugin de usu\u00e1rio chamado TextFX, que prov\u00ea op\u00e7\u00f5es de transforma\u00e7\u00e3o de textos, \u00e9 inclu\u00eddo por padr\u00e3o.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"687-postman-v831\"><strong>6.8.7 &#8211; POSTMAN (v.8.3.1+)<\/strong><\/h5>\n\n\n\n<p>\u201cO Postman \u00e9 um API Client que facilita aos desenvolvedores criar, compartilhar, testar e documentar APIs. Isso \u00e9 feito, permitindo aos usu\u00e1rios criar e salvar solicita\u00e7\u00f5es HTTP e HTTPs simples e complexas, bem como ler suas respostas.<\/p>\n\n\n\n<p>Al\u00e9m da praticidade de ter todos os exemplos e c\u00f3digos de integra\u00e7\u00e3o prontos, o POSTMAN \u00e9 a ferramenta oficial de teste pelas equipes de desenvolvimento e suporte. Dessa maneira ao realizar integra\u00e7\u00f5es, caso voc\u00ea possua d\u00favidas, ser\u00e1 mais r\u00e1pido e simples de confirmar o que pode estar ocorrendo com o seu c\u00f3digo.<\/p>\n\n\n\n<p>Outras vantagens do Postman:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ferramenta gratuita. \u00c9 poss\u00edvel explorar e testar as APIs usando o cliente de desktop e web do Postman. Tamb\u00e9m \u00e9 poss\u00edvel usar o CLI do Postman para executar cole\u00e7\u00f5es diretamente por linha de comando;<\/li>\n\n\n\n<li>N\u00e3o \u00e9 necess\u00e1rio instalar EXE &#8211; \u00e9 uma extens\u00e3o do Google Chrome;<\/li>\n\n\n\n<li>Funciona em qualquer plataforma: Windows, MacOS e Linux;<\/li>\n\n\n\n<li>Converte JSON em v\u00e1rias linguagens (EX: Python, PHP, RUBY);<\/li>\n\n\n\n<li>Sincroniza\u00e7\u00e3o entre diversos aplicativos;<\/li>\n\n\n\n<li>Sincroniza c\u00f3digo entre equipes (Vers\u00e3o paga)\u201d.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"688-filezilla-3540-rc1\"><strong>6.8.8 &#8211; FILEZILLA (3.54.0-rc1)<\/strong><\/h5>\n\n\n\n<p>Cliente FTP FileZilla funciona de forma independente de plataforma e suporta sistemas operacionais como Microsoft Windows(Vista ou Superior), GNU \/ Linux, * BSD e Mac OS X. \u00c9 de f\u00e1cil utiliza\u00e7\u00e3o, compat\u00edvel com FTP, FTP SSL\/TLS (FTPS) e com protocolo de transfer\u00eancia de arquivos SSH (SFTP), possui suporte a IPv6, a transfer\u00eancia de arquivos grandes maiores que 4GB, consegue gerenciar localmente uma fila grande de transfer\u00eancia, implementa o Drag and Drop, proporciona a configura\u00e7\u00e3o do limite de velocidade de transfer\u00eancia, possibilita compara\u00e7\u00e3o de diret\u00f3rios e edi\u00e7\u00e3o de arquivos online com editores de textos.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"689-winscp-517\"><strong>6.8.9 &#8211; WINSCP (5.17)<\/strong><\/h5>\n\n\n\n<p>O <em>WinSCP<\/em> \u00e9 um cliente de FTP, para Windows, que garante transfer\u00eancias seguras sobre SSL, de forma que os arquivos FTP n\u00e3o sejam interceptados por terceiros. A chave do programa \u00e9 o fato de que ele suporta tamb\u00e9m SFTP e SCP protocolos por SSH-1 e SSH-2. <em>WinSCP<\/em> n\u00e3o \u00e9 o mais f\u00e1cil cliente de FTP que existe.<\/p>\n\n\n\n<p>Caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Interface gr\u00e1fica de usu\u00e1rio que n\u00e3o \u00e9 muito simples e intuitiva;<\/li>\n\n\n\n<li>Traduzido para v\u00e1rios idiomas<\/li>\n\n\n\n<li>Integra\u00e7\u00e3o com Windows. \u00c9 poss\u00edvel arrastar e soltar arquivos, utilizar URL, possuem \u00edcones e listas de atalhos.<\/li>\n\n\n\n<li>Todas as opera\u00e7\u00f5es comuns com arquivos;<\/li>\n\n\n\n<li>Suporte SFTP e SCP sobre protocolos SSH, FTP, WebDav e S3.<\/li>\n\n\n\n<li>Scripts de arquivos em lote e interface em linha de comando e montagem .NET para tarefas mais avan\u00e7adas.<\/li>\n\n\n\n<li>Sincroniza\u00e7\u00e3o de diret\u00f3rio de v\u00e1rias maneiras semi-autom\u00e1ticas ou totalmente automatizadas;<\/li>\n\n\n\n<li>Editor de texto integrado;<\/li>\n\n\n\n<li>Compartilha as configura\u00e7\u00f5es de site com o PuTTY;<\/li>\n\n\n\n<li>Protege as informa\u00e7\u00f5es do site com uma senha master de forma opcional.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"6810-gitbash-v2311\"><strong>6.8.10 &#8211; GITBASH (v.2.31.1)<\/strong><\/h5>\n\n\n\n<p>Git Bash \u00e9 um utilit\u00e1rio para ambientes do Microsoft Windows que fornece a camada de emula\u00e7\u00e3o para a experi\u00eancia de linha de comando Git, ele possui as opera\u00e7\u00f5es da experi\u00eancia Bash padr\u00e3o. Bash \u00e9 acr\u00f4nico para &#8220;Bourne Again Shell&#8221;. Shells s\u00e3o aplicativos terminais usados como interface em sistemas operacionais por meio de comandos gravados. O Shell \u00e9 o padr\u00e3o popular no Linux e no macOS. O Git Bash \u00e9 o pacote que instala o Bash, alguns utilit\u00e1rios de bash comuns e o Git nos sistemas operacionais Windows.<\/p>\n\n\n\n<p>O git bash faz parte do pacote Git para Windows, \u00e9 poss\u00edvel baix\u00e1-lo e instal\u00e1-lo como todos outros aplicativos.<\/p>\n\n\n\n<p><em><strong>Git GUI<\/strong><\/em><\/p>\n\n\n\n<p>Como usu\u00e1rios Windows comumente esperam uma interface gr\u00e1fica, Git para Windows tamb\u00e9m fornece Git GUI, uma poderosa alternativa para o Git BASH, oferecendo uma vers\u00e3o gr\u00e1fica sobre cada fun\u00e7\u00e3o de linha de comando Git, bem como ferramentas de compara\u00e7\u00e3o visual abrangentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"7-ui--ux\"><strong>7 &#8211; UI \/ UX<\/strong><\/h2>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"71-adobe-photoshop\"><strong>7.1 &#8211; ADOBE PHOTOSHOP<\/strong><\/h5>\n\n\n\n<p>O Photoshop, \u00e9 o software de imagem digital mais avan\u00e7ado do mundo, usado por fot\u00f3grafos, designers, profissionais da web e de v\u00eddeo. O aplicativo d\u00e1 a voc\u00ea m\u00e1ximo poder e controle criativo para manipula\u00e7\u00e3o e composi\u00e7\u00e3o de imagens 2D e 3D, edi\u00e7\u00e3o de v\u00eddeo e an\u00e1lise de imagem.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"72-adobe-illustrator\"><strong>7.2 &#8211; ADOBE ILLUSTRATOR<\/strong><\/h5>\n\n\n\n<p>O Illustrator \u00e9 uma ferramenta de design capaz de desenvolver ilustra\u00e7\u00f5es. Al\u00e9m disso, \u00e9 poss\u00edvel tamb\u00e9m editar imagens vetoriais j\u00e1 prontas.<\/p>\n\n\n\n<p>Ela \u00e9 muito usada na confec\u00e7\u00e3o de logos, por exemplo, al\u00e9m de todo aspecto vetorial de sites, campanhas e material impresso. No caso de anima\u00e7\u00f5es, o ideal \u00e9 produzir a ilustra\u00e7\u00e3o no Illustrator e, depois, envi\u00e1-la para um outro programa como o After Effects \u2014 tamb\u00e9m da Adobe.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"73-axure\"><strong>7.3 &#8211; AXURE<\/strong><\/h5>\n\n\n\n<p>Axure RP Pro \/ Team \u00e9 um software para a cria\u00e7\u00e3o de prot\u00f3tipos e especifica\u00e7\u00f5es para sites e aplicativos. Ele oferece posicionamento de arrastar e soltar, redimensionamento e formata\u00e7\u00e3o de widgets. Caracter\u00edsticas O Axure RP oferece suporte \u00e0 prototipagem de aplicativos da Web ricos , mapeando os comportamentos de interface desejados (como exibir ou ocultar um elemento) em resposta a a\u00e7\u00f5es como cliques do mouse ou gestos de toque. O Axure RP gera sites HTML para visualiza\u00e7\u00e3o e colabora\u00e7\u00e3o em equipe, bem como documentos do Microsoft Word como sa\u00edda para documenta\u00e7\u00e3o de produ\u00e7\u00e3o. O Axure RP tamb\u00e9m pode se conectar a outras ferramentas e servi\u00e7os, como Slack e Microsoft Teams, para colaborar. O Axure RP tamb\u00e9m pode se ajustar automaticamente e mover-se suavemente do macOS para o Windows. Por seguran\u00e7a, os prot\u00f3tipos podem ser enviados com prote\u00e7\u00f5es de senha para garantir a divulga\u00e7\u00e3o completa. Os usu\u00e1rios criam controles personalizados combinando widgets existentes e atribuindo a\u00e7\u00f5es em resposta a eventos como OnClick, OnMouseOver e OnMouseOut ou gestos de toque como beliscar e deslizar. Por exemplo, os pain\u00e9is de interface podem ter v\u00e1rios estados, cada um sendo ativado clicando em um elemento, como um bot\u00e3o de guia, item da caixa de listagem ou bot\u00e3o de a\u00e7\u00e3o.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"731-comercializa\u00e7\u00e3o\"><strong>7.3.1 &#8211; COMERCIALIZA\u00c7\u00c3O<\/strong><\/h6>\n\n\n\n<p>Existem tr\u00eas vers\u00f5es: Pro, Team e Enterprise. O produto Pro est\u00e1 dispon\u00edvel gratuitamente para alunos e professores, e com descontos para institui\u00e7\u00f5es de ensino. A vers\u00e3o Pro adiciona recursos de documenta\u00e7\u00e3o, incluindo controle de layout, sa\u00edda para Microsoft Word e Excel e suporte para projetos de equipe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"8-requisitos\"><strong>8 &#8211; REQUISITOS<\/strong><\/h2>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"81-enterprise-architecture-ea\"><strong>8.1 &#8211; ENTERPRISE ARCHITECTURE &#8211; E.A.<\/strong><\/h5>\n\n\n\n<p>Sparx Systems Enterprise Architect \u00e9 uma ferramenta de modelagem e design visual baseada na OMG UML . A plataforma suporta: o projeto e constru\u00e7\u00e3o de sistemas de software; modelagem de processos de neg\u00f3cios; e modelagem de dom\u00ednios baseados na ind\u00fastria.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"811-vis\u00e3o-geral\"><strong>8.1.1 &#8211; VIS\u00c3O GERAL<\/strong><\/h6>\n\n\n\n<p>A modelagem de sistemas usando UML fornece uma base para modelar todos os aspectos da arquitetura organizacional, junto com a capacidade de fornecer uma base para projetar e implementar novos sistemas ou alterar sistemas existentes. Os aspectos que podem ser cobertos por este tipo de modelagem variam desde o layout de arquiteturas organizacionais ou de sistemas, reengenharia de processos de neg\u00f3cios , an\u00e1lise de neg\u00f3cios e arquiteturas orientadas a servi\u00e7os e modelagem da web, at\u00e9 aplicativos e design de banco de dados e re -engenharia e desenvolvimento de sistemas embarcados. Junto com a modelagem do sistema, o Enterprise Architect cobre os principais aspectos do ciclo de vida de desenvolvimento de aplicativos, desde o gerenciamento de requisitos at\u00e9 as fases de projeto, constru\u00e7\u00e3o, teste e manuten\u00e7\u00e3o, com suporte para rastreabilidade, gerenciamento de projetos e controle de altera\u00e7\u00f5es desses processos, bem como, facilidades para o desenvolvimento orientado a modelos de c\u00f3digo de aplica\u00e7\u00e3o usando uma plataforma de desenvolvimento integrado interno .<\/p>\n\n\n\n<p>A seguir est\u00e3o os principais padr\u00f5es suportados:<\/p>\n\n\n\n<p>UML 2.5 SysML 1.5 BPMN 2.0 DMN BMM MARTE 1.2 BPEL SoaML SPEM WSDL XSD DDS ArchiMate 3.0 ArcGIS IFML CMMN Linguagem de marca\u00e7\u00e3o de geografia (GML) ODM , OWL e RDF VDML 1.0<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"812-o-gerenciamento-de-requisitos\"><strong>8.1.2 &#8211; O GERENCIAMENTO DE REQUISITOS<\/strong><\/h6>\n\n\n\n<p>Os recursos comuns de gerenciamento de requisitos suportados pelo Enterprise Architect incluem customiza\u00e7\u00e3o de como os requisitos s\u00e3o documentados, vinculando os requisitos aos detalhes de design e implementa\u00e7\u00e3o e fornecendo rastreabilidade de requisitos durante as fases de design e constru\u00e7\u00e3o. Esses requisitos podem estar sujeitos a gerenciamento de mudan\u00e7as, processamento de fluxo de trabalho, compara\u00e7\u00e3o de linha de base e auditoria.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"813-modelagem-de-neg\u00f3cios-e-an\u00e1lise\"><strong>8.1.3 &#8211; MODELAGEM DE NEG\u00d3CIOS E AN\u00c1LISE<\/strong><\/h6>\n\n\n\n<p>O Enterprise Architect oferece suporte a v\u00e1rios m\u00e9todos de modelagem de processos de neg\u00f3cios usando UML como a linguagem de modelagem b\u00e1sica. As linguagens principais para modelagem e an\u00e1lise de neg\u00f3cios incluem BPMN , BMM e VDML , junto com v\u00e1rios perfis hist\u00f3ricos.<\/p>\n\n\n\n<p>O Enterprise Architect suporta a simula\u00e7\u00e3o de: Modelos BPMN usando BPSim Defini\u00e7\u00f5es de regras de neg\u00f3cios usando modelos DMN . BPMN pode ser integrado com modelos DMN para simula\u00e7\u00e3o. Isso inclui a capacidade de gerar c\u00f3digo execut\u00e1vel a partir dessas regras de neg\u00f3cios. A modelagem de neg\u00f3cios pode ser combinada com a an\u00e1lise de lacunas para visualizar lacunas potenciais nas solu\u00e7\u00f5es propostas.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"814-simula\u00e7\u00e3o\"><strong>8.1.4 &#8211; SIMULA\u00c7\u00c3O<\/strong><\/h6>\n\n\n\n<p>A simula\u00e7\u00e3o de modelo \u00e9 compat\u00edvel com diagramas comportamentais, incluindo: m\u00e1quinas de estado, intera\u00e7\u00e3o (diagramas de sequ\u00eancia) e diagramas de atividades. Para m\u00e1quinas de estado e diagramas de atividades, o fluxo de execu\u00e7\u00e3o \u00e9 definido usando gatilhos, guardas e efeitos. A simula\u00e7\u00e3o suporta reexecu\u00e7\u00f5es com altera\u00e7\u00e3o dos eventos disparados e suporta a visualiza\u00e7\u00e3o de vari\u00e1veis, a pilha de chamadas e a configura\u00e7\u00e3o de marcadores de depura\u00e7\u00e3o. A simula\u00e7\u00e3o pode interagir com telas de interface de usu\u00e1rio emuladas contendo campos de IU comuns. Plots gr\u00e1ficos da simula\u00e7\u00e3o podem ser gerados. Tamb\u00e9m h\u00e1 suporte para gera\u00e7\u00e3o de c\u00f3digo execut\u00e1vel a partir de State Machines tanto para simula\u00e7\u00e3o, quanto para uso em aplicativos. Modelos BPMN (usando BPSim) podem ser simulados criando resultados tabulados para an\u00e1lise. O BPSim tamb\u00e9m suporta simula\u00e7\u00f5es baseadas em probabilidade de Monte Carlo. A simula\u00e7\u00e3o SysML \u00e9 suportada para modelos IBD e Param\u00e9tricos usando Open Modelica ou Matlab (usando Simulink e Simscape). F\u00f3rmulas matem\u00e1ticas nos diagramas de bloco interno e modelos param\u00e9tricos do SysML podem ser simuladas para gr\u00e1ficos de plotagem usados \u200b\u200bna an\u00e1lise. A simula\u00e7\u00e3o tamb\u00e9m \u00e9 compat\u00edvel com DMN ( modelo de decis\u00e3o e nota\u00e7\u00e3o ). A simula\u00e7\u00e3o envolve a gera\u00e7\u00e3o de c\u00f3digo utiliz\u00e1vel em aplicativos e suporta a intera\u00e7\u00e3o entre modelos DMN e modelos BPMN usando BPSim.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"815-desenvolvimento-de-sistemas\"><strong>8.1.5 &#8211; DESENVOLVIMENTO DE SISTEMAS<\/strong><\/h6>\n\n\n\n<p>Em linha com os princ\u00edpios de design orientado por modelo, o Enterprise Architect suporta transforma\u00e7\u00f5es MDA de estruturas de classe PIM em estruturas de classe PSM , engenharia de c\u00f3digo para dez linguagens de software e v\u00e1rias linguagens de sistemas HDL incorporados ( Ada , VHDL e Verilog ). Ele tamb\u00e9m oferece suporte \u00e0 gera\u00e7\u00e3o de c\u00f3digo a partir de modelos comportamentais. As linguagens suportadas incluem ActionScript , C , C # e C ++ , Delphi . Java , PHP , Python , Visual Basic e Visual Basic .NET De acordo com os princ\u00edpios de desenvolvimento orientados por modelo, o Enterprise Architect fornece um ambiente de desenvolvimento integrado que suporta edi\u00e7\u00e3o de c\u00f3digo (com destaque de sintaxe e Intellisense ), para constru\u00e7\u00e3o, depura\u00e7\u00e3o e teste de c\u00f3digo, tudo dentro do modelo. Compiladores e interpretadores suportados: Microsoft Windows Native C, C ++, Visual Basic, fam\u00edlia .NET (C #, VB); Compiladores Java, PHP e GNU para C ++, C e Ada ( GCC e GDB ). Inclui recursos para importar projetos MS Visual Studio e Eclipse .<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"816-wireframing\"><strong>8.1.6 &#8211; WIREFRAMING<\/strong><\/h6>\n\n\n\n<p>A modelagem em wireframe oferece suporte ao uso de modelos para modelar a apar\u00eancia dos di\u00e1logos apresentados aos usu\u00e1rios ao interagir com um aplicativo. Os di\u00e1logos de dispositivos suportados incluem: Di\u00e1logos de tela, p\u00e1ginas da Web, telefones e tablets Android, Apple e Windows 8.1.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"817-gerenciamento-de-teste\"><strong>8.1.7 &#8211; GERENCIAMENTO DE TESTE<\/strong><\/h6>\n\n\n\n<p>Para teste baseado em c\u00f3digo, h\u00e1 suporte para ambos os testes xUnit (isso envolve a transforma\u00e7\u00e3o MDA de classes em classes NUnit ou Junit com a capacidade de gerar testes de unidade a partir do modelo e registrar automaticamente os resultados em rela\u00e7\u00e3o \u00e0s classes testadas) e teste de ponto de teste (um teste de c\u00f3digo baseado em modelo. \u00c9 paralelo aos contratos de teste definidos em &#8216;Design by Contract&#8217; e \u00e9 executado usando defini\u00e7\u00f5es de depura\u00e7\u00e3o. Ambos os m\u00e9todos suportam as defini\u00e7\u00f5es de teste e os resultados do teste sendo registrados em classes relacionadas no modelo.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"818-an\u00e1lise-de-execu\u00e7\u00e3o-visual\"><strong>8.1.8 &#8211; AN\u00c1LISE DE EXECU\u00c7\u00c3O VISUAL<\/strong><\/h6>\n\n\n\n<p>Integrado com o c\u00f3digo de constru\u00e7\u00e3o e depura\u00e7\u00e3o, o Enterprise Architect permite ao desenvolvedor realizar an\u00e1lises abstratas do software usando cria\u00e7\u00e3o de perfil e gera\u00e7\u00e3o de diagramas de sequ\u00eancia: a gera\u00e7\u00e3o de diagramas de sequ\u00eancia fornece um meio de analisar o fluxo de processo geral e resolver inconsist\u00eancias, e o Profiling resume, por thread e rotina, a efici\u00eancia geral do c\u00f3digo.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"819-engenharia-de-sistemas\"><strong>8.1.9 &#8211; ENGENHARIA DE SISTEMAS<\/strong><\/h6>\n\n\n\n<p>A engenharia de sistema \u00e9 suportada com modelagem SysML 1.4, que pode ser acoplada \u00e0 gera\u00e7\u00e3o de c\u00f3digo execut\u00e1vel. O SysML oferece suporte \u00e0 modelagem desde a defini\u00e7\u00e3o de requisitos e composi\u00e7\u00e3o do sistema usando blocos e pe\u00e7as SysML at\u00e9 a simula\u00e7\u00e3o de modelo param\u00e9trico. A gera\u00e7\u00e3o de c\u00f3digo execut\u00e1vel suporta linguagens de sistema HDL embutidas ( Ada , VHDL e Verilog ), ou pode ser acoplada \u00e0 gera\u00e7\u00e3o de c\u00f3digo comportamental das linguagens de c\u00f3digo padr\u00e3o definidas acima.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"8110-modelagem-de-dados\"><strong>8.1.10 &#8211; MODELAGEM DE DADOS<\/strong><\/h6>\n\n\n\n<p>O Enterprise Architect suporta modelagem de dados do n\u00edvel conceitual para o f\u00edsico, engenharia direta e reversa de esquemas de banco de dados, e transforma\u00e7\u00e3o MDA do DBMS l\u00f3gico (independente da plataforma) para o f\u00edsico (dependente da plataforma). Os tipos de diagrama suportados incluem: nota\u00e7\u00e3o DDL, nota\u00e7\u00e3o ERD , nota\u00e7\u00e3o IDEF1X , nota\u00e7\u00e3o de Engenharia da Informa\u00e7\u00e3o. DBMSs com suporte incluem: DB2 , Firebird \/ InterBase, MS Access 97, 2000, 2003, 2007, 2013, MS SQL Server , todas as edi\u00e7\u00f5es de 2005, incluindo Express e Azure, MySQL , MariaDB , SQLite , Oracle from 9i (todas as edi\u00e7\u00f5es), PostgreSQL , ArcGIS , Informix , Ingres , Sybase Adaptive Server Anywhere (Sybase ASA) e Sybase Adaptive Server Enterprise (Sybase ASE).<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"8111-projetos-e-gerenciamento-de-mudan\u00e7as\"><strong>8.1.11 &#8211; PROJETOS E GERENCIAMENTO DE MUDAN\u00c7AS<\/strong><\/h6>\n\n\n\n<p>Os recursos de suporte ao gerenciamento de projetos incluem: Aloca\u00e7\u00e3o e rastreamento de recursos usando gr\u00e1ficos de Gantt , diagramas Kanban, registro de eventos usando calend\u00e1rios modelo, script de fluxo de trabalho para definir processos de fluxo de trabalho, seguran\u00e7a e m\u00e9tricas de modelo. Os principais recursos de suporte ao gerenciamento de mudan\u00e7as s\u00e3o: auditoria, diferen\u00e7a e fus\u00e3o de linha de base e controle de vers\u00e3o. A interface de controle de vers\u00e3o suporta os principais aplicativos de controle de vers\u00e3o: Subversion , CVS , Team Foundation Server e interface SCC para qualquer sistema de controle de vers\u00e3o compat\u00edvel com SCC.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"8112-integra\u00e7\u00e3o-com-outras-ferramentas\"><strong>8.1.12 &#8211; INTEGRA\u00c7\u00c3O COM OUTRAS FERRAMENTAS<\/strong><\/h6>\n\n\n\n<p>Os recursos que oferecem suporte \u00e0 integra\u00e7\u00e3o com outras ferramentas incluem: XMI Import \/ Export: Suporta as especifica\u00e7\u00f5es XMI 1.1, 1.2 e 2.1 (e importa\u00e7\u00e3o de arquivos .emx e Rhapsody), Open Services for Lifecycle Collaboration (OSLC), CSV Import \/ Export, ArchiMate Open Importa\u00e7\u00e3o \/ Exporta\u00e7\u00e3o do Formato do Exchange. O Pro Cloud Server Integration suporta a integra\u00e7\u00e3o de dados de fornecedores externos, incluindo Application Lifecycle Management, Jazz (DOORS, Rhapsody DM, Team Concert CCM e QM), Jira, Confluence, TFS, Wrike, ServiceNow, Autodesk, Bugzilla, Salesforce e SharePoint. O Data Miner fornece um meio de extrair dados de uma variedade de fontes de dados externas, incluindo: bancos de dados (ODBC, ADO, OLEDB, JET), arquivos de texto (XML, JSON, texto simples), Excel (xls, CSV) e arquivos online ou URLs. A interface de automa\u00e7\u00e3o &#8211; oferece suporte a uma API abrangente para uso com qualquer linguagem baseada em COM (e Java). Isso oferece suporte \u00e0 defini\u00e7\u00e3o de scripts internos, bem como acessibilidade para escrever suplementos externos. Tamb\u00e9m h\u00e1 suporte para suplementos orientados a eventos baseados em modelo usando Javascript. Entre os suplementos dispon\u00edveis est\u00e3o interfaces para Microsoft Office e DOORS, junto com suplementos de terceiros.<\/p>\n","protected":false},"featured_media":0,"parent":0,"menu_order":4,"template":"","class_list":["post-200","v1","type-v1","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-json\/wp\/v2\/v1\/200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-json\/wp\/v2\/v1"}],"about":[{"href":"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-json\/wp\/v2\/types\/v1"}],"wp:attachment":[{"href":"https:\/\/gerais.defensoria.mg.def.br\/metodologia-de-desenvolvimento\/wp-json\/wp\/v2\/media?parent=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}