O que são os 12 Factor App? - Parte 1 \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 03 Horas 

 47 Min 

 02 Seg 

   Tempo restante da oferta: 03 47 02 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) O que são os 12 Factor App? - Parte 1  [ Engenharia de Software ](https://www.treinaweb.com.br/blog/categoria/engenharia-de-software) 

# O que são os 12 Factor App? - Parte 1

 Se você trabalha desenvolvendo aplicativos que funcionam como um serviço, conheça os 12 (Twelve) Factor App, uma metodologia que te ajudará a criar aplicações melhores.

 [ Marylene Guedes ](https://www.treinaweb.com.br/blog/autor/marylene-guedes) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/TWELVE-FACTOR-APP.png)  

**12 (Twelve) Factor App** é uma metodologia que define 12 boas práticas para criar uma aplicação SaaS moderna, escalável e de manutenção simples.

O conceito de [SaaS (Software as a Service)](https://www.treinaweb.com.br/blog/caracteristicas-que-um-servico-precisa-ter-pra-ser-considerado-cloud-computing/ "SaaS (Software as a Service)") é um tipo de aplicação construída especialmente para ser operada em ambientes em nuvem. São aplicações web nas quais você, como consumidor, não se preocupa com pontos como o provisionamento de máquinas, licenças de software ou fatores de manutenção. Em aplicações SaaS, geralmente o que é paga é uma assinatura, que pode ser mensal ou anual. Através dessa assinatura você terá a possibilidade de acesso ao software.

Além disso, o fornecedor do software é quem é responsável pela manutenção e disponibilidade da solução. Alguns exemplos de aplicações SaaS são o *Office 365* e a *suíte de serviços do Google (ou Google Apps)*.

A metodologia dos 12 Factor App foi criada por um grupo de desenvolvedores da Heroku em 2011, visando tornar mais simples os processos de manutenção e expansão de aplicações que são disponibilizadas como serviços, ou aplicações SaaS.

Na primeira parte dessa série de artigos, vamos conhecer os três primeiros pontos do 12 Factor App: **Codebase**, **Dependencies** e **Config**.

### Fator 1: Codebase

O código produzido é um ativo importantíssimo no processo de criação de um software, afinal, é a partir dele que o produto final será gerado – no caso, o software em si. Por isso, a maneira com que o código-fonte é gerenciado torna-se um ponto central.

Além disso, outros fatores colocam complicadores no processo de gestão do código-fonte, como equipes cada vez mais multidisciplinares e distribuídas até mesmo geograficamente, e alguns rituais de metodologias ágeis que permitem o trabalho em paralelo de equipes diferentes no mesmo projeto ao mesmo tempo de maneira produtiva.

Pelo 12 Factor App, a base de código-fonte é chamada de codebase. E existem alguns pontos que são essenciais para que possamos ter um codebase coeso e confiável. São eles:

• A base de código deve ser unificada e comum para todos os participantes do processo de criação do software. Isso evita a geração de versões “paralelas” ou “desencontradas” a partir de múltiplas origens de código-fonte;

• A base de código precisa ser temporal e auditável, ou seja, deve ser possível resgatar a situação do codebase em qualquer dia e horário, além de precisar ser possível verificar quem fez as modificações e quando estas foram feitas. Por exemplo: é essencial que seja possível obtermos o codebase na situação em que ele estava há uma semana atrás, por mais que ele tenha sido modificado no decorrer do tempo.

Também é importante ressaltar a relação 1/1 entre aplicação e codebase. Caso uma aplicação esteja espalhada em vários codebases, passamos a falar de um sistema distribuído. E isso não é problema desde que cada parte da aplicação seja independente e tenha seu próprio processo de gestão. Essa é mais ou menos a ideia por trás dos [microsserviços](https://www.treinaweb.com.br/blog/o-que-sao-microsservicos/ "microsserviços"), estilo arquitetural muito popular hoje em dia.

Para auxiliar nessa tarefa de gestão de codebase, existem algumas ferramentas chamadas de VCS (Version Control System ou Sistema de Controle de Versão). VCSs permitem justamente ter um codebase centralizado mas compartilhado entre múltiplos times, além de garantir a auditoria e o aspecto temporal do codebase. Neste tipo de ferramenta, o codebase normalmente está localizado em uma estrutura chamada repositório.

Atualmente, o VCS mais utilizado no mercado é o [Git](https://www.treinaweb.com.br/blog/primeiros-passos-com-o-git/ "Git"). Mas há alguns anos atrás, outros VCSs foram populares, como o Subversion (SVN) e o Mercurial.

### Fator 2: Dependencies

Dependências são artefatos externos dos quais sua aplicação depende para ser executada corretamente. Por exemplo, se você está pensando em criar uma [API](https://www.treinaweb.com.br/blog/o-que-e-uma-api/ "API") com [Node.js](https://www.treinaweb.com.br/blog/node-js-por-que-voce-deve-conhecer-essa-tecnologia/ "Node.js"), é grande a possibilidade de que você considere utilizar uma biblioteca externa chamada [express](https://www.treinaweb.com.br/blog/o-que-e-o-express-js/ "express"). Nesse caso, o express é uma dependência do seu projeto.

Quando falamos sobre a gestão das dependências do seu projeto, existem alguns pontos fundamentais segundo o próprio 12 Factor App. O primeiro deles afirma que uma aplicação não pode jamais confiar na pré-existência de alguma dependência dentro do ambiente: é responsabilidade da aplicação delimitar suas dependências de maneira explícita.

Por exemplo, se você está construindo uma aplicação que depende de uma [biblioteca ou framework](https://www.treinaweb.com.br/blog/qual-a-diferenca-entre-framework-e-biblioteca/ "biblioteca ou framework") específicos, estes artefatos precisam ser implementados junto com a aplicação. Jamais deve-se esperar que estes artefatos já existam previamente no ambiente de execução. Isso é importante principalmente porque não é muito seguro contar que determinada biblioteca ou framework estejam instalados dentro do ambiente de execução.

O segundo ponto é que, mesmo que uma dependência já exista dentro do ambiente de execução, pode ser que a aplicação precise de uma versão específica que é incompatível com a versão existente no ambiente de execução, o que pode fazer com que o software apresente comportamentos inesperados. Por isso, entra a importância de que cada dependência seja declarada de maneira completamente explícita junto com a aplicação, indicando inclusive a versão a ser utilizada.

Para ajudar nessa tarefa, ambientes de desenvolvimento modernos disponibilizam ferramentas chamadas de gerenciadores de pacote. Cada linguagem e/ou framework possui seu próprio gerenciador de pacotes, como exemplo podemos citar o Java, que comumente utiliza Maven ou Gradle; o .NET usa o [Nuget](https://www.treinaweb.com.br/blog/o-que-e-o-nuget/ "Nuget"); o Node.js usa o [NPM](https://www.treinaweb.com.br/blog/npm-voce-sabe-o-que-da-para-fazer-com-ele/ "NPM") ou Yarn e o [Ruby](https://www.treinaweb.com.br/blog/o-que-e-a-linguagem-de-programacao-ruby/ "Ruby") geralmente usa o Rubygems. Cada um destes pacotes provê de maneira integrada ao desenvolvimento a possibilidade de definição explícita, instalação e configuração de [dependências](https://www.treinaweb.com.br/blog/o-que-e-gerenciador-de-dependencias/ "dependências").

### Fator 3: Configs

As configurações para execução de um projeto são quaisquer parâmetros que podem variar com fatores externos, como o ambiente onde a aplicação será executada, por exemplo.

Geralmente, se tratam de credenciais para acesso a recursos como [bancos de dados](https://www.treinaweb.com.br/blog/o-que-e-banco-de-dados/ "bancos de dados"), buckets de arquivos, chaves de acesso a APIs de terceiros e outros fatores que provavelmente vão variar principalmente devido ao ambiente. Por exemplo, provavelmente, o banco de dados no ambiente de desenvolvimento não será o mesmo que no ambiente de produção, onde provavelmente as credenciais de acesso e até mesmo o host do banco serão diferentes nos dois ambientes. Esse é um clássico exemplo de um aspecto de configuração.

Existem algumas correntes que defendem que estas credenciais sejam definidas diretamente no código, na forma principalmente de constantes. Mas, isso é uma violação do 12 Factor App, pois cada implantação da aplicação exigirá uma modificação no codebase e um processo de implantação coordenado, evitando que a aplicação vá para um ambiente com as constantes erradas. O fator 3 define que deve existir uma separação clara e explícita entre configurações e o codebase, já que o codebase geralmente não varia de acordo com o ambiente, ao contrário das configurações.

Existem diferentes estratégias de gestão de processos de configuração, cada uma delas com suas particularidades e suas aplicabilidades.

Uma das formas mais usadas consiste na definição explícita de arquivos de configurações, arquivos estes que geralmente têm suas respectivas versões para cada ambiente. Se estivermos falando de [Java](https://www.treinaweb.com.br/blog/o-que-e-e-como-comecar-com-java/ "Java") por exemplo, um tipo de arquivo que é muito usado para armazenamento de configurações são os arquivos [YAML](https://www.treinaweb.com.br/blog/o-que-e-yaml/ "YAML") ou PROPERTIES. Geralmente, a aplicação possui múltiplos desses arquivos, um para cada ambiente específico. A aplicação, ao perceber o ambiente onde está sendo executada, carrega as configurações a partir do arquivo correspondente.

Outra estratégia muito comum que podemos citar é a utilização de variáveis de ambiente para armazenar as configurações. Sendo assim, basta à aplicação ler as mesmas variáveis de ambiente em cada ambiente de execução, sendo que estas variáveis são configuradas de maneira independente em cada ambiente.

Também é bem comum encontrarmos uma estratégia híbrida entre arquivos de configuração e variáveis de ambiente. Por exemplo, posso ter uma aplicação que possui diferentes IDs de cliente para conexão em uma API de um fornecedor, dependendo do ambiente de execução.

Sendo assim, cada arquivo vinculado a cada ambiente pode ter a sua definição de ID de cliente explícita. Mas cada ambiente também pode ter um usuário e senha diferentes para conexão ao banco de dados. Neste caso, cada arquivo de cada ambiente pode apontar para uma variável de ambiente, sendo que esta variável é quem define o nome de usuário e senha.

Dessa maneira, é possível isolarmos credenciais de banco de dados dos arquivos de configuração, evitando a exposição destas credenciais para os integrantes que têm acesso ao codebase.

Por fim, ainda existem aplicações que podem auxiliar no processo de gestão de configurações de maneira muito mais robusta e até mesmo distribuída. Algumas dessas ferramentas são o Chef, o Puppet, o Ansible, o TeamCity e o Consul.

Encerramos por aqui o primeiro dessa série de artigos. No próximo, veremos mais **3 fatores**: *Backing services*, *Build, release, run* e *Processes*.

Até lá! :D

- [ #Boas Práticas ](https://www.treinaweb.com.br/blog/tag/boas-praticas)
- [ #saas ](https://www.treinaweb.com.br/blog/tag/saas)
- [ #metodologia ](https://www.treinaweb.com.br/blog/tag/metodologia)
- [ #Heroku ](https://www.treinaweb.com.br/blog/tag/heroku)
- [ #12 Factor App ](https://www.treinaweb.com.br/blog/tag/12-factor-app)
- [ #12 (Twelve) Factor App ](https://www.treinaweb.com.br/blog/tag/12-twelve-factor-app)
- [ #aplicação SaaS ](https://www.treinaweb.com.br/blog/tag/aplicacao-saas)

Autor

 ![Marylene Guedes](//secure.gravatar.com/avatar/5b0ba52b3705f298802db58782656bbc?d=mm)

## Marylene Guedes

 Responsável pelo sucesso do cliente na TreinaWeb. Graduada em Gestão de Tecnologia da Informação pela FATEC Guaratinguetá, além de estudante de UX/UI. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/marylene-guedes)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/TWELVE-FACTOR-APP-400x280.png)  [ Engenharia de Software ](https://www.treinaweb.com.br/blog/categoria/engenharia-de-software) 

     6 anos atrás

    ##  [ O que são os 12 factor app? - Parte 3 ](https://www.treinaweb.com.br/blog/o-que-sao-os-12-factor-app-parte-3) 

     Nesta terceira parte, iremos abordar mais três dos 12 princípios: port binding, concurrency e disposability.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/TWELVE-FACTOR-APP-400x280.png)  [ Engenharia de Software ](https://www.treinaweb.com.br/blog/categoria/engenharia-de-software) 

     6 anos atrás

    ##  [ O que são os 12 Factor App? – Parte 2 ](https://www.treinaweb.com.br/blog/o-que-sao-os-12-factor-app-parte-2) 

     No artigo anterior, foi apresentado o conceito do 12 Factor App. Nessa segunda parte, veremos mais três fatores: Backing Services; Build, Release, Run e Processes.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/unidades_de_medidas_no_css-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ Unidades de medidas no CSS ](https://www.treinaweb.com.br/blog/unidades-de-medidas-no-css) 

     Nesse artigo você irá entender de fato a diferença entre as várias opções de unidades medidas do CSS, como Rem, Em, %, Px, entre outras.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/05112250/SPRING-BOOT-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Criando uma API REST com o Spring Boot ](https://www.treinaweb.com.br/blog/criando-uma-api-rest-com-o-spring-boot) 

     Todos os passos da criação de uma API REST com o framework Spring Boot do Java, no Visual Studio Code.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/lean-ux-como-potencializar-o-foco-na-experiencia-do-usuario-parte-1-400x280.png)  [ Acessibilidade e User Experience (UX) ](https://www.treinaweb.com.br/blog/categoria/acessibilidade-e-user-experience-ux) 

     6 anos atrás

    ##  [ Lean UX: como potencializar o foco na experiência do usuário – parte 2 ](https://www.treinaweb.com.br/blog/lean-ux-como-potencializar-o-foco-na-experiencia-do-usuario-parte-2) 

     Nessa segunda parte, veremos os 15 princípios que regem o Lean UX.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/20161707/PHP-PSR-1-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ O que são as PSRs do PHP ](https://www.treinaweb.com.br/blog/o-que-sao-as-psrs-do-php) 

     Neste artigo veremos o que são as PSRs do PHP. Entenderemos conceitos importantes, como, RFCs e a RFC2119, além de falar sobre o grupo responsável pelas PSRs, o PHP-FIG.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/o-que-e-ruby-on-rails-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ O que é Ruby on Rails? ](https://www.treinaweb.com.br/blog/o-que-e-ruby-on-rails) 

     Veja neste artigo o que é Ruby on Rails.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/01154814/NUGET-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ O que é o NuGet? ](https://www.treinaweb.com.br/blog/o-que-e-o-nuget) 

     Um gerenciador de pacote é essencial em qualquer plataforma de desenvolvimento moderna. Para o .NET há o Nuget, o conheça em detalhes neste artigo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/09/27171418/loiane-groner-400x280.png)  [ Entrevistas ](https://www.treinaweb.com.br/blog/categoria/entrevistas) 

     8 anos atrás

    ##  [ TW Entrevista 12: Loiane Groner ](https://www.treinaweb.com.br/blog/tw-entrevista-12-loiane-groner) 

     Fizemos uma série de entrevistas chamada "TW Entrevista". A entrevistada de hoje é a Loiane Groner, que já escreveu diversos livros publicados internacionalmente e possui os títulos GDE (Google Developer Expert) e Microsoft MVP (Most Valuable Professional).

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/foreach-no-php-aprenda-ler-arrays-e-outras-estruturas-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Foreach no PHP. Aprenda ler arrays e outras estruturas! ](https://www.treinaweb.com.br/blog/foreach-no-php-aprenda-ler-arrays-e-outras-estruturas) 

     O loop foreach no PHP é uma estrutura de repetição simples e flexível! Aprenda corretamente como utilizar para percorrer arrays e outras estruturas no PHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/iterators-php-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Generators no PHP ](https://www.treinaweb.com.br/blog/generators-no-php) 

     Saiba o que são Iterators e Generators, bem como os seus casos de uso.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/11/30154906/TOP-5-1-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     9 anos atrás

    ##  [ Top 5 das linguagens de programação mais populares de 2017 ](https://www.treinaweb.com.br/blog/top-5-das-linguagens-de-programacao-mais-populares-de-2017) 

     O ano está acabando e você, sabe quais foram as linguagens de programação mais utilizadas / populares neste ano?

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **03h 47min 02s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
