☕ B1 · Proje İskeleti: Maven, spring-boot-starter-web

B1 · Proje İskeleti: Maven: Bir Spring Boot projesi kurmak, bir **restoran açmadan önce mutfağı döşemek** gibidir: henüz tek bir yemek (endpoint) yapmadan önce ocağı, tezgahı ve

Bir Spring Boot projesi kurmak, bir **restoran açmadan önce mutfağı döşemek** gibidir: henüz tek bir yemek (endpoint) yapmadan önce ocağı, tezgahı ve elektriği (web sunucusu, dependency'ler, çalıştırma mekanizması) hazırlarsın. `spring-boot-starter-web` bir "başlangıç paketi"dir — tek satır bağımlılık eklersin, arkasında gömülü bir Tomcat sunucusu, JSON dönüştürücü (Jackson) ve tüm web altyapısı gelir. Peki neden her parçayı tek tek eklemek yerine bir "starter" kullanıyoruz? Çünkü uyumlu sürümleri elle eşleştirmek (Tomcat X, Jackson Y, Spring Z) saatler alır ve bir sürüm çakışması tüm uygulamayı çökertir; starter bu uyumlu seti tek kararla getirir. Bunun tester için anlamı: API henüz "iş" yapmasa da `mvn spring-boot:run` ile ayağa kalkmalı ve boş bir `/api/v1/bugs` bile bir response dönebilmelidir — kurulum kırıksa hiçbir test koşamaz. QA açısından ilk "smoke test", uygulamanın hiç hata vermeden başlayıp bir port dinlemesidir; bu geçmeden fonksiyonel testlere geçmek zaman kaybıdır.

Minimum İskelet: pom.xml + Uygulama Sınıfı

Micro Lab: Kod yazma

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

Adim Adim: Kod yazma

Amaci ve girdiyi belirle

Kritik satiri tamamla

Cikti veya davranisi kontrol et

Hata mesajini kanit olarak oku

Duzeltmeyi tekrar calistir

Kod okuma ve dogrulama akisini sirala.

**🐞 Defect Doğum Anı — `spring-boot-starter-validation` unutulursa** **Kod:** `pom.xml`'e sadece `starter-web` eklendi, `starter-validation` YOK. **Ne olur:** B6'da `@Valid` ile `@NotBlank` yazarsın ama sınıf yolunda validation kütüphanesi olmadığı için Spring bu annotation'ları SESSİZCE görmezden gelir. `POST /api/v1/bugs { "title": "" }` request'i 400 yerine 201 döner ve boş başlıklı bug kaydedilir. **Neden sinsi:** Kod derlenir, uygulama başlar, `@Valid` orada durur — hiçbir hata yok. Sadece çalışma zamanında "doğrulama hiç tetiklenmiyor" fark edilir, o da ancak biri boş title göndermeyi denerse. **Tester nerede yakalar:** Kurulum sonrası ilk negatif testte — boş `title` gönderip 400 beklerken 201 alınca. Bu, "dependency eksikliğinin sessiz davranış değişikliğine" yol açtığının kanıtıdır.

🎬 Tek Starter, Koca Bir Web Sunucusu: Boot Nasıl Ayağa Kalkar?

`pom.xml`'e tek bir satır ekliyorsun: spring-boot-starter-web. Bu tek karar arkasında neleri getiriyor?