#2 Spring Nedir ? Spring Boot ve Spring Framework Neden Kullanılır?

Ubeyde Akgül
Huawei Developers - Türkiye

--

Serinin birinci yazısında, genel olarak Spring nedir , Spring’in avantajları nelerdir, neden Spring kullanılır gibi başlıklara değinmiştim.

Bu yazıda ; SpringProjects ile sağlanan Spring Frameworkmodullerinin popüler olanlarından ve içerdiklerinden bahsedicem.

Spring Boot, Spring Framework, Spring Data, Spring Cloud, Spring Cloud Data Flow, Spring Security, Spring Session, Spring Integration, Spring HATEOAS, Spring REST Docs, Spring Batch, Spring AMQP

Spring Projects — Spring Features

Yapılandırmadan güvenliğe, web uygulamalarından büyük verilere kadar uygulamanızın altyapı gereksinimleri ne olursa olsun, istediğinizi oluşturmanıza yardımcı olacak bir Spring projesi illaki var. Spring’in sağladığı tüm altyapı ve projelere SpringPojects üzerinden ulaşabilirsiniz.

Spring Initializr (start.spring.io) ile saniyeler içinde istediğiniz atlayıya sahip yeni ve hazır bir Spring projesine başlayabilirsiniz.

Spring Boot Features

Spring Boot : 😎

Direk çalıştırabileceğiniz bağımsız, production-grade Spring tabanlı Uygulamalar oluşturmayı kolaylaştırır ve sizi mümkün olan en kısa sürede hazır hale getirir. Çoğu Spring Boot uygulaması minimum Spring yapılandırmasına ihtiyaç duyar. Katmanlı mimaride(Multitier architecture) ortaya çıkan bir takım servis ve ihtiyaçları hazır bir biçimde geliştiriciye sunar.

  • stand-alone Spring uygulamaları.
  • Embed Tomcat, Jetty veya Undertow sunucular.
  • Build configuration basitleştirmek için kararlı ‘starter’ bağımlılıkları
  • Spring ve 3rd party kütüphaneleri mümkün olduğunda otomatik olarak yapılandırma
  • Metrikler, durum kontrolleri ve harici yapılandırma gibi üretime hazır özellikler
  • XML yapılandırması gerekmez

Katmanlı mimari kısaca şunlardan oluşur :

  • Data Access Layer(Veri Erişim Katmanı)
  • Bussines Logic Layer(İş Katmanı)
  • Presetation Layer(Sunum Katmanı)
  • Service Layer(Servis Katmanı)

Spring Framework : 🤩

Spring Framework, her tür dağıtım platformuna uygun modern Java tabanlı kurumsal uygulamalar için kapsamlı bir programlama ve yapılandırma modeli sağlıyor.

Spring’in temelde uygulama düzeyinde altyapı desteği sağladığı için geliştiriciler, belirli ortamlara bağlı olmadan application-level business logic kısmına odaklanabilir.

  • Core Teknolojiler : dependency injection, events, resources, i18n, validation, data binding, type conversion, SpEL, AOP.
  • Testing: unitTesting, IntegrationTesting, mock objects, TestContext framework, Spring MVC Test, WebTestClient.
  • Data Access: transactions, DAO support, JDBC, ORM, Marshalling XML.
  • Spring MVC and Spring WebFlux web frameworks.
  • Integration: remoting, JMS, JCA, JMX, email, tasks, scheduling, cache.
  • Languages: Kotlin, Groovy, dynamic languages.

Minimum gereksinimler, support politikası ve version bilgileri için : official Spring Framework wiki page

Spring Data; 🌟

Veri erişim teknolojilerini ( relational, non-relational, map-reduce frameworks, and cloud-based data services ) kullanmayı kolaylaştırarak veri erişimine tutarlı bir yaklaşım sağlar. Belirli bir veritabanına özgü birçok alt projeyi içeren bir şemsiye projedir. Alt projeler, birçok şirket ve geliştirici ile birlikte çalışılarak geliştirilmiştir.

  • Güçlü repository ve custom object-mapping abstractions
  • Repository method adlarından dinamik sorgu türetme
  • Temel özellikleri sağlayan domainBase sınıfların implementasyonu.
  • Custom repositoru kodu entegre etme imkanı.
  • JavaConfig ve özel XML namespace le rile kolay Spring entegrasyonu
  • Spring MVC controller ile gelişmiş entegrasyon

