Spring - Pendahuluan

Spring Framework merupakan salah satu framework untuk Java yang paling terkenal.

Secara de Facto merupakan framework yang paling banyak digunakan sebagai dasar pembuatan aplikasi berbasis Java.

Dengan konsep “Dependency Injection” sebagai implementasi dari “Inversion of Control”, maka aplikasi yang dibuat dengan Spring bisa dengan mudah dikonfigurasi dan dijalankan secara modular.

Disamping kemudahannnya dalam menginisiasi sebuah proyek aplikasi, didalamnya banyak terdapat library-library yang sudah terintegrasi.

Library untuk aplikasi web, database, aspect oriented programming, marshalling, validasi, email, messaging, transaksi, management proses (JMX), testing, xml dan json processing, dan banyak hal lain yang sudah tersedia secara otomatis.

Memudahkan dari sisi kita sebagai Software Engineer/ IT Developer.


Spring Boot

Kemudian dibuatlah framework Spring-Boot, yaitu seperti container/pembungkus dari banyak library Spring yang secara minimal harus dimasukkan agar sebuah aplikasi bisa berjalan.

Dengan Spring Boot, maka kita sebagai Software Engineer/ IT Developer tidak perlu menghapal library-library low level mana saja yang perlu kita masukkan dalam aplikasi kita dan tidak perlu mengecek kompatibilitas dari masing-masing library tersebut. Spring Boot sudah membungkusnya dalam sebuah kelompok library yang compatible.

Kita cukup dengan mengimportnya sebagai Bill Of Material (BOM) di dependency management Maven, maka secara otomatis versi dari library-libray di versi Spring-Boot yang kita pilih akan terseleksi hanya versi library yang compatible saja.

Spring-Boot awalnya dibuat untuk tujuan penyederhanaan pembuatan aplikasi StandAlone berbasis web tanpa direpotkan dengan cara konfigurasi dan pengecekan versi library yang kompatibel.

Konfigurasinya dibuat dengan pemahaman “Opinionated View” atau konfigurasi dengan standar de facto yang biasanya digunakan. Misalnya penamaan bean, letak file resource, nama file konfigurasi, dll.

Sehingga dengan “Opinionated View”, asalkan kita cukup membuat file-file yang sudah menjadi standar dari Spring-Boot, maka kita tidak perlu membuat setingan macam-macam. Semua akan berjalan dengan lancar.

Begitu mudahnya membuat aplikasi memakai Spring-Boot dibandingkan dahulu menggunakan import library Spring satu persatu.


Spring Cloud

Lalu muncullah era Cloud di tahun-tahun belakangan ini, membuat Spring-Boot juga tidak cukup menangani aplikasi standalone, tetapi juga perlu menangani library-library yang terkait sistem terdistribusi.

Sistem terdistribusi artinya sistem yang tidak hanya terdapat di satu server, satu CPU, memori, atau hardisk saja.

Akan tetapi sistem yang terdiri dari banyak aplikasi di server yang berbeda, banyak CPU, berbeda memori, dan tentunya berbeda letak penyimpanannya.

Contohnya adalah aplikasi yang dibuat dengan arsitektur Microservice dimana service terletak di lokasi yang berbeda, ada juga misalnya Elastic Search yang menggunakan sharding dan replica server dalam implementasinya.

Atau misalnya dengan Kafka dengan partitioning dan replica servernya.

Contoh lainnya, perlu adanya API Gateway dalam menghandle banyak request terhadap API yang kita punya, Eureka, Consul, Zookeper, atau Discovery Server lainnya.

Atau juga ada Kubernetes yang bertugas sebagai orchestator dari sistem terdistribusi yang terdiri dari banyak container docker misalnya.

Apalagi dengan munculnya cloud provider seperti AWS, GCP, Azure, Alibaba, dll, maka juga diperlukan library yang kompatibel dengan teknologi-teknologi spesifik terhadap cloud provide tersebut.

Untuk menangani trend diatas, muncullah paketan lain pelengkap dari Framework Spring-Boot yang sudah ada, yaitu Spring-Cloud.

Spring Cloud berupaya membungkus library sistem terdistribusi menjadi paketan library-library yang kompatibel satu sama lain.

Waktu yang kita butuhkan untuk mengecek kompatibility dan mencari versi library yang kompatible akan jauh sangat berkurang dengan bantuan Spring-Cloud ini.

Secara umum Spring-Cloud menangani kasus sistem terdistrubusi seperti Manajemen Konfigurasi, Service Discovery, Circuit Breaker, Routing, Clustering, Distributed Session, Micro Proxy, Distributed Token, Control Bus, dll

Dengan demikian, maka Software Enginner / IT Developer bisa fokus untuk menangani proses bisnis yang mereka perlu selesaikan menggunakan teknologi IT tersebut.

Mengenai kompabilitas dari Spring Boot - Spring Cloud, bisa dilihat di sini