İnfografik: Adapter deseni farklı dış dilleri ortak modele çevirir, Strategy deseni hangi adaptörün çalışacağını seçer — Controller'dan Use case'e, oradan MenuAdapter portuna, sonra XFirmMenuAdapter (X API, JSON) ve YFirmMenuAdapter (Y API, XML)
8 Ağu 2026 · 7 dk

Adapter ve Strategy: Dış Servisleri Domain'in Dışında Tutmak

Birden fazla dış servisle entegre olurken hiçbirinin iş mantığınıza sızmasına izin vermemek: tek bir port, birden çok adaptör ve hangi adaptörün çalışacağını seçmenin iki yolu.

İnfografik: solda iç içe geçmiş if-else bloklarından oluşan Arrow Anti-Pattern, sağda aynı kuralların art arda erken return'lerle yazılmış hali ve en sonda mutlu yol
8 Ağu 2026 · 8 dk

Clean Code: Guard Clauses ve Early Return

Arrow Anti-Pattern’den kurtulup iş kurallarını düz bir akışta yazmak: Guard Clauses, Early Return ve bunların unit testlerle nasıl test edileceği.

İnfografik: solda Kafka log tabanlı model — mesajlar kalır, tüketiciler kendi offset'ini takip eder, gazete arşivi benzetmesi; sağda RabbitMQ queue tabanlı model — mesajlar teslim edilince kuyruktan çıkar, postane benzetmesi; ortada bir topic log'u iki consumer group ile ve bir kuyruk ack akışıyla; altta replay, retry, paralellik, routing ve sıralama başlıklarında karşılaştırma
9 Ağu 2026 · 36 dk

Kafka mı RabbitMQ mu? Mesajın Yaşam Döngüsü Neyi Değiştiriyor?

Kafka mesajları log’da tutar, RabbitMQ ise teslim durumunu takip eder. Aynı işi iki broker’da da kurup nerede zorlandıklarına bakıyoruz: hangisini neye göre seçmeli?

İnfografik: iş akışından tek bir INSERT ile atomik enqueue, e-posta kuyruğu tablosu, idempotent claim ve sağlayıcıya gönderim; altında mükerrer gönderim, sessiz kayıp, stuck-job recovery, retry ve retention başlıkları ile DB-poll–broker karşılaştırması
8 Ağu 2026 · 12 dk

Asenkron E-posta Gönderim Sistemi: Stack'ten Bağımsız Bir Tasarım

Tek bir INSERT ile kabul edilen, worker’ların güvenilir biçimde işlediği bir e-posta kuyruğu: veri modeli, yarış koşulları, exactly-once’ın neden mümkün olmadığı ve DB-poll ile broker arasındaki tercih.

İnfografik: rezervasyon isteği zincirin halkalarından sırayla geçiyor — uçuş, koltuk, yolcu yasaklı listesi, pasaport ve tutar kontrolleri onaylanıyor, promosyon kodu kontrolünde zincir duruyor
8 Ağu 2026 · 12 dk

Chain of Responsibility: Karmaşık Kuralları Bir Pipeline'a Dönüştürmek

Havayolu rezervasyonundaki koltuk, no-fly, pasaport, tutar ve promosyon kontrollerini bağımsız zincir halkalarına ayırarak Spring Boot’ta Chain of Responsibility uygulaması.

İnfografik: bir havalimanı terminalinde tek bir kapı olarak çizilmiş Facade; istek bu kapıdan giriyor, arkasında ödeme sistemi, bilet oluşturma, bagaj sistemi, bildirim gönderimi ve sadakat puanları duruyor
8 Ağu 2026 · 9 dk

Facade Pattern: Karmaşık Alt Sistemleri Tek Bir Kapının Arkasına Saklamak

Facade Pattern, karmaşık alt sistemleri ortadan kaldırmaz; onları tek bir kapının arkasına saklar. Spring Boot’ta gerçek bir havayolu rezervasyon senaryosu üzerinden görelim.

İnfografik: merkezde Zustand store'unu temsil eden bir kule, çevresinde ülke seçimi, kargo yöntemi, ödeme yöntemi, sipariş özeti ve kupon kutuları — hepsi birbirine değil yalnızca merkeze bağlı
8 Ağu 2026 · 9 dk

Mediator Pattern: React'te Bileşenler Arasındaki Karmaşayı Yönetmek

Ülke, kargo, ödeme ve kupon gibi bileşenlerin birbirini etkilediği bir checkout ekranında Mediator Pattern’i Zustand ile uygulamak.

İnfografik: findAll() sonrası döngüde getBooks() çağrısı 1 ana sorgu artı N ilişki sorgusu üretiyor; altında dört çözüm — JOIN FETCH, @EntityGraph, batch fetching ve DTO projection
8 Ağu 2026 · 9 dk

N+1 Query: ORM Kullanırken Sessiz Performans Tuzağı

Ana kayıtları tek sorguda çekip ilişkiler için ek sorgular çalıştırmak: N+1 problemi nasıl oluşur, nasıl fark edilir ve hangi çözüm ne zaman kullanılmalı?

3 Tem 2025 · 9 dk

Nginx Nedir? Neden Kullanılır?

Nginx, temel olarak açık kaynaklı ve yüksek performanslı bir web sunucusudur. Ancak işlevi yalnızca bununla sınırlı değildir; aynı zamanda bir reverse proxy olarak da görev yapar. Reverse proxy, istemciden gelen talepleri alarak bunları arka plandaki sunuculara yönlendiren bir katmandır. Bu sayede istemci, doğrudan uygulama sunucusuyla değil, Nginx aracılığıyla iletişime geçer. …

Çan eğrisi capsi: iki uçta da “everything is a CRUD”, ortada iş kurallarını ve doğrulamaları sayan uzun bir itiraz
30 Mar 2025 · 16 dk

Geliştirici olmak için izlediğim yol

Zaman zaman birileriyle sohbet ederken “Nasıl geliştirici olunur?”, “Zaten geliştiriciyim ama kendimi nasıl daha iyi bir noktaya taşırım?” gibi sorular geliyor. Bu yazıda doğrudan bu sorulara cevap vermektense, kendi yolculuğumu, yaptığım hataları, doğruları ve yanlışları paylaşmak istiyorum. Anlatacaklarım bu konu hakkında fikir edinmenize yardımcı olacaktır diye umuyorum. …