Spring Data ana modülleri : Commons , JDBC , JPA , KeyValue , LDAP , MongoDB , Redis , REST , Apache Cassandra

Spring Data community modülleri : Aerospike , ArangoDB , Couchbase , Azure Cosmos DB , Cloud Datastore , Cloud Spanner , DynamoDB , Elasticsearch , Hazelcast , Jest , Neo4j , Apache Solr

Spring Cloud : 🎉

Dağıtılmış sistemlerde ortak modeller için bir dizi araç sağlar. Mikro hizmetler oluşturmak ve hızlıca dağıtmak için çok kullanışlıdır.

configuration management, service discovery, service-to-service calls, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state.

Spring Cloud ana modülleri :

Config , Netflix , Bus , Cloudfoundry , Open Service Broker , Cluster , Consul , Security , Sleuth , Data Flow , Stream , Task , Zookeeper , Connectors , CLI , Contract , Gateway , OpenFeign , Pipelines , Function

Spring Cloud Data Flow :

Cloud Foundry ve Kubernetes için mikroservis tabanlı Streaming and Batch data işleme süreçleri için karmaşık topolojiler oluşturmak için araçlar sağlar..

Modern çalışma zamanlarında bir araya getirilebilir veri mikro hizmet uygulamaları için düzenleme hizmeti sağlar. ETL’den içe/dışa aktarma, event streaming ve predictive analytics gib birçok veri işleme kullanım durumunu destekler.

Spring Security : 🥷🏻👌🏻

Güçlü ve son derece özelleştirilebilir bir kimlik doğrulama ve erişim denetimi çerçevesidir. Uygulamanızı kapsamlı ve genişletilebilir kimlik doğrulama ve yetkilendirme desteği ile korur.

  • Hem authentication (Kimlik Doğrulama) hem de authorization (Yetkilendirme) için kapsamlı ve genişletilebilir destek
  • Session fixation (Oturum sabitleme), clickjacking (tıklama hırsızlığı), Cross-site request forgery (CSRF-siteler arası istek sahteciliği) vb. saldırılara karşı koruma
  • Servlet API entegrasyonu
  • Spring Web MVC ile opsiyonel entegrasyon
springboot_session

Spring Session : 👏🏻

Bir kullanıcının oturum bilgilerini yönetmek için bir API ve implementasyonlar sağlar. Spring Session ; bir uygulama konteynerine özel bir çözüme bağlı kalmadan clustered sessions desteklemeyi önemsiz hale getirir.

Ayrıca aşağıdaki başlıklarda şeffaf bir entegrasyon sağlar:

  • HttpSession — RESTful API’lerle çalışmak için başlıklarda oturum kimlikleri sağlama desteği ile HttpSession’ı bir application container’ında (ör: Tomcat) nötr bir şekilde değiştirmeye izin verir.
  • WebSocket — WebSocket mesajlarını alırken HttpSession’ı canlı tutma yeteneği sağlar
  • WebSession — Spring WebFlux’un WebSession’unu application container’ı tarafsız bir şekilde değiştirmeye izin verir.

Şu modullerden oluşuyor :

  • Session Core : Temel Spring Session işlevlerini ve API’leri sağlar
  • Session Data Redis : Redis ve konfigürasyon desteği ile SessionRepository ve ReactiveSessionRepository implementasyonunu sağlar.
  • Session JDBC : İlişkisel bir veritabanı ve konfigürasyon desteği ile desteklenen SessionRepository implementasyonunu sağlar
  • Session Hazelcast : Hazelcast ve konfigürasyon desteği ile SessionRepository implementasyonunu sağlar

Spring Integration :

Lightweight messaging ve declarative adapters aracılığıyla tanınmış ve meşhur kurumsal entegrasyon modellerini destekleyerek harici sistemlerle entegrasyonu sağlar.

