Spring Boot Kursu

Spring Boot'u adım adım öğren: Spring Core, Spring MVC, Spring Data JPA, mikroservisler ve ileri konular; gerçek kod örnekleri ve quizlerle.

5 kategoride 39 ders

Spring Core

Dependency Injection ve IoC

Spring'e değinmeden, saf Java ile Inversion of Control, Dependency Injection ve constructor/setter/field injection.

Orta 45 dk
İncele →

Spring IoC Container ve Bean Yaşam Döngüsü

BeanFactory/ApplicationContext, bean lifecycle, @PostConstruct/@PreDestroy, bean scope'ları, @Lazy ve circular dependency çözümü.

İleri 55 dk
İncele →

Component Scanning ve Configuration

@Component/@Service/@Repository/@Controller stereotype'ları, @ComponentScan, @Autowired (field/setter/constructor), @Qualifier ve @Primary.

Orta 45 dk
İncele →

Spring Boot Auto-Configuration ve Properties

@SpringBootApplication, @Conditional ailesi (@ConditionalOnClass/@ConditionalOnMissingBean/@ConditionalOnProperty), @Value, @ConfigurationProperties, @Profile ve ApplicationEvent/@EventListener.

İleri 55 dk
İncele →

Transaction Management

@Transactional'ın proxy tabanlı mekanizması, rollback kuralları, propagation (REQUIRED/REQUIRES_NEW), self-invocation tuzağı, isolation levels, readOnly, TransactionTemplate ve @TransactionalEventListener.

İleri 55 dk
İncele →

Spring MVC

Spring MVC Temelleri

DispatcherServlet, MVC deseni (Model/View/Controller) ve @Controller ile @RestController arasındaki fark.

Orta 35 dk
İncele →

Mapping Annotation'ları ve HTTP Metotları

@RequestMapping ve beş kısayolu (@GetMapping/@PostMapping/@PutMapping/@PatchMapping/@DeleteMapping), consumes/produces ve HTTP metotlarının safe/idempotent semantiği.

Orta 35 dk
İncele →

Path Variable'lar ve Request Parametreleri

@PathVariable, @RequestParam ve @RequestHeader ile bir HTTP isteğinin URL'sinden ve header'larından veri okumak; path variable ile query parametresi arasındaki fark.

Orta 40 dk
İncele →

Request ve Response Handling

@RequestBody ile istek gövdesini nesneye çevirmek, ResponseEntity ile yanıtı tam kontrol etmek, HTTP durum kodları ve content negotiation.

Orta 45 dk
İncele →

Validation & Exception Handling

Bean Validation (@NotBlank, @Size, @Email, @Pattern) ile @Valid, iç içe nesnelerde cascading, @ExceptionHandler, @RestControllerAdvice ve RFC 7807 ProblemDetail ile standart hata yönetimi.

Orta 45 dk
İncele →

Spring MVC Views ve Thymeleaf

