Full Stack Proje Geliştiriyoruz

Sayfayı kopyala
Üst Edit: Son zamanlardaki yoğunluk ve öncelik değişiklikleri nedeniyle bu yazı dizisine planladığım şekilde devam edemedim. Ancak o zamandan beri yapay zeka (AI) destekli süreçlerle birçok yeni full-stack proje geliştirdim. Artık blogda bu yeni projelerin mimarilerinden, modern yazılım süreçlerinden ve yapay zeka ile geliştirme deneyimlerimden sıklıkla bahsediyorum. Bu yazı dizisi yarım kalmış olsa da, blogdaki güncel teknik yazıları ve yeni proje mimarilerini takip etmenizi kesinlikle öneririm. Sorularınız olursa sosyal medya hesaplarım üzerinden bana her zaman ulaşabilirsiniz. :)
💡 Özet (TL;DR):
- Serinin Amacı: Digital Ocean VPS sunucusu üzerinde sıfırdan kurulan bir altyapı ile süpermarket odaklı bir fiyat arama motoru (web, admin paneli ve API) geliştirme sürecini baştan sona planlayan arşivlik bir kılavuzdur.
- Kullanılan Teknolojiler: PHP (Slim Framework / Laravel / Lumen), Vue.js, Tailwind CSS, Docker, Redis, RabbitMQ ve Monolog.
- Durum: Yazarın 2021-2022 yıllarındaki iş yoğunluğu nedeniyle yazı dizisi yarım kalmış olsa da, sunulan genel API mimarisi, loglama tasarımı ve asenkron kuyruk yapısı planları hâlâ güncel birer full-stack yol haritası niteliğindedir.
Blogum kısmen yeni, fakat şimdiden Frontend, Backend ve DevOps ile ilgili birçok konu yer alıyor. Ama artık girizgah yazılarını kenara bırakıp eyleme geçmeye başlıyorum. :)
Uzun süredir askıda olan bir projeyi hayata geçireceğim. Projeyle ilgili burada yazıyor olmak benim için de itici güç olur diye düşünüyorum. Projeye tamamen sıfırdan başlayıp, her adımı da burada yazacağım. Öyle ki AWS'deki mevcut sunucumu dahi kullanmayıp sırf bu iş için Digital Ocean'da ayrı bir sunucu kuracağım.
Ne Yapacağım?
Aklımdaki proje üç parçadan oluşuyor: Mobil ve Web istemcilerine yanıt verecek bir RESTful API Backend, yönetimi yapabileceğim bir 'admin' paneli ve projeyi dünyaya açacak frontend arayüz. Tam bir Full Stack Proje örneği. Mobil tarafı bütün bunlar bittikten sonra başlayacağı için bu yazı dizisinde yer almayacak. Zaten mobil uzmanlık alanım olmadığı için işin o tarafını bir başkasına devredebilirim. :)
Proje temel olarak bir fiyat arama motoru. Cimri ve Akakçe gibi benzerlerinden farklı olarak sadece süpermarket ürünlerine odaklanacak; ürün veya ürün sepetleri hangi markette kaça mal oluyor ve fiyat geçmişi nedir bunu gösterecek.

