SPRING BOOT NEDİR?

2000'lerin başında Java dünyasında bir uygulamayı ayağa kaldırmak demek, sayfalarca XML dosyasıyla boğuşmak demekti. Spring Framework güçlüydü ama her bean tanımı, her veri kaynağı, her transaction yöneticisi elle yazılan konfigürasyona bağlıydı. Pivotal ekibi 2014'te Spring Boot 1.0'ı yayımladığında ana hedef netti: Java geliştiricisinin saatlerini yiyen kurulum zahmetini ortadan kaldırmak. Spring Boot, "convention over configuration" felsefesini Java ekosistemine taşıyan ve mikroservis çağının zeminini hazırlayan araçtır.
1. XML Hell Dönemi ve Spring'in Doğuşu
2003'te Rod Johnson tarafından geliştirilen Spring Framework, J2EE'nin ağır EJB modeline alternatif olarak çıktı. Dependency Injection ve Inversion of Control prensiplerini Java'ya getirdi. Ancak başarısı, beraberinde bir maliyet getirdi: applicationContext.xml dosyaları yüzlerce satıra ulaştı. Bean tanımları, AOP yapılandırmaları, transaction manager'lar, view resolver'lar — hepsi tek tek elle yazılmak zorundaydı.
Geliştiriciler bu durumu "XML hell" olarak adlandırmaya başladı. Yeni bir proje kurmak günler sürüyor, küçük bir bağımlılık değişikliği XML'lerin baştan gözden geçirilmesini gerektiriyordu. Spring 3.0 ile Java tabanlı konfigürasyon (@Configuration) gelse de problem tam çözülmedi; bu sefer de hangi @Bean'i nereye koyacağını bilmek bir tecrübe meselesiydi. Daha fazla bilgi için ayrıntılı belgeleri başvurulabilir.
2. 2014: Spring Boot 1.0 Çıkışı
Nisan 2014'te Pivotal, Spring Boot 1.0'ı yayımladı. Phil Webb ve Dave Syer'in öncülüğünde geliştirilen proje, üç temel vaatle geldi:
- Sıfır XML konfigürasyonu ile çalışan uygulama
- Embedded sunucu (Tomcat, Jetty, Undertow) — harici application server gerekmez
- Starter bağımlılıkları ile bir satırda tüm ekosistem entegrasyonu
Bu üç madde, Java backend geliştirme tarihinde bir kırılma noktasıydı. Artık main metodu olan bir JAR dosyası, içinde Tomcat ile birlikte production'a deploy edilebiliyordu. java -jar app.jar komutu yeterliydi.
3. Convention Over Configuration Felsefesi
Spring Boot'un kalbinde Ruby on Rails'ten ilham alan bir prensip yatar: makul varsayılanlar belirlersen, geliştirici sadece istisnaları yazar. Eğer classpath'te H2 varsa otomatik bir in-memory veritabanı kurulur. Eğer spring-boot-starter-web bağımlılığı eklenmişse Tomcat 8080'de başlar. Eğer application.properties'te server.port=9090 yazılmışsa o port kullanılır.

Bu yaklaşımın iki temel mekanizması vardır: auto-configuration ve starter dependencies. Auto-configuration, @ConditionalOnClass ve @ConditionalOnMissingBean gibi annotationlar sayesinde classpath'i tarayıp gerekli bean'leri otomatik üretir. Starter'lar ise (örneğin spring-boot-starter-data-jpa) tek bir bağımlılık satırıyla onlarca uyumlu kütüphaneyi getirir; sürüm çakışmalarını Pivotal ekibi sizin yerinize çözer.
4. Spring Boot ile Spring Framework Farkı
Yaygın bir kavram yanılgısı, Spring Boot'un Spring Framework'ün yerine geçtiğidir. Aslında Spring Boot, Spring Framework'ün üstüne kurulu bir katmandır:
- Spring Framework: Çekirdek — DI container, AOP, Spring MVC, Spring Data
- Spring Boot: Spring'i hızlı kullanmak için opinionated bir başlangıç noktası
- Spring Cloud: Spring Boot üzerine mikroservis araçları (Eureka, Config, Gateway)
Yani Spring Boot, Spring'i ortadan kaldırmaz; sadece onu kullanılabilir hale getirir. Geliştirici hâlâ @Service, @Repository, @Autowired annotationlarını aynı şekilde kullanır — sadece kurulum zahmeti yoktur.
5. Mikroservis Çağına Açılan Kapı
2014-2016 yılları, Netflix'in OSS araçlarını açtığı ve mikroservis mimarisinin popülerleştiği dönemdi. Her servisin bağımsız çalışan küçük bir JAR olması gereken bu mimaride, embedded sunuculu Spring Boot uygulamaları doğal bir tercih oldu. Docker konteynerlerine sığacak boyutta, hızlı başlayan, kendi içinde her şeyi taşıyan yapı tam aranan profildi.
Bugün dünyanın en büyük teknoloji şirketlerinin — Netflix, Alibaba, ING Bank, JPMorgan — backend altyapılarının önemli bir kısmı Spring Boot üzerine kuruludur. JVM ekosisteminde Java backend dediğinizde insanların aklına ilk gelen şey artık Spring Boot'tur.
6. Bugünkü Sürümler ve Ekosistem
Spring Boot 3.x sürümleri Java 17+ ve Jakarta EE 9+ üzerine inşa edildi. Native image desteği (GraalVM ile) sayesinde uygulamalar milisaniyelerde başlayabiliyor. Observability için Micrometer entegrasyonu, güvenlik için Spring Security, reactive programlama için WebFlux artık standart parçalar.
Spring Boot'u sıfırdan öğrenmek ve REST API'den JPA'ya kadar uçtan uca proje geliştirmek için Spring Boot eğitimi içeriklerinden yararlanabilirsiniz. Pratik örneklerle ilerleyerek annotation'ların nasıl çalıştığını ve auto-configuration'ın arka planda neler yaptığını görmek, framework'ü gerçekten anlamanın en kısa yolu.

