Episode ini mengupas evolusi Spring dari konfigurasi XML yang membosankan menjadi Spring Boot dengan auto-configuration dan starter dependencies. Kalian juga memahami masalah yang diselesaikan Spring Boot serta perbandingannya dengan pendekatan pengembangan Java tradisional.

Sebelum Spring Boot ada, membangun aplikasi web dengan Java adalah pengalaman yang sangat menyakitkan. Di episode 1 ini kita mundur sejenak untuk melihat sejarah dan latar belakang mengapa Spring Boot lahir, serta masalah konkret apa yang dia selesaikan.
Memahami sejarah ini bukan sekadar nostalgia. Ketika kalian memahami akar masalah yang memunculkan auto-configuration dan starter dependencies, kalian akan lebih mudah menebak bagaimana Spring Boot berperilaku — dan kapan harus meng-override perilaku default-nya. Ini fondasi mental yang sangat berguna di seluruh series.
Spring Framework lahir pada tahun 2002 sebagai jawaban atas kerumitan Enterprise JavaBeans (EJB). Spring memperkenalkan konsep yang kini kita kenal sebagai dependency injection dan Inversion of Control, menjadikan komponen Java sebagai POJO yang sederhana. Namun pada masa awal, seluruh konfigurasi dilakukan lewat file XML yang sangat panjang dan sulit dirawat.
Bayangkan mendeklarasikan setiap bean, relasi antar bean, transaksi, dan security di satu file XML raksasa:
<beans xmlns="http://www.springframework.org/schema/beans">
<bean id="itemRepository" class="com.example.ItemRepository"/>
<bean id="itemService" class="com.example.ItemService">
<property name="repository" ref="itemRepository"/>
</bean>
<bean id="itemController" class="com.example.ItemController">
<property name="service" ref="itemService"/>
</bean>
</beans>Setiap kali menambah sebuah class baru, developer harus mengingat untuk mendaftarkannya di sini. Satu lupa, aplikasi gagal saat runtime. Ini disebut configuration boilerplate — pekerjaan rutin yang sama sekali tidak berhubungan dengan logika bisnis.
Spring 2.5 mulai memperkenalkan konfigurasi berbasis annotation seperti @Component dan @Autowired. Spring 3 menambahkan konfigurasi Java dengan @Configuration dan @Bean. Setiap iterasi mengurangi jumlah XML yang harus ditulis. Namun integrasi teknologi lain — database, message queue, web server — tetap menuntut konfigurasi manual yang konsisten dan mudah salah.
Genesis Spring Boot terjadi di tahun 2012, ketika para developer Spring menyadari bahwa seluruh pipeline framework — pembuatan bean, konfigurasi datasource, setup web server — selalu berulang dari project ke project. Dari kesadaran inilah lahir konsep auto-configuration: Spring melihat library apa saja yang ada di classpath, lalu otomatis menyiapkan konfigurasi yang masuk akal.
Spring Boot menghapus hampir seluruh pekerjaan konfigurasi manual. Ambil contoh starter dependencies — paket dependency yang sudah dipilihkan Spring sesuai kebutuhan. Satu dependency spring-boot-starter-web menarik semua library yang diperlukan untuk aplikasi web: Spring MVC, Jackson, dan Tomcat embedded.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}Perhatikan: tidak ada nomor versi yang ditulis manual. Spring Boot memakai dependency management bawaan sehingga versi setiap library disepakati dan diuji bersama — ini menghilangkan salah satu sumber masalah klasik di Java yang disebut dependency hell, yaitu konflik versi antar library.
Sebelum Spring Boot, menjalankan aplikasi berarti menginstall Apache Tomcat, men-deploy file WAR, dan memulai server secara manual. Spring Boot membalik konsep ini: Tomcat, Jetty, atau Undertow di-embed langsung ke dalam aplikasi dan aplikasi dijalankan cukup dengan memanggil method main. Hasilnya adalah rapid development — satu perintah untuk menjalankan, satu perintah untuk menguji.
./mvnw spring-boot:runPerintah ./mvnw spring-boot:run memulai embedded Tomcat, menjalankan auto-configuration, dan membuat aplikasi siap menerima request dalam hitungan detik. Untuk production, aplikasi di-package sebagai jar executable yang bisa dijalankan dengan java -jar di server mana pun yang punya JVM:
./mvnw clean package
java -jar target/belajar-spring-boot-0.0.1-SNAPSHOT.jarDengan satu artefak ini, aplikasi berjalan di server, container, maupun environment CI tanpa instalasi tambahan.
Untuk memperjelas nilai Spring Boot, bandingkan perjalanan membangun aplikasi web sederhana dengan dua pendekatan:
Perbedaan paling kentara ada di onboarding dan consistency. Dengan Spring Boot, developer baru bisa menjalankan aplikasi pertama dalam hitungan menit, dan setiap project mengikuti pola yang sama karena semuanya di-generate dari Spring Initializr.
Kebiasaan yang sama berlaku lintas tim dan library, sehingga berpindah antar project Spring Boot terasa familiar. Dengan ekosistem yang masif — ratusan starter dan dokumentasi resmi yang rapi — kurva belajar tetap landai meski fitur terus bertambah.
Saat ini Spring Boot adalah standar de facto untuk backend Java, terlebih di era cloud-native. Dengan dukungan container yang ringan, auto-configuration yang berjalan cepat, dan ekosistem Spring Cloud untuk distributed system, Spring Boot menjadi pilihan utama untuk membangun microservices. Rilis terbaru dari garis Spring Boot 3.x berjalan di atas Spring Framework 6, memerlukan Java 17 ke atas, dan mendukung observability serta native image — semua topik yang akan kita bahas di episode-episode akhir series ini.
XML config -> Annotation -> Java config -> Spring Boot 3.xEkosistem ini juga luas: Spring Data untuk persistence, Spring Security untuk autentikasi, Spring Cloud untuk microservices, dan Spring Reactive untuk aplikasi non-blocking. Masing-masing akan dijelajahi di episode yang relevan.
Episode 1 memberikan konteks sejarah dan motivasi di balik Spring Boot: framework ini lahir untuk menghapus boilerplate konfigurasi, menyatukan manajemen dependency, dan mempercepat pengembangan aplikasi Java dengan embedded server serta auto-configuration.
Inti yang harus dibawa pulang:
./mvnw spring-boot:run.Di episode 2 selanjutnya kita akan membahas konsep dasar dan arsitektur utama — cara kerja di balik layar: lifecycle aplikasi, mekanisme auto-configuration dengan conditional beans, peran @SpringBootApplication, application context, DispatcherServlet, hingga profil aplikasi. Di sinilah kalian mulai melihat cara kerja Spring Boot dari dalam.