Spring Framework, geliştirme yaparken interfaces kullanarak geliştiricilerin ihtiyaç duyduğu bağımlılıkları ( POJO (Plain Old Java Object) ) sağlamak için dependency injection (DI) kullanmaya teşvik eder. Spring Integration bu kavramı biraz daha ileriye taşır ve daha rahat geliştirme yapmamızı sağlar.

Channel (Point-to-point and Publish/Subscribe), Transformer, Control Bus, Aggregator, Endpoint, Filter, JMS, WebServices (SOAP and REST), REST/HTTP, FTP/SFTP, TCP/UDP …

Spring HATEOAS :

Spring ve özellikle Spring MVC ile çalışırken HATEOAS prensiplerini izleyen REST temsillerinin oluşturulmasını kolaylaştırmak için bazı API’ler sağlar.

Hypermedia As The Engine Of Application State : Projede kullanılan api’lerin daha rahat oluşturulmasını, Rest işlemlerinin nasıl kullanılacağı bilgisini ve dökümante edilmesini sağlayan REST API mimarisinin temel özelliklerinden biridir

  • Bağlantı, kaynak temsil modelleri için Model sınıfları
  • MVC controller metodlarına bağlantılar oluşturmak için link oluşturucu API’si
  • HAL gibi hypermedia formatları için destek ve konfigurasyon desteği.
https://www.baeldung.com/spring-rest-docs

Spring REST Docs :👍🏻

RESTful sercislerini belgelemenize yardımcı olur. Asciidoctor ve/veya elle yazılmış dokümantasyonu ve Spring MVC Test ile otomatik oluşturularak üretilen parçaları birleştirir. Doğru, özlü ve iyi yapılandırılmış dokümanlar üretmenize yardımcı olur.

Swagger gibi araçlar tarafından üretilen belgelerin sınırlamalarından kurtardığı söyleniyor.

Spring Batch Architecture

Spring Batch :

High-volume batch operations ( yüksek hacimli toplu işlemleri ) işleme prosesini basitleştirir ve optimize eder.

Spring Batch sahip olduğu optimizasyon ve bölümleme teknikleriyle bize, logging/tracing, transaction management, job processing statistics, job restart, skip, resource management gibi büyük hacimli kayıtların işlenmesinde gerekli olan yeniden kullanılabilir fonksiyonları sağlar.

  • Transaction management
  • Chunk based processing
  • Declarative I/O
  • Start/Stop/Restart
  • Retry/Skip
  • Web based administration interface (Spring Cloud Data Flow)
Topic Exchange in AMQP — RabbitMQ

Spring AMQP ve RabbitMQ : 🤝

Temel Spring kavramlarını AMQP (Advanced Message Queuing Protocol) tabanlı mesajlaşma çözümlerinin geliştirilmesine uygulayan bir protokoldür. Mesaj göndermek ve almak için üst düzey bir soyutlama olarak bir “template” sağlar.

Temel soyutlama tarafı olan Spring-amqp ve uygulama tarafı olan RabbitMQ olarak iki bölümden oluşur.

  • Gelen mesajların asynchron olarak işlenmesi için Listener container
  • Mesaj göndermek ve almak için RabbitTemplate
  • Otomatik olarak queues, exchanges ve binding bilglendirmeleri için RabbitAdmin.

RabbitMQ için kısaca Mesaj Kuyruğu(herhangi bir process) sistemi diyebiliriz. Sürekli işlem trafiği olan bankalardaki EFT vb. işlemlerinin, yoğun request alan e-ticaret sistemlerinin olmazsa olmazı haline gelmiş durumda. Benzerleri : Apache Kafka, MSMQ, Microsoft Azure Service Bus, ActiveMQ

Bu yazımda; SpringProjects ile sağlanan Spring Framework modullerinin popüler olanları hakkında bilgiler aktarmaya çalıştım.

Serinin üçüncü yazısında, SpringProjects ile sağlanan diğer Spring Framework modullerinden ve içerdiklerinden bahsedicem.

--

--