Ne Paylaşacağım?
Projenin 'business logic', yani mantığı burada doğrudan yer almayacak. Genel amaçlı kullanılabilecek (bu veya herhangi bir projede) API iskeleti, bu iskelette neyin ne yaptığı ve sizin bunu nasıl genişletebileceğinizi detaylı anlatacağım. Bunun dışında kısmi olarak projeden bölümleri paylaşıp örneğin cache sorununu nasıl çözdüğümü, web için yapacağım arayüzü API ile nasıl konuşturduğumu, sıra yönetimini nasıl kullandığımı anlatacağım. Neyi, nasıl ve neden yaptığımı anlatıp kendi projelerinizdeki ihtiyaçlar için fikir vermesini amaçlıyorum.
Projede Neler Var?
VPS Sunucusu
İlk olarak bir VPS sunucu kurarak başlayacağız. Siz isterseniz VPS kullanmadan yerel bilgisayarınızda da çalışabilirsiniz. Ben hem bulut geliştirme ortamı oluşturmak hem de yaptıklarımın bulut sunucudaki performansını görmek için VPS ile devam edeceğim.
AWS'de mevcut bir VPS'im var, ama bu proje için Digital Ocean'dan ayrı bir VPS aldım. Digital Ocean, benim referanslı bağlantım üzerinden gittiğinizde 100$ değerinde 60 gün geçerli kredi veriyor. Benim kurulumum için 10$'lık bir sunucu yeterli ama siz bu krediyle daha büyük bir sunucu da tercih edebilirsiniz.
PHP Framework'ü
Yukarıda belirttiğim üzere bu uzun süredir askıda olan bir proje; bu nedenle daha önce PhalconPHP ile hazırladığım bir API iskeleti vardı ve yönetim tarafına geçmiştim. PhalconPHP eklentisi olarak çalışma avantajını gelecek sürümlerde kaybedeceği için bu çalışmayı çöpe atıp yeni bir framework'le baştan yazmaya karar verdim.
Bunun için Yii, Slim ve Laravel ile ilgili yoğun bir araştırma yaptım. Laravel, piyasaya ilk girdiği zamanlarda kurcalayıp beğendiğim ama o zamandan beri kullanmadığım bir framework. Diğer ikisini hiç kullanmadım; yani üçüne de sıfırdan başlayacağımı söyleyebiliriz. Bu açıdan hiçbiri bana bir avantaj sağlamıyor.
Öte yandan Laravel (ve Laravel'in micro framework'ü Lumen) hakkında yaptığım araştırmalarda gerek bu konuda yazılan makaleler gerekse benchmark sonuçlarına bakarak kaynak kullanımı açısından çok obur olduğunu gördüm. Güçlü ekosistemi ve geliştirici dostu yapısı ile Laravel'i kullanmayı çok istesem de performans konusu beni inanılmaz düşündürdü.
Daha sonra Laravel ve Lumen performansının Swoole server ile oldukça yükseldiğini (ki bu durumda bile ancak diğerlerine yaklaşabiliyorlar) görünce Lumen ile başlamaya, gerektiğinde Swoole ile desteklemeye, zaten o durumda bile başa çıkılamaz hale gelirse kodları başka bir framework (hatta belki dil) ile sıfırdan yazabileceğime karar verdim. Bu nedenle Lumen ve Laravel ile devam edeceğim.
Düzeltme: Yukarıdaki kararıma rağmen Lumen'le başlamak içime sinmediği için SLIM ile başladım. Güzel bir API iskeleti oluşturuyorum. Belirli bir aşamaya geldiğimde hem GitHub'a atacağım hem de adım adım anlatan yazılara başlayacağım.
API Tasarım, Dokümantasyon ve Testi
Henüz proje analizini yapmadım, API ile ilgili ihtiyaçları bilmiyorum ve bu yazı dizisinde işin analiz bölümüne girer miyim emin değilim. Fakat API Tasarım, Dokümantasyon ve Test'i için Swagger platformunu kullanacağım ve gerek kurulum gerekse kullanım aşamasında yaptıklarımı burada yayınlayacağım. Swagger'ı daha önce kullanıp teknik olarak hakim olsam da OpenAPI spesifikasyonu ile ilgili detayları da öğrenmek benim için de güzel bir fırsat olacak.
Frontend Elemanları
HTML, CSS, JavaScript vs. şeklinde yazmaya gerek yok ama frontend tarafında Vue.js ve Tailwind CSS'i kullanacağım bir proje olacak. Tailwind CSS'e yönetim panelinde çok detaylı girmesem de web arayüzünde hem daha etkili hem daha etkin (hem güzel görünen hem az yer kaplayan) şekilde kullanmalıyım.
Konteyner Sistemi ve Ek Sunucular
Geliştirme ortamımı Docker konteynerleri üzerinde inşa edeceğim. Laravel/Slim deneyimim farklı şekillendirir mi bilmiyorum ama MariaDB'ye ek olarak Redis ve RabbitMQ'yu da projeye ekleyebilirim. PhalconPHP ile yaptığım projede cache için generational caching yaklaşımı ve cache motoru olarak da APC ve Redis'i kullanmıştım. Laravel/Slim beni nerelere götürecek göreceğiz.
Loglama
Loglama bu işin hem en basit hem de en karmaşık kısmı. Birçok kaynaktan log toplanması ve bunun dağıtık bir sistemde de çalışır şekilde düşünülmesi gerekiyor. Dosya sistemi esaslı bir loglamanın sağlıklı olmayacağı kesin. Veritabanlarının da asıl işi bu olmadığına göre, profesyonel bir log çözümü kullanmalıyız. PHP kütüphanesi olarak Monolog kullanacağımı biliyorum ama sunucu tarafını nasıl çözerim teorik bilgi dışında deneyimim yok. Onu da birlikte deneyimleyeceğiz.
CLI
Son olarak bazı dış (online) kaynaklardan veri toplayıp bunları kendi veritabanıma entegre etmem gerekiyor (zaten projenin ana fikri bu). Veriyi toplayacağım kaynaklar Instagram, Facebook vs. gibi veriyi paylaşma konusunda cimri olmadıkları için bunu basit bir Python veya PHP CLI kodu ile çözerim. Doğrudan proje kodu olmasa bile, veri toplama işi nasıl yapılır bunu anlatan yazılar paylaşabilirim.
Planlanan Proje Teknoloji Yığını (Tech Stack)
| Katman | Seçilen Teknoloji | Amacı / Görevi |
|---|---|---|
| Altyapı (Infrastructure) | Digital Ocean VPS + Docker | Taşınabilir ve izole edilmiş geliştirme/üretim ortamı. |
| API (Backend) | PHP (Slim Framework) | İstemcilere veri sunan hızlı, minimalist ve güvenli RESTful servis. |
| Arayüz (Frontend) | Vue.js + Tailwind CSS | Modern, hızlı ve responsive kullanıcı ve yönetim arayüzleri. |
| Önbellek & Kuyruk | Redis + RabbitMQ | Veritabanı yükünü azaltma ve asenkron arka plan işlemleri (worker). |
| Loglama & Dokümantasyon | Monolog + Swagger (OpenAPI) | Dağıtık sistem izleme ve standartlaştırılmış API dokümantasyonu. |
Kod Adı Full Stack
Bu seride belki onlarca yazı yer alacak ve bunları Full Stack etiketi ile etiketleyeceğim, böylece ilgili yazılara ulaşmanız kolay olacak. Bu yazıların hem benim hem de bu konularda bir şeyler öğrenmek isteyenler için faydalı olmasını ümit ediyorum.
Serinin içindekiler bölümünü ayrı bir yazıda tutuyorum. Full Stack Proje ağacı başlıklı yazı içinden diğer tüm yazılara bağlantı bulabilirsiniz.
Bu Yazıda Yapılan Düzenlemeler
- 11.05.2022: Yazı özeti düzenlendi.
- 21.06.2026: Yazım hataları düzeltildi, Üst Edit modern AI destekli projeleri işaret edecek şekilde güncellendi, TL;DR özet ve teknoloji yığını tablosu eklendi.