Sonuç olarak Spring Boot, Java'nın 20 yıllık konfigürasyon yorgunluğuna verdiği yanıttır. Bir framework değil, Spring'i kullanılabilir kılan bir konvansiyon katmanıdır. 2014'teki çıkışından bu yana Java backend geliştirme deneyimini kökten değiştirdi ve günümüzde de mikroservis mimarisinin Java tarafındaki fiilî standardı olmaya devam ediyor.
Sıkça Sorulan Sorular
Spring Boot bir framework müdür?
Hayır, Spring Boot bir framework değil; Spring Framework'ün üzerine kurulu bir konvansiyon ve otomatik konfigürasyon katmanıdır. Spring'in tüm çekirdek özelliklerini (DI, AOP, MVC) aynen kullanır, sadece kurulum ve yapılandırma zahmetini ortadan kaldırır. Yani Spring Boot, Spring'in yerine geçen değil, onu kolayca kullanılabilir kılan bir araçtır.
Spring Boot neden 2014'te ortaya çıktı?
2010'ların başında Java uygulamaları sayfalarca XML konfigürasyonu, harici application server kurulumu ve karmaşık bağımlılık yönetimi gerektiriyordu. Pivotal ekibi bu "XML hell" sorununu çözmek için Nisan 2014'te Spring Boot 1.0'ı yayımladı. Hedef, makul varsayılanlarla çalışan, embedded sunuculu, tek JAR ile deploy edilebilen modern bir Java backend deneyimi sunmaktı.
Auto-configuration nasıl çalışır?
Spring Boot başlangıçta classpath'i tarar ve @ConditionalOnClass, @ConditionalOnMissingBean gibi annotationlar yardımıyla hangi bean'lerin otomatik üretileceğine karar verir. Örneğin classpath'te H2 varsa bir DataSource otomatik kurulur, ama siz kendi DataSource'unuzu tanımladıysanız otomatik olan devre dışı kalır. Bu mekanizma spring.factories ve AutoConfiguration sınıfları üzerinden yürür.
Starter bağımlılığı ne demektir?
Starter, belirli bir işlevsellik için gereken tüm uyumlu kütüphaneleri tek bir bağımlılık altında toplayan paketleme yaklaşımıdır. Örneğin spring-boot-starter-data-jpa, JPA için gereken Hibernate, Spring Data JPA, JDBC ve bağlantı havuzu kütüphanelerini birlikte getirir. Sürüm uyumluluğunu Pivotal ekibi yönettiği için geliştirici çakışan kütüphane sürümleriyle uğraşmaz.
Spring Boot uygulamalarında ayrı bir Tomcat kurmaya gerek var mı?
Hayır. Spring Boot, embedded sunucu modeliyle gelir; Tomcat, Jetty veya Undertow uygulamanızın JAR'ı içinde paketlenir. Uygulama java -jar app.jar komutuyla doğrudan çalışır ve dışarıdan bir application server kurulumuna ihtiyaç duymaz. Bu, mikroservis mimarisi ve Docker konteyneri kullanımı için Spring Boot'u doğal bir tercih haline getirmiştir.
Spring Boot 3 ile gelen en önemli değişiklik nedir?
Spring Boot 3, minimum Java 17 ve Jakarta EE 9+ gereksinimi getirir. javax.* paketleri jakarta.* olarak değişti, bu yüzden eski projelerin geçişi büyük bir refaktöre gerek duyar. Bunun yanı sıra GraalVM native image desteği, observability için Micrometer entegrasyonu ve Spring Security'nin yeni configuration DSL'i Spring Boot 3'ün öne çıkan özellikleridir.
Spring Boot mikroservis için zorunlu mudur?
Zorunlu değildir ama Java ekosisteminde fiilî standart olmuştur. Quarkus, Micronaut, Helidon gibi alternatifler de mikroservis için tasarlanmıştır ve özellikle native image performansında öne çıkar. Yine de Spring Cloud'un olgunluğu, kütüphane desteği ve topluluk büyüklüğü göz önüne alındığında Java mikroservis projelerinin büyük çoğunluğu hâlâ Spring Boot üzerine kuruludur.


