Spring Boot & MiniBank'a Giriş
Hoş geldin. Teknik detaya dalmadan önce kısa bir oryantasyon yapalım: bu eğitimde ne inşa edeceğiz, nasıl çalışacağız, ortamı nasıl kuracağız ve elimizdeki MiniBank iskeletini birlikte tanıyalım. Bu modülde kod yazmıyoruz — kuruyoruz ve haritayı çıkarıyoruz.
Mini sözlük: Aynı dili konuşalım
Eğitim boyunca sık geçecek birkaç kelimeyi en baştan netleştirelim. Bu modülde derinleşmiyoruz; sadece kelimelerin ne anlama geldiğini oturtuyoruz.
Spring Boot
Spring uygulamasını hızlı ve standart şekilde ayağa kaldırmamızı sağlayan framework'tür. Tekrar eden altyapı kararlarının çoğunu bizim yerimize verir.
MiniBank
Eğitim boyunca adım adım geliştireceğimiz örnek bankacılık uygulamasıdır. Her modül bu tek ürünün üstüne yeni bir katman ekler.
Lab Dashboard
MiniBank'in localhost:8080'de açılan kontrol panelidir. Her case'in görev listesi, doğrulama komutları ve referans kodu buradadır.
Branch / Checkpoint
Her case'in bir start ve bir complete branch'i vardır. Bir case'in complete'i, bir sonrakinin start'ıdır — böylece herkes aynı noktadan devam eder.
JDK 17
Projeyi derlemek ve çalıştırmak için gereken Java sürümüdür. MiniBank Java 17 ile yazılmıştır.
Maven Wrapper
./mvnw komutu, sistemde Maven kurulu olmasa bile projeyi doğru sürümle derleyip çalıştırır. Ayrı kurulum gerektirmez.
Embedded Server
Spring Boot uygulaması harici bir sunucuya ihtiyaç duymadan kendi içindeki web server (Tomcat) ile ayağa kalkar.
Starter
Bir özellik ailesini tek bağımlılıkla projeye ekleyen pakettir. Örneğin spring-boot-starter-web web katmanının ihtiyaçlarını birlikte getirir.
Bu eğitimde ne yapacağız?
Tek bir ürünü — MiniBank — sıfırdan production'a yakın bir olgunluğa kadar, 3 günde 11 modül boyunca birikimli olarak inşa edeceğiz.
Bu eğitim bağımsız örneklerden oluşmaz. Her modül bir öncekinin bıraktığı yerin üstüne yeni bir yetenek ekler: önce çekirdek servis katmanı, sonra web katmanı, en sonunda güvenlik, veri ve gözlemlenebilirlik. Modül sonunda elinde çalışan, anlamlı bir banka API'si olur — ezberlenmiş parçalar değil.
- 01 · Internal Mechanics
- 02 · IoC & Bean Model
- 03 · Spring AOP
- 04 · MVC Internals
- 05 · REST API Properly
- 06 · Exception Handling
- 07 · Config & Profiles
- 08 · Spring Security
- 09 · Data & Transactions
- 10 · External API Calls
- 11 · Observability
Her case'in complete branch'i bir sonraki case'in start branch'idir. Bu yüzden geride kalsan bile bir sonraki modüle herkesle aynı noktadan girersin.
Spring Boot neden var?
Spring Boot'un temel vaadi sade: "Sen iş mantığına odaklan; uygulamayı ayağa kaldırmak için gereken standart parçaları ben hazırlayayım."
Bir web uygulaması yazmak sadece controller yazmak değildir. HTTP isteğini karşılayacak bir sunucu, isteği doğru metoda yönlendiren bir mekanizma, JSON dönüşümü, hata yönetimi, konfigürasyon okuma ve daha fazlası gerekir. Spring Boot bu tekrar eden parçaları yaygın ve güvenli varsayılanlarla hazırlar. Bu modülde sadece bu çerçeveyi tanıyoruz; nasıl çalıştığını Modül 01'de açacağız.
Convention over Configuration
Mantıklı varsayılanlar sayesinde her şeyi tek tek ayarlamak zorunda kalmazsın; sadece farklı olmasını istediğin yeri değiştirirsin.
Embedded Server
Uygulama kendi içindeki Tomcat ile ayağa kalkar; harici sunucu kurup deploy etme adımı ortadan kalkar.
Starter Bağımlılıkları
Bir özelliğin ihtiyaç duyduğu kütüphaneleri tek tek toplamak yerine tek bir starter ile getirirsin.
Auto configuration, component scan ve bean lifecycle'ın nasıl çalıştığını burada açmıyoruz — o, Modül 01'in (Internal Mechanics) işidir. Şimdilik "Spring Boot bizim için neyi hallediyor" büyük resmini kurmak yeterli.
Nasıl çalışacağız?
Her modülde aynı ritmi izleyeceğiz: önce portalda öğren, sonra dashboard'da case'i aç, branch'i klonla, kendin yaz, test ile doğrula.
git checkout lab-NN-start ile başlangıç noktasına geç../mvnw test yeşil olduğunda case tamamlanmıştır.Bir case'te geride kalırsan ilgili lab-NN-complete branch'ine geçip herkesle aynı checkpoint'ten devam edebilirsin. Kimse arkada kalmaz.
Geliştirme ortamı
Tek ihtiyacın JDK 17 ve projeyi klonlamak. Maven'ı ayrı kurmana gerek yok — proje kendi wrapper'ı (./mvnw) ile gelir.
- JDK 17 kurulu (
java -versionile doğrula). - Repoyu klonla ve proje dizinine gir.
lab-00-basebranch'ine geç (boş MiniBank iskeleti).- Uygulamayı çalıştır ve
localhost:8080'de ayağa kalkışını gör.
java -version # 17 görmelisin
git checkout lab-00-base
./mvnw spring-boot:run # uygulama localhost:8080'de ayağa kalkar
Uygulama ayağa kalktığında tarayıcıdan http://localhost:8080 adresini aç: Lab Dashboard'u göreceksin. http://localhost:8080/api/status ise uygulamanın UP olduğunu söyleyen basit bir JSON döner. Port 8080'dir (varsayılan; base projede henüz özel bir application.yml yoktur).
Araçlar & indirme linkleri
Eğitim için gereken ve işini kolaylaştıran araçlar. JDK 17, IntelliJ IDEA ve Git zorunlu; gerisi opsiyonel.
JDK'yı paket yöneticisiyle de kurabilirsin: brew install temurin@17 (macOS Homebrew) veya SDKMAN ile sdk install java 17-tem.
Base project turu
lab-00-base bilinçli olarak neredeyse boş bir iskelettir: sadece uygulamanın ayağa kalkması ve dashboard'un servis edilmesi için gereken minimum vardır. Domain (hesap, müşteri, transfer…) henüz yoktur — onları modül modül biz ekleyeceğiz.
minibank
├── pom.xml # Spring Boot 3.5.0 · Java 17
├── mvnw / mvnw.cmd # Maven Wrapper
└── src
├── main
│ ├── java/com/definex/minibank
│ │ ├── MiniBankApplication.java # @SpringBootApplication (giriş noktası)
│ │ └── web
│ │ └── HomeController.java # GET /api/status
│ └── resources
│ └── static
│ └── index.html # Lab Dashboard
└── test/java/com/definex/minibank
├── MiniBankApplicationTests.java # context ayağa kalkıyor mu
└── MiniBankHomeControllerTests.java # status + dashboardBaşlangıçta NE VAR?
Uygulama giriş noktası (MiniBankApplication), tek bir HomeController (/api/status), statik Lab Dashboard ve iki temel test. pom.xml'de yalnızca web, validation ve actuator starter'ları.
Henüz NE YOK?
Domain paketleri yok: account, customer, transfer, security, persistence gibi paketler eğitim ilerledikçe ilgili modüllerde eklenecek.
Paket kök kuralı
Tüm kod com.definex.minibank kök paketinin altında durur. MiniBankApplication bu kökte olduğu için, eklediğimiz her alt paket (account, customer …) otomatik olarak görülebilir konumda olur. Bunun neden böyle olduğunu Modül 01'de (component scanning) açacağız.
Base project'i ve ilk çalıştırma adımlarını dashboard üzerinden de takip edebilirsin.
Bu modülden akılda kalması gerekenler
11 modül, 3 gün; her case bir öncekinin üstüne ekler. Sonunda çalışan bir MiniBank API'si.
Portalda öğren → dashboard'da case aç → start branch → kendin yaz → test ile doğrula.
lab-NN-complete ile herkes aynı noktadan devam edebilir; kopyala-yapıştır değil, branch klonlanır.
JDK 17 + ./mvnw spring-boot:run. Base proje localhost:8080'de ayağa kalkar.
Sadece MiniBankApplication + HomeController + dashboard var; domain paketlerini biz ekleyeceğiz.
Ortamın çalışıyor ve haritayı gördüysen, ilk teknik modüle geçebilirsin.