6 min read

12 Factor App (Twelve-Factor App) Metodolojisi

February 27, 202314:49

12 Factor App, Heroku platformu geliştiricisi Adam Wiggins tarafından geliştirilmiş bir metodolojidir. 12 Factor App prensipleri, Heroku'nun deneyimlerine dayanarak oluşturulmuş ve uygulamaların bulut tabanlı ortamlarda daha iyi performans göstermesini sağlamak amacıyla ortaya çıkmıştır.

12 Factor App, Heroku'nun uygulama geliştirme ve dağıtım süreçlerinde elde ettiği başarılardan yola çıkarak oluşturulmuş ve zamanla yaygın bir kabul görmüştür. Bu prensipler, uygulamaların taşınabilirliği, ölçeklenebilirliği, sürdürülebilirliği ve yönetilebilirliği gibi önemli faktörleri optimize etmek için geliştiricilere bir yol gösterici sunmaktadır. 12 Factor App, yazılım geliştirme topluluğunda geniş bir kabul görmüş ve modern uygulama geliştirme süreçlerinde yaygın olarak kullanılan bir referans haline gelmiştir.

1. Codebase (Kod Tabanı)

“One codebase tracked in revision control, many deploys”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Codebase (Kod Tabanı): Tek bir kod tabanı, uygulamanın farklı ortamlarda çalışmasını sağlar. Farklı ortamlar için yapılandırma ayarlarını içeren dış kaynaklardan bağımsız olmalıdır. Örnek: Bir e-ticaret uygulaması için, tüm kaynak kodlarını içeren bir Git reposu kullanılabilir.

2. Dependencies (Bağımlılıklar)

“Explicitly declare and isolate dependencies”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Dependencies (Bağımlılıklar): Uygulamanın bağımlı olduğu tüm bileşenlerin, bağımlılık yöneticisi gibi bir araçla açıkça belirtilmesi gerekmektedir. Örnek: Bir Node.js projesinde package.json dosyası, uygulamanın bağımlı olduğu paketleri ve sürümlerini belirtir.

3. Config (Yapılandırma)

“Store config in the environment”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Config (Yapılandırma): Yapılandırma ayarları, uygulamanın dışarıdan ayarlanabilir olmalıdır. Yapılandırma ayarları kod içine gömülmemeli ve çevresel değişkenler veya yapılandırma dosyaları gibi dış kaynaklardan okunmalıdır. Örnek: Bir web uygulamasında, veritabanı bağlantı bilgileri gibi yapılandırma ayarları, bir yapılandırma dosyasında veya ortam değişkenlerinde saklanabilir.

4. Backing Services (Destekleyici Hizmetler)

“Treat backing services as attached resources”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Backing Services (Destekleyici Hizmetler): Uygulama, veritabanları, mesaj kuyrukları veya çevrimiçi hizmetler gibi dış hizmetlere bağımlı olabilir. Bu hizmetlere erişim, dışarıdan sağlanmalıdır. Örnek: Bir e-posta gönderme işlevi, bir dış e-posta hizmetine (örneğin, SendGrid veya Mailgun) bağımlı olabilir.

5. Build, Release, Run (Derleme, Yayınlama, Çalıştırma)

“Strictly separate build and run stages”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Build, Release, Run (Derleme, Yayınlama, Çalıştırma): Derleme süreci, uygulamanın kaynak kodlarını bir yürütülebilir duruma dönüştürür. Yayınlama süreci, derlenmiş uygulamanın belirli bir ortamda çalışmasını sağlar. Çalıştırma süreci ise uygulamanın çalıştırılmasını yönetir. Örnek: Bir CI/CD (Continuous Integration/Continuous Deployment) aracı, kaynak kodunu derler, test eder ve bir sunucuya yayınlar.

6. Processes (İşlemler)

“Execute the app as one or more stateless processes”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Processes (İşlemler): Uygulama, tek bir süreç içinde çalışmaktansa, bağımsız ve birbirleriyle iletişim kuran çok sayıda işlem parçasına (process) bölünmelidir. Örnek: Bir web sunucusu, gelen istekleri işlemek için birden fazla işlem parçası kullanabilir.

7. Port Binding (Bağlama)

“Export services via port binding”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Port Binding (Bağlama): Uygulama, içerisinde çalıştığı sunucuya dinamik olarak bağlanmalıdır. İstemciye veya sunucuya sabit bir IP veya port atamamalıdır. Örnek: Bir web sunucusu, belirli bir port üzerinden gelen isteklere dinamik olarak yanıt vermelidir.

8. Concurrency (Eş Zamanlılık)

“Scale out via the process model”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Concurrency (Eş Zamanlılık): Uygulama, dikey veya yatay ölçeklenebilirlik için paralel olarak çalışabilme yeteneğine sahip olmalıdır. Örnek: Bir mesaj kuyruğu, aynı anda birden fazla işlemi eşzamanlı olarak işleyebilmelidir.

9. Disposability (Atılabilirlik)

“Maximize robustness with fast startup and graceful shutdown”

