Üst Edit: Son zamanlardaki yoğunluk ve öncelik değişikleri nedeniyle bu yazı dizisine devam edemedim. Sorularınız varsa özelden görüşebiliriz. Sayfanın her yerinde sosyal medya hesaplarıma bağlantı var. Birine tıklayarak ulaşabilirsiniz. 🙂

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 supermarket ürünlerine odaklanacak, ürün veya ürün sepetleri hangi markette kaça mal oluyor ve fiyat geçmişi nedir bunu gösterecek.

Full Stack Web Sitesi nasıl geliştirilir?

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ığı, 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ünü 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. Phalcon PHP 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’le 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ü eko sistemi 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 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 spsifikasyonu 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 TailwindCSS’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.

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.

Sorularınız varsa veya fikir alışverişi yapmak isterseniz yorumlardan, Twitter , LinkedIn veya Instagram üzerinden ulaşabilirsiniz. Sevgiler…

Bu yazıda yapılan düzenlemeler
  • 11.05.2022: Yazı özeti düzenlendi