Başlangıç checkpoint'i
MiniBankApplicationuygulamayı ayağa kaldırır./Lab Dashboard olarak servis edilir./api/statustemel JSON status response döner.- JDK 17+, Maven Wrapper ve Spring Boot startup doğrulanmıştır.
Bu ekran MiniBank'in eğitim boyunca nasıl büyüdüğünü gösterir. Her case bir ürün adımıdır: önce ilgili Spring Boot kavramı öğrenilir, sonra MiniBank'e küçük ama gerçek bir özellik eklenir.
Kartlardan case özetine geçebilir, branch bilgisinden katılımcının hangi checkpoint'i çekeceğini görebilir ve her adımda request/response, console log, test ve Actuator çıktılarıyla doğrulama yapabilirsin.
Her kart bir eğitim modülünün MiniBank'e bıraktığı ürün çıktısını gösterir. Kartı açarak o case'in amacı, branch geçişi, beklenen loglar ve test edilecek endpoint'lere gidebilirsin.
Uygulama iskeleti, health/status endpoint'i ve lab dashboard başlangıcı.
lab-00-base C01Internal MechanicsBean discovery, constructor injection ve core service layer temeli.
lab-01-start → lab-01-complete C02IoC & Bean ModelPrototype generator ve ObjectProvider ile scope davranışı.
lab-02-start → lab-02-complete C03Spring AOP@Auditable annotation ve merkezi audit logging davranışı.
lab-03-start → lab-03-complete C04MVC InternalsCurrentUser ve request metadata için custom argument resolver.
lab-04-start → lab-04-complete C05REST API ProperlyDTO, validation ve doğru HTTP status code standardı.
lab-05-start → lab-05-complete C06Exception HandlingGlobalExceptionHandler ve standard error contract tasarımı.
lab-06-start → lab-06-complete C07Config & ProfilesProfile bazlı config, typed properties ve limit servisleri.
lab-07-start → lab-07-complete C08Spring SecurityStateless JWT, role-based access ve method-level security.
lab-08-start → lab-08-complete C09Data & TransactionsJPA, N+1 optimizasyonu ve transaction propagation farkındalığı.
lab-09-start → lab-09-complete C10External API CallsWebClient, timeout, retry, error mapping ve external boundary.
lab-10-start → lab-10-complete C11ObservabilityActuator, custom health indicator, runtime log level ve correlation ID.
lab-11-start → lab-11-completeMiniBankApplication uygulamayı ayağa kaldırır./ Lab Dashboard olarak servis edilir./api/status temel JSON status response döner.Tomcat started on port 8080 görülür../mvnw test ApplicationContext ve status endpoint'i doğrular.curl http://localhost:8080/api/status MiniBank status response döner.AccountRepository, AccountService, AccountSummaryService hazır.CustomerRepository, CustomerService, CustomerSummaryService hazır.AccountService bean is ready. görülür.CustomerService bean is ready. görülür.ReferenceNumberGenerator prototype scoped bean olarak hazır.AccountOperationService ve CustomerOperationService singleton service.ObjectProvider ile yeni generator istenir.Bu ekran artık eğitim ilerleyişini birikimli gösterir; Case 02, Case 00 ve Case 01 üzerine eklenmiştir.
spring-boot-starter-aop projeye eklendi.@Auditable annotation ve AuditAspect hazır.@Around advice method giriş/çıkışını merkezi şekilde yakalar.action, operationType ve method görünür.status=SUCCESS ve durationMs görünür.Case 03, AOP davranışını business service içine audit kodu dağıtmadan ekler.
CurrentUser ve RequestMetadata request context modeli hazır.CurrentUserArgumentResolver header bilgisinden kullanıcı context'i üretir.RequestMetadataArgumentResolver X-Correlation-Id bilgisini controller parametresine taşır.WebMvcConfig resolver'ları Spring MVC akışına register eder.GET /api/accounts/me/summary Account summary response döner.GET /api/customers/me/summary Customer summary response döner.customerNo, role ve correlationId görülür.Case 04, Spring MVC request flow'unu somutlaştırır: controller method parametreleri custom argument resolver ile hazırlanır.
AccountCreateRequest ve AccountResponse ile Account API contract netleşir.CustomerCreateRequest ve CustomerResponse ile Customer API aynı standardı izler.@Valid, @NotBlank, @Pattern ve @Size ile request validation çalışır.201 Created, 200 OK, 400 Bad Request ve 404 Not Found davranışını gösterir.Case 05, MiniBank'i sadece çalışan bir Spring uygulaması olmaktan çıkarıp dış sistemlerle konuşabilecek net bir HTTP API contract'ına taşır.
BusinessException ortak business exception tabanı olarak hazır.GlobalExceptionHandler tüm REST hataları için standard response üretir.AccountNotFoundException ve DuplicateAccountException Account API tarafını netleştirir.CustomerNotFoundException ve DuplicateCustomerException Customer API tarafında aynı standardı uygular.404 Not Found ve ACCOUNT_NOT_FOUND / CUSTOMER_NOT_FOUND code'u döner.409 Conflict ve anlamlı business error code döner.VALIDATION_ERROR ve fieldErrors listesi görülür.Case 06, REST API'nin sadece başarılı response'larını değil, hata response'larını da ürün contract'ının parçası haline getirir.
application.yml, application-dev.yml ve application-prod.yml hazır.TransferProperties, FraudProperties ve CustomerProperties typed config olarak bağlanır.TransferLimitService, FraudControlService ve CustomerLimitService config değerlerini constructor injection ile kullanır./api/config/limits endpoint'i aktif profile ve limit değerlerini gösterir.dev profile eğitim sırasında daha rahat limitler gösterir.prod profile environment variable ile override edilmeye hazırdır.@Value yerine @ConfigurationProperties kullanılır.Case 07, MiniBank davranışını kod değişmeden ortamdan ortama yönetilebilir hale getirir.
spring-boot-starter-security projeye eklendi.SecurityFilterChain stateless API güvenliği için yapılandırıldı./api/auth/login demo kullanıcılar için bearer token üretir.JwtAuthenticationFilter token doğrular ve SecurityContext hazırlar.PasswordEncoder olarak BCryptPasswordEncoder kullanılır.401 Unauthorized döner.USER token account ve customer endpoint'lerine erişebilir.USER token admin customer endpoint'ine erişemez ve 403 Forbidden alır.ADMIN token /api/admin/customers endpoint'ini çağırabilir.CustomerAdminService method-level security ile @PreAuthorize kullanır.Case 08, MiniBank API'yi public demo endpoint'lerden authenticated/authorized endpoint modeline taşır.
spring-boot-starter-data-jpa ve H2 in-memory database eklendi.JpaCustomerEntity, JpaAccountEntity ve JpaAccountHistoryEntity ilişkileri hazır.@EntityGraph ve fetch join senaryolarını gösterir.CustomerAccountReportService müşteri hesap raporunu optimize edilmiş query ile üretir.TransferAuditService audit kaydını REQUIRES_NEW transaction içinde saklar.TransferSimulationService ana transaction rollback olsa bile audit kaydının kaldığını gösterir./api/data/accounts/history-optimized ve customer report endpoint'leri bearer token ile çağrılır.Case 09, MiniBank'i in-memory service modelinden gerçek persistence, query tasarımı ve transaction boundary farkındalığına taşır.
spring-boot-starter-webflux ile WebClient tabanlı external API client eklendi.FraudCheckClient, transfer öncesi fraud kontrolünü ayrı boundary olarak çağırır.ExternalClientConfig, base URL, API key, connect timeout ve response timeout değerlerini config üzerinden alır.TransferExecutionService transaction boundary'yi net bir servis method'unda tutar.CustomerRiskClient, customer operation tarafında katılımcı görevinin karşılığını gösterir.Case 10, MiniBank'in kendi process'inin dışına çıktığı ilk noktadır: timeout, retry, idempotency, error mapping ve transaction sınırı birlikte gözlemlenir.
Doğrulama: Actuator + logs + tests
Actuator endpoint exposure health, info, metrics ve loggers için yapılandırıldı.MiniBankExternalHealthIndicator external client config durumunu health response'a ekler.CustomerHealthIndicator customer repository readiness bilgisini gösterir.CorrelationIdFilter her request için X-Correlation-Id header'ını response'a taşır.correlationId eklenerek request takibi kolaylaştırılır./actuator/health/liveness process'in canlılık durumunu gösterir./actuator/health/readiness uygulamanın trafik almaya hazır olup olmadığını gösterir./actuator/loggers/com.definex.minibank runtime log level yönetimini gösterir.Case 11 final checkpoint'tir; artık MiniBank sadece işlev üretmez, production'da anlaşılabilir sinyaller de üretir.