Disposability (Atılabilirlik): Uygulama, dinamik olarak başlayıp durdurulabilir olmalı ve hızlı bir şekilde ölçeklendirilebilir olmalıdır. Bir işlem sona erdiğinde kaynakları serbest bırakmalıdır. Örnek: Bir mikro servis, yüksek talep anlarında otomatik olarak ölçeklendirilebilir ve gereksiz olduğunda hızlıca sonlandırılabilir.


10. Dev/Prod Parity (Geliştirme/Üretim Eşitliği)

“Keep development, staging, and production as similar as possible”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Dev/Prod Parity (Geliştirme/Üretim Eşitliği): Geliştirme, test ve üretim ortamları arasında mümkün olduğunca benzerlik sağlanmalıdır. Bu, hataların ortaya çıkmasını azaltır. Örnek: Geliştirme ortamında kullanılan veritabanı sürümü, üretim ortamında da kullanılmalıdır.

11. Logs (Kayıtlar)

“Treat logs as event streams”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Logs (Kayıtlar): Uygulama, çalışma zamanında oluşan logları etkin bir şekilde yakalamalı ve yönetmelidir. Bu loglar, uygulamanın durumunu ve hatalarını izlemek için kullanılabilir. Örnek: Bir web sunucusu, gelen istekler ve hata mesajları gibi logları bir merkezi log yönetim sistemine gönderebilir.

12. Admin Processes (Yönetici İşlemleri)

“Run admin/management tasks as one-off processes”

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Admin Processes (Yönetici İşlemleri): Yönetici görevlerinin, uygulama içinde bir komut satırı arayüzü aracılığıyla gerçekleştirilebilmesi sağlanmalıdır. Bu işlemler, uygulamanın yapılandırmasını değiştirebilir veya teşhis amacıyla kullanılabilir. Örnek: Bir e-ticaret uygulamasında, veritabanı tablolarını oluşturmak veya yönetici hesapları oluşturmak gibi yönetici işlemleri gerçekleştirebilirsiniz.

12 Factor App
["An illustrated guide to 12 Factor Apps", Redhat](https://www.redhat.com/architect/12-factor-app)

Sonuç

Sonuç olarak, bu prensipler, uygulamaların bulut tabanlı ortamlarda daha iyi performans göstermesini sağlamak amacıyla geliştirilmiştir. Uygulamaların taşınabilirliği, ölçeklenebilirliği, sürdürülebilirliği ve yönetilebilirliği gibi önemli faktörleri optimize etmek için geliştiricilere bir yol gösterici sunar. 12 Factor App prensipleri, modern yazılım geliştirme süreçlerinde geniş bir kabul görmüş ve başarılı uygulamaların geliştirilmesinde yaygın olarak kullanılan bir referans haline gelmiştir.

Bu prensipler, kod tabanının etkin bir şekilde yönetilmesini, bağımlılıkların açıkça belirtilmesini, yapılandırmanın dış kaynaklarda saklanmasını, destekleyici hizmetlere bağımlılığın doğru şekilde yönetilmesini, derleme, yayınlama ve çalıştırma süreçlerinin ayrıştırılmasını, işlemlerin bağımsız olarak çalışmasını, bağlama ve eş zamanlılık konularının göz önünde bulundurulmasını, atılabilirlik ve ölçeklenebilirlik unsurlarının dikkate alınmasını, geliştirme ve üretim ortamları arasında benzerlik sağlanmasını, log yönetiminin etkin bir şekilde yapılmasını ve yönetici işlemlerinin kolaylıkla gerçekleştirilebilmesini vurgular.

Bu prensiplere uygun bir şekilde tasarlanan uygulamalar, daha esnek, taşınabilir, ölçeklenebilir, sürdürülebilir ve güvenilir olma özelliklerini kazanır. 12 Factor App, modern yazılım geliştirme süreçlerindeki başarıyı artırırken, ekip çalışmalarını kolaylaştırır ve hızlı ve etkili bir şekilde uygulama dağıtımını ve yönetimini sağlar. Dolayısıyla, bu prensipleri dikkate alarak geliştirilen uygulamalar, hem geliştiriciler hem de kullanıcılar için önemli avantajlar sunar.

Umarım bu yazı sizler için faydalı olmuştur. Diğer tüm yazılarıma göz atmayı unutmayın. Şimdilik hoşça kalın!


Referanslar

Share this post

Link copied!
Mustafa Kürşad Başer

Mustafa Kürşad Başer

Software Engineer

A passionate software engineer who enjoys creating elegant solutions to complex problems. Beyond coding, I am deeply interested in exploring the intersections of technology, art, and human consciousness.

Mustafa Kürşad BAŞER

Software Engineer

A software engineer who brings complex problems together with elegant solutions and loves to add value by sharing what he learns.

Software Development
Neuroscience
History & Philosophy

© 2025 Mustafa Kürşad BAŞER. All rights reserved.

Çerez Tercihleri

Size daha iyi bir deneyim sunabilmek için çerezleri kullanıyoruz. Analitik ve reklam amaçlı çerezler hakkında detaylı bilgi için ayarları özelleştirebilirsiniz.