← Back to Blog
MIMARI

Twelve-Factor App Nedir?

F. Çağrı BilgehanJanuary 26, 202611 min read
twelve factorcloud nativebest practicesmimari

Twelve-Factor App Nedir? Modern Uygulama Geliştirme Prensipleri

2011'de Heroku'nun kurucuları tarafından yayınlanan Twelve-Factor App metodolojisi, modern SaaS uygulamaları geliştirmek için 12 temel prensibi tanımlar. Cloud native çağında bu prensipler her zamankinden daha geçerlidir.

Neden 12-Factor?

Bu prensipler şu sorunları çözer:

  • Geliştirme ve üretim ortamı arasındaki farklar
  • Ölçekleme zorlukları
  • Dağıtım karmaşıklığı
  • Yeni ekip üyelerinin adaptasyon süresi

12 Prensip Detaylı Açıklama

I. Codebase — Tek Kod Tabanı

Her uygulama tek bir kod deposunda yaşar. Birden fazla deploy olabilir (staging, production), ama kod tabanı tektir.

Tek Repo → Staging Deploy
         → Production Deploy
         → Review Deploy

❌ Aynı kod tabanından farklı uygulamalar çıkarmayın.

II. Dependencies — Açık Bağımlılık Tanımı

Tüm bağımlılıklar açıkça tanımlanmalı. Sisteme bağımlılık olmamalı.

{
  "dependencies": {
    "next": "14.0.0",
    "react": "18.2.0",
    "gray-matter": "4.0.3"
  }
}

npm install veya pip install -r requirements.txt ile tüm bağımlılıklar kurulabilir olmalı.

III. Config — Ortam Değişkenleri

Konfigürasyon kodda değil, ortam değişkenlerinde tutulur:

# .env
DATABASE_URL=postgresql://user:pass@host:5432/db
API_KEY=sk-abcdef123456
ENVIRONMENT=production
// Kodda sabitleme yok
const dbUrl = process.env.DATABASE_URL;

IV. Backing Services — Takılabilir Servisler

Veritabanı, cache, e-posta servisi gibi dış bağımlılıklar, konfigürasyon değiştirerek takas edilebilir olmalı:

Geliştirme: DATABASE_URL=postgres://localhost/dev
Üretim:     DATABASE_URL=postgres://cloud-sql/prod

Kod değişikliği gerekmez.

V. Build, Release, Run — Aşama Ayrımı

Build (derleme), Release (sürüm) ve Run (çalışma) aşamaları kesin olarak ayrılmalıdır:

Build:   Kodu derle, bağımlılıkları çöz → Artifact
Release: Artifact + Config → Sürüm
Run:     Sürümü çalıştır → Çalışan uygulama

VI. Processes — Stateless Süreçler

Uygulama stateless süreçler olarak çalışmalı. Oturum bilgisi, dosya gibi durumsal veriler dış servislerde (Redis, veritabanı) tutulmalı.

❌ Yanlış: session verisini bellekte tut
✅ Doğru: session verisini Redis'te tut

VII. Port Binding — Port ile Servis Sunumu

Uygulama kendi web sunucusunu barındırmalı ve belirli bir port üzerinden servis sunmalı:

const server = app.listen(process.env.PORT || 3000, () => {
  console.log(`Server listening on port ${process.env.PORT}`);
});

VIII. Concurrency — Süreç ile Ölçekleme

Yatay ölçekleme, daha fazla süreç (process) ekleyerek yapılır:

Web:    2 instance
Worker: 4 instance
Cron:   1 instance

IX. Disposability — Hızlı Başlatma ve Düzgün Kapatma

Uygulamalar saniyeler içinde başlamalı ve graceful shutdown yapmalı:

process.on('SIGTERM', async () => {
  await server.close();
  await db.disconnect();
  process.exit(0);
});

X. Dev/Prod Parity — Ortam Benzerliği

Geliştirme, staging ve üretim ortamları mümkün olduğunca benzer olmalı:

  • Aynı veritabanı (SQLite değil, PostgreSQL)
  • Aynı bağımlılıklar
  • Docker ile ortam standardizasyonu

XI. Logs — Olay Akışı

Loglar dosyaya yazılmaz, stdout'a gönderilir. Log toplama ve analizi dış araçlarla yapılır:

// ✅ Doğru
console.log(JSON.stringify({ level: 'info', message: 'Order created', orderId }));

// ❌ Yanlış
fs.appendFileSync('/var/log/app.log', message);

XII. Admin Processes — Tek Seferlik Görevler

Veritabanı migration, script çalıştırma gibi görevler tek seferlik süreçler olarak çalıştırılır:

npm run migrate
npm run seed
node scripts/cleanup.js

BilgeOne'da 12-Factor

BilgeOne platformu bu prensipleri nasıl uyguluyor:

| Prensip | Uygulama | |---------|----------| | Codebase | GitHub monorepo | | Dependencies | package.json | | Config | .env + Cloud Run env vars | | Backing Services | Supabase (PostgreSQL, Auth) | | Build/Release | GitHub Actions + Docker | | Processes | Stateless Next.js | | Port Binding | Cloud Run port injection | | Concurrency | Cloud Run auto-scaling | | Disposability | Container hızlı başlatma | | Parity | Docker ile ortam standardizasyonu | | Logs | Cloud Run stdout logging | | Admin | npm scripts |

Sonuç

Twelve-Factor App prensipleri, bulut çağının en temel yazılım geliştirme rehberidir. Bu prensiplere uygun geliştirilen uygulamalar daha ölçeklenebilir, bakımı kolay ve taşınabilir olur.

Cloud Native ve 12-Factor prensiplerini LabLudus platformunda DevOps kariyer yolunda pratik ederek öğrenin.

Related Posts

Message Queue Nedir?

Message Queue nedir ve neden kullanılır?

Yazılım Mimarisi Nedir? Temelden İleri Seviyeye Kapsamlı Rehber

Yazılım mimarisi nedir, neden önemlidir ve nasıl öğrenilir?