Model, ModelMap ve ModelAndView ile view'a veri taşımanın üç yolu; Thymeleaf'in "natural templating" felsefesi; Thymeleaf değişken/link/mesaj ifadeleri (@{...}, #{...} ve dolar-süslü-parantez erişimi); th:if, th:each, th:fragment; SpringEL seçim ifadeleri (.?[...] / #vars); ve projenin kendi layout'una referansla MVC vs REST karşılaştırması.

Orta 40 dk
İncele →

Advanced Spring MVC

HandlerInterceptor (preHandle/postHandle/afterCompletion) ve Filter vs Interceptor ayrımı; WebMvcConfigurer ile interceptor kaydı ve global CORS yapılandırması; same-origin policy, preflight request ve @CrossOrigin; MultipartFile ile dosya yükleme ve boyut sınırları.

İleri 45 dk
İncele →

REST API Tasarımı

Entity'yi doğrudan dışarı vermenin riskleri ve DTO deseni; Pageable/Page/Sort ile sayfalama, sıralama ve query parametreleriyle filtreleme; URI versioning vs header versioning; idempotency ve Idempotency-Key header'ı ile POST'u idempotent yapmak; HATEOAS (kısa bakış).

İleri 42 dk
İncele →

Spring MVC'de Test Yazmak

MockMvc ve @WebMvcTest ile web katmanı testleri; @MockitoBean ile bağımlılıkları sahteleme; model(), view() ve jsonPath() ile doğrulama; request body, path variable/query param, validation hataları ve multipart dosya yükleme testleri; bu projenin gerçek HomeController'ı ve TopicController'ı için gerçek testler.

İleri 45 dk
İncele →

Mikroservisler

Microservices Temelleri

Monolitik mimarinin sınırları, mikroservis mimarisinin temel özellikleri, servis sınırlarını (bounded context) belirlemek, database per service, CAP teoremi ve Conway Yasası'na kısa bir bakış -- hiç kod yazmadan, kavramsal bir giriş.

Orta 20 dk
İncele →

Mikroservis Yapılandırma

Tek bir Spring Boot mikroservisini (order-service) baştan sona yapılandırmak: kendi giriş noktası, kendi application.yml'i (port, uygulama adı, veritabanı), REST controller ile API sözleşmesi, service katmanı, domain modeli ve health check.

Orta 18 dk
İncele →

Servisler Arası İletişim

order-service'in yanına ikinci bir mikroservis (inventory-service) eklemek ve ikisini Spring'in RestClient'ıyla senkron bir REST çağrısıyla konuşturmak: stok kontrolü, hata yönetimi (servis ayakta değilse ne olur), ve servisler arası DTO ayrımı. Kategorinin gerçek, çalıştırılabilir Pratik Proje'sine buradan ulaşılıyor.

Orta 22 dk
İncele →

Servis Keşfi ve Eureka

order-service'in inventory-service'i artık sabit kodlanmış bir URL yerine bir İSİMLE bulması: Eureka Server (merkezi kayıt defteri), Eureka Client (spring.application.name'in keşif anahtarına dönüşmesi), DiscoveryClient ile doğrudan sorgu, @LoadBalanced RestClient ile isimle çağrı yapma, heartbeat/eviction/self-preservation modu, ve Eureka'nın CAP teoreminin AP tarafını seçmesi.

Orta 24 dk
İncele →

API Gateway

order-service ve inventory-service'in artık dış istemciler için tek bir giriş noktası üzerinden erişilebilir olması: Spring Cloud Gateway ile ayrı bir api-gateway uygulaması kurmak, rota (route) predicate/URI/filtre üçlüsü, lb:// ile Eureka üzerinden keşif tabanlı yönlendirme, özel bir GlobalFilter yazmak (kursun ilk reaktif kodu), ve correlation id gibi sistem geneli konuların neden gateway'de kalıp iş mantığının serviste kalması gerektiği.

Orta 24 dk
İncele →

Resilience4j

order-service'in inventory-service çağrılarını manuel try/catch hata yönetiminin ötesine taşıması: Resilience4j ile @CircuitBreaker (CLOSED/OPEN/HALF_OPEN durum makinesi) ve @Retry annotation'larını ResilientStockClient'a uygulamak, fallback metotlarının devre açıldığında ne yaptığı, Spring proxy mekanizmasının self-invocation'da neden çalışmadığı, ve rate limiter/bulkhead'in circuit breaker'dan farklı bir riske karşı koruması.

Orta 24 dk
İncele →

Configuration Management

Her servisin şimdiye kadar kendi application.yml'inde tuttuğu yapılandırmayı Spring Cloud Config ile merkezileştirmek: @EnableConfigServer ile ayrı bir config-server uygulaması kurmak, bir Config Repository'nin neyi merkezileştirmeye değdiğine karar vermesi, spring.config.import ile Config Client olmak, profillerle ortam bazlı override, @RefreshScope ile yeniden başlatmadan yapılandırma yenileme, ve sırların neden düz metin olarak saklanmaması gerektiği.

Orta 24 dk
İncele →

Event-Driven Architecture ve Kafka

Bu kategorideki her servisler arası çağrının şimdiye kadar senkron olmasının yarattığı zaman ve doğrudan-bilgi bağlantısını Kafka ile kaldırmak: topic/partition kavramları, order-service'in KafkaTemplate ile OrderPlacedEvent yayınlaması, inventory-service'in @KafkaListener ile tepki vermesi, senkron vs asenkron arasında ne zaman hangisinin seçileceği, en az bir kez teslimat garantisinin her tüketiciyi idempotent yapmayı gerektirmesi, ve JSON serialization tercihi.

Orta 26 dk
İncele →

Distributed Transactions

Event-Driven Architecture ve Kafka dersinin açık bıraktığı boşluğu kapatmak -- inventory-service stok rezerve edemezse order-service'in zaten commit ettiği siparişe ne olur: Two-Phase Commit'in mikroservislerde neden nadir olduğu, Saga deseni (yerel işlemler + kompansasyon eylemleri), choreography ile StockReservationFailedEvent üzerinden iki yönlü bir saga akışı kurmak, kompansasyonun bir rollback olmadığı, ve Outbox deseninin bir olayın hiç yayınlanmama riskini kapatması.

Orta 26 dk
İncele →

Observability

API Gateway ve Resilience4j derslerinin kasıtlı olarak açık bıraktığı iki ipliği kapatmak: correlation id'yi order-service'in kendi loglarına (MDC) ve inventory-service'e giden çağrılara GERÇEKTEN yaymak, structured (JSON) loglama, Micrometer/Actuator ile metrikler, distributed tracing'in aynı correlation id kavramı üzerine inşa edilmesi, ve Resilience4j'nin Micrometer'la zaten otomatik entegre olması.

Orta 26 dk
İncele →

Security

Bu kategorideki her dersin şimdiye kadar varsaydığı koşulsuz güveni kapatmak: Spring Security'yi projeye ilk kez tanıtmak, authentication vs authorization ayrımı, JWT'nin kendi kendine yeterli doğası, api-gateway ve order-service'te AYRI AYRI JWT doğrulaması (zero trust), role-bazlı authorization, ve kimliğin correlation id'ye paralel şekilde servisler arası yayılması.

Orta 26 dk
İncele →

Deployment

Bu kategorinin şimdiye kadar her dersinin localhost varsayımının gerçek dünyada nasıl deploy edildiği: multi-stage Dockerfile ile küçük image'lar, tüm sistemi (eureka-server, config-server, api-gateway, order-service, inventory-service, Kafka) tek bir docker-compose dosyasında orkestre etmek, container'larda ortam değişkeni ile yapılandırma, depends_on'un health check olmadan neden yetmediği, ve Kubernetes'e kısa/dürüst bir bakış.

Orta 26 dk
İncele →

İleri Spring

Java Bean Validation

Spring MVC'nin "Validation & Exception Handling" dersinin üzerine inşa edilir -- işaret kısıtları (@Positive/@PositiveOrZero/@Negative/@NegativeOrZero), tarih/saat kısıtları (@Past/@Future/@PastOrPresent/@FutureOrPresent), tam ondalık sınırlar (@DecimalMin/@DecimalMax/@Digits), validation mesajlarını özelleştirmek, custom constraint annotation + ConstraintValidator ile çapraz alan validasyonu, ve validation grupları. Advanced Spring serisinin 1.'si.

İleri 35 dk
İncele →

Exception Handling

Spring MVC'nin "Validation & Exception Handling" ve bu kategorinin "Java Bean Validation" derslerinin üzerine inşa edilir -- MethodArgumentNotValidException'ın gerçekte ne taşıdığı, validasyon hatalarını ProblemDetail'e dönüştürmek (çapraz-alan hatalar dahil), custom ProblemDetail özellikleri, domain exception'ları doğru HTTP durum koduna (400/404/409/422/500) eşlemek, ResponseEntityExceptionHandler ile merkezileştirme, ve internal detay sızdırmayan güvenli hata yanıtları. Advanced Spring serisinin 2. ve son dersi.

İleri 35 dk
İncele →

Task Execution & Scheduling

"Threads"in dil seviyesinde işlediği thread pool temelinin üzerine inşa edilir -- Spring'in TaskExecutor soyutlaması, @Async ve @EnableAsync ile arka plan işi, self-invocation'ın @Async'i neden bozduğu ("Transaction Management"taki AYNI proxy tuzağı), @Scheduled ile fixed rate/fixed delay/initial delay/cron ifadeleri, ve scheduling'in kendi ayrı thread pool'unun (TaskScheduler) yapılandırılması. Advanced Spring serisinin 3.'sü.

İleri 35 dk
İncele →

Spring Batch

Neden büyük ölçekli batch işlemlerinin `@Scheduled`'ın tek başına sağlayamadığı bir yapıya ihtiyacı olduğu -- Job/Step/chunk-odaklı işleme zihinsel modeli, tek bir CSV-'den-veritabanına sipariş içe aktarma örneği boyunca ItemReader/ItemProcessor/ItemWriter, JobParameters/JobInstance/JobExecution ayrımı, JobRepository ile yeniden başlatılabilirlik, skip/retry fault tolerance, ve `@Scheduled` ile pratik birleşim. Advanced Spring serisinin 4.'sü.

İleri 50 dk
İncele →

Spring Data JPA

JPA, Hibernate ve Spring Data JPA

Bir Java nesnesini bir veritabanına kalıcı hale getirme sorunundan başlayarak, ORM → JPA (spesifikasyon) → Hibernate (implementasyon) → Spring Data JPA (repository soyutlaması) → Spring Boot (auto-configuration) zihinsel modeli, bu projenin gerçek Topic/TopicRepository sınıflarıyla inşa ediliyor. Spring Data JPA kategorisinin 1.'si.

Orta 25 dk
İncele →

Entities and the Repository Abstraction

@Entity/@Id/@GeneratedValue/@Column mapping'i, @Table/@Enumerated/nullable-unique kısıtları/argümansız constructor/entity vs DTO/equals()-hashCode() (kısaca), ve Repository → CrudRepository → PagingAndSortingRepository → JpaRepository hiyerarşisinin her katmanının ne kattığı -- bu projenin gerçek Topic/Category/TopicRepository sınıflarıyla. Spring Data JPA kategorisinin 2.'si.

Orta 30 dk
İncele →

Query Methods and JPQL with @Query

Spring Data JPA'nın bir repository metodunun adından bir sorguyu nasıl çıkardığı (findBy/existsBy/countBy, And/Or/OrderBy), @Query ile JPQL yazmak ve isimli parametreler, toplu güncelleme/silme için @Modifying, join fetch, ve ne zaman bir native query'ye başvurulacağı -- bu projenin gerçek repository'leriyle. Spring Data JPA kategorisinin 3.'sü.

Orta 30 dk
İncele →

Pagination, Sorting, and Projections

"REST API Tasarımı"nın controller-seviyesinde çözdüğü Pageable/Sort'un, repository seviyesinde gerçekte nasıl LIMIT/OFFSET + count sorgusuna dönüştüğü, findAll(Sort)/derived metotlarla sıralama, ve bütün bir entity yerine yalnızca ihtiyaç duyulan alanları döndüren interface-tabanlı ve record/constructor-expression projection'lar -- bu projenin gerçek Topic/TopicTranslation sınıflarıyla. Spring Data JPA kategorisinin 4.'sü.

Orta 30 dk
İncele →

Dynamic Queries with Specifications

"REST API Tasarımı"nın bellek içinde bıraktığı isteğe bağlı filtrelemeyi, JPA'nın Criteria API'si (Root/CriteriaQuery/CriteriaBuilder/Predicate) üzerine ince bir sarmalayıcı olan Specification interface'i, JpaSpecificationExecutor, Specification.where/and/or ile birleştirme, ve findAll(Specification, Pageable) ile gerçek sayfalamayla birleştirme -- bu projenin gerçek Topic entity'siyle. Spring Data JPA kategorisinin 5.'si.

İleri 35 dk
İncele →

Relationships, Fetching, and the N+1 Problem

@OneToMany/@ManyToMany mapping ("Transaction Management"in zaten kapsamlıca işlediği @ManyToOne'un ötesinde), cascade türleri (PERSIST/MERGE/REMOVE/ALL) ve orphanRemoval, N+1 probleminin somut gösterimi, ve @EntityGraph/batch fetching/projection'larla üç farklı düzeltme -- bu projenin gerçek Topic/Category/QuizQuestion sınıflarıyla. Spring Data JPA kategorisinin 6.'sı.

İleri 40 dk
İncele →

The Persistence Context and Locking

"Transaction Management"in zaten kapsamlıca işlediği dirty checking'in NEDEN çalıştığı -- persistence context'in kendisi, entity yaşam döngüsü durumları (transient/managed/detached/removed), first-level cache, persist/merge/detach, flush zamanlaması -- ve iki transaction aynı satıra dokunduğunda ne olduğu: @Version ile optimistic locking, @Lock ile pessimistic locking. Spring Data JPA kategorisinin 7.'si.

İleri 35 dk
İncele →

Auditing in Spring Data JPA

Bu projenin gerçek QuestionIngestService'inin elle yazdığı LocalDateTime.now() deseninden başlayarak, @CreatedDate/@LastModifiedDate, @EntityListeners(AuditingEntityListener.class) + @EnableJpaAuditing bağlantısı, @CreatedBy/@LastModifiedBy, AuditorAware<T>, ve @MappedSuperclass ile audit alanlarını paylaşmak. Spring Data JPA kategorisinin 8.'si.

Orta 25 dk
İncele →

Testing Spring Data JPA Repositories

"Spring MVC'de Test Yazmak"ın yalnızca isim olarak andığı @DataJpaTest ve TestEntityManager -- bu projenin kendi Mockito-mock'lanmış servis testlerinin bırakmadan geçtiği boşluğu (bir sorgunun gerçekten çalıştığının hiç doğrulanmaması) kapatıyor; derived query/custom @Query testi, ve embedded test veritabanı vs gerçek PostgreSQL vs Testcontainers -- bu projenin kendi application-test.yml'inin gerçek yorumuna dayanarak. Spring Data JPA kategorisinin 9. ve son dersi.

İleri 35 dk
İncele →