Spring Boot Ekosistemi
Sihir değil, proxy
Dependency injection, bean yaşam döngüsü, JPA/Hibernate, transaction yönetimi ve Spring Security. "Nasıl çalışıyor" sorusunun cevapları.
25 ders 223 dk toplam süre Sertifikan
Bu konunun dersleri şu çalışma yollarında: Adım Adım Backend (15) , Derin Sular (7) , Üretimde Ayakta Kalmak (4) , Veriyle Barışmak (2)
Başlangıç
- 1/3 yıldız2/3 yıldız3/3 yıldız IoC ve Dependency Injection Bir sınıf ihtiyaç duyduğu nesneleri kendisi yaratmaz, dışarıdan ister; Spring de onları getirip verir. Bunları constructor ile istemek en güvenlisi: bir döngü varsa uygulama açılırken hemen fark edersin. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Bean Yaşam Döngüsü ve Scope'lar Spring bir nesneyi birkaç adımda hazırlar ve @Transactional gibi etiketleri çalıştıran aracı (proxy) en son eklenir. Bu yüzden @PostConstruct içinden çağrılan @Transactional sessizce hiçbir şey yapmaz. 10 dk
Orta
- 1/3 yıldız2/3 yıldız3/3 yıldız Spring MVC — Bir İstek Controller'a Nasıl Ulaşır? Her HTTP isteği önce filter'lardan geçer, sonra tek kapıdan, DispatcherServlet'ten girer. İçeride doğru metot bulunur, JSON nesneye çevrilir ve cevap yine JSON'a yazılır. Hatanın nerede çıktığı, onu kimin göreceğini belirler. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız JPA N+1 Problemi Bir liste çektin, sonra her elemanın detayına baktın: 1 sorgu yerine 1+N sorgu çalıştı. Sorun sorguların yavaşlığı değil, sayısı. EAGER bunu çözmez; fetch join, EntityGraph ya da BatchSize çözer. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Transaction Propagation ve Rollback Yayılımı Bir metot patladı, sen hatayı yakalayıp devam ettin; ama sipariş yine de kaydedilmedi. Çünkü içteki metot ayrı bir transaction açmamış, seninkine katılmış ve onu 'geri alınacak' diye işaretlemişti. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız AOP, Proxy ve Self-Invocation Tuzağı Spring, @Transactional gibi etiketleri sınıfın etrafına bir aracı (proxy) koyarak çalıştırır. Aracı yalnızca dışarıdan gelen çağrıları görür; sınıf kendi metodunu çağırırsa etiket sessizce hiçbir şey yapmaz. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Auto-configuration — Bu Bean Nereden Geldi? Spring Boot sihir yapmaz, bir kontrol listesine bakar: şu kütüphane var mı, şu ayar yazılmış mı, sen zaten kendi nesneni tanımladın mı? Eksik olanı kurar, seninkini gördüğünde geri çekilir. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Validation ve Hata Yönetimi — İstemci Ne Görüyor? Alanın üstüne @Positive yazmak yetmez; @Valid demezsen kimse kontrol etmez. Hataları da tek bir yerde doğru koda çevir: bozuk istek 400, iş kuralı ihlali 409 gibi 4xx, kod hatası sade bir 500. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Persistence Context — Hibernate'in Hafızası Hibernate yüklediği her nesnenin fotoğrafını tutar ve iş bitince farkı kendisi kaydeder; save() demene gerek yok. İş bittikten sonra yapılan değişiklik ise hiçbir yere yazılmaz. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız @Async ve Thread Havuzu — Max Neden Hiç Dolmuyor? @Async bir işi arka plana atar, ama yalnızca başka bir sınıftan çağrılınca. Havuz işi önce kalıcı işçilere, sonra kuyruğa, kuyruk dolunca ek işçilere verir. Kuyruğun sonu yoksa ek işçi hiç çağrılmaz. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Spring Cache — @Cacheable Kimin Cevabını Hatırlıyor? @Cacheable bir sonucu bir anahtarla saklar ve bir dahakine metodu hiç çalıştırmadan onu verir. Anahtar, sonucu değiştiren her şeyi içermeli; birden çok sunucu varsa her birinin defteri ayrıdır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Konfigürasyon ve Profiller — Bu Değer Nereden Geldi? Boot aynı ayarı birçok yerden okuyabilir ve sırada sonra gelen kazanır: komut satırı ortam değişkenini, o da dosyaları ezer. Adını yanlış yazdığın bir değişken ise hata vermez, sessizce yok sayılır. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Spring Kafka Hata Yönetimi — Bozuk Mesaj Partition'ı Durdurur mu? Kafka'dan gelen bir mesaj işlenemezse Spring onu birkaç kez dener, sonra log'a yazıp atlar: mesaj kaybolur. İşlenemeyen mesajları ayrı bir 'sahipsiz' kuyruğa (DLT) koymak, kaybı önlemenin yoludur. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız @Scheduled ve ShedLock — Cron İşi Kaç Pod'da Çalışıyor? @Scheduled her sunucuda ayrı çalışır: üç kopya çalıştırırsan iş de üç kez çalışır. ShedLock veritabanına bir satır yazarak işi tek sunucuya indirir; kilidin süresini de işin süresine göre seçmek gerekir. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız JPA Projection ve DTO — Üç Alan İçin Ne Kadar Veri? Sadece bir listede isim ve fiyat göstereceksen bütün nesneyi yüklemene gerek yok. Projection ya da record DTO yalnızca gereken sütunları getirir. Ama @Value ile yazılan açık projection nesnenin tamamını yine yükler. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Yapılandırılmış Loglama — Gece 2'de Doğru Satırı Bulmak ✦ yeni Bir hata çıktığında cevap loglardadır, ama onu bulup bulamayacağını logları nasıl yazdığın belirler. Alanlara ayrılmış JSON satırlar, her isteğin taşıdığı bir trace id ve maskelenmiş kişisel veri, aramayı tahminden kesinliğe taşır. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız OAuth2 ve OIDC — Şifreni Vermeden Nasıl Giriş Yapılır? ✦ yeni Authorization code akışında şifre yalnızca kimlik sağlayıcıya girilir; uygulama bir kod alır ve onu token'lara çevirir. state sahte dönüşleri, PKCE çalınan kodları durdurur. ID token kim olduğunu, access token neye erişebildiğini söyler. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Parola Saklama — Kullanıcı Tablosu Sızdı, Şimdi Ne Olacak? ✦ yeni Parola şifrelenmez, hash'lenir. Tuzsuz hızlı bir hash aynı parolaları ele verir ve hazır tablolara yenilir; tuz bunu durdurur ama tahmini ucuz bırakır. bcrypt gibi yavaş bir hash ile sızmış parolaları kayıtta reddetmek birlikte çalışır. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız SSRF — Müşterinin Verdiği Adresi Sunucu Neden Çağırmamalı? ✦ yeni Kullanıcının verdiği bir URL'yi sunucu çağırırsa, istek sunucunun yetkileriyle gider ve iç ağa ulaşabilir. Yazıya bakan yasak listesi kolayca atlatılır; izin listesi, çözülen IP kontrolü ve yönlendirmesiz istek bunu durdurur. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız WAR ve Uygulama Sunucusu — Tomcat'te Çalışan, WildFly'da Neden Açılmadı? ✦ yeni Bir WAR, kendi başına değil bir sunucunun içinde çalışır. Sunucunun konuştuğu paket adları (javax ya da jakarta) uymalı ve her kütüphanenin tek bir sahibi olmalı: Tomcat JPA getirmez, WildFly getirir. 9 dk
İleri
- 1/3 yıldız2/3 yıldız3/3 yıldız Spring Security Filter Chain Spring Security, istek controller'a varmadan önce sırayla geçtiği bir turnike dizisidir. Önce 'sen kimsin?', en sonda 'buna iznin var mı?' sorulur. 401 ile 403'ün farkı da buradan gelir. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Oturum Yönetimi ve Stateless Ölçekleme Kullanıcının oturumunu sunucunun belleğinde tutarsan, o sunucu kapanınca kullanıcı da düşer. Sticky session bunu sadece erteler. JWT kimseyi düşürmez ama 'çıkış yap' demeyi zorlaştırır. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Actuator ve Gözlemlenebilirlik — Sağlık, Metrik, İz Uygulaman iki farklı soruya cevap verir: 'yaşıyor musun?' (liveness) ve 'iş alabilir misin?' (readiness). Veritabanını ilk soruya bağlamak, küçük bir kesintiyi bütün uygulamanın yeniden başlamasına çevirir. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Graceful Shutdown — Deploy Sırasında Kaç İstek Düşer? Yeni sürüme geçerken eski sunucu kapanır. Kapanış sırasında hem yarım kalan isteklerin bitmesini beklemek hem de yeni isteklerin o sunucuya gelmesini durdurmak gerekir; ikisi aynı anda olmaz. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız WebFlux ve Event Loop — Bloklayan Tek Satır Neyi Durdurur? WebFlux birkaç işçiyle binlerce isteği taşıyabilir, ama yalnızca hiçbir işçi bir yerde beklemediği sürece. Tek bir bekleyen veritabanı çağrısı herkesi durdurur. Bekleyen kodun çoksa virtual thread daha basit bir yoldur. 9 dk