Level Up With Springboot From Middle To Advanced Engineering
Level Up With Springboot From Middle To Advanced Engineering
With
Springboot
From
Middle To
Advanced
Engineering
Etrio
Apa itu Spring Boot
Spring Boot adalah framework berbasis Java yang dirancang untuk menyederhanakan pengembangan aplikasi berbasis Spring
Framework. Spring Boot membantu developer untuk membuat aplikasi standalone, production-ready dengan konfigurasi seminimal
mungkin.
• Menghilangkan kebutuhan konfigurasi manual yang kompleks
• Menyediakan starter dependencies dan auto-configuration
• Memudahkan pembuatan REST API, Web App, Batch Job, dan banyak jenis aplikasi Java lainnya
Keunggulan Penjelasan
Mengkonfigurasi bean dan dependency secara
🔥 Auto-Configuration
otomatis sesuai kebutuhan
Dependency group yang siap pakai, memudahkan
🧩 Spring Starter
setup project
Bisa langsung dijalankan dengan java -jar, tanpa perlu
🚀 Standalone App
server eksternal
Sudah menyertakan Tomcat/Jetty/Undertow di dalam
📦 Embedded Server
aplikasi
🧪 Testing Support Dukungan kuat untuk unit & integration testing
Cocok untuk arsitektur microservices, apalagi dengan
🧱 Microservices Ready
Spring Cloud
🔐 Security Integration Mudah integrasi dengan Spring Security dan JWT
🌐 Community & Documentation Komunitas besar dan dokumentasi lengkap
Perbandingan dengan Framework Lain
Fitur/Aspek Spring Boot (Java) Laravel (PHP) Express.js (Node.js) Django (Python)
Bahasa Java PHP JavaScript Python
Starter Pack ✅ Spring Starter 🔶 Laravel Installer 🔶 Express Generator 🔶 Django Project
Scaffold 🤔 Kenapa Harus Pilih Spring Boot?
🔶 Config manual + 🔶 Konvensi &
Konfigurasi 🔥 Auto Configuration 🔶 Config manual
artisan setting.py • Cocok untuk aplikasi enterprise dan skala
Keamanan
✅ Built-in Security
Support
🔶 Middleware-based
🔶 Manual setup (e.g.
JWT)
✅ Built-in with
middleware besar
✅ Tomcat/Jetty built- ❌ Perlu ✅ Node.js built-in
• Terintegrasi baik dengan teknologi enterprise
Embedded Server ❌ Gunicorn/WSGI
in Apache/Nginx server
lainnya: Kafka, RabbitMQ, OAuth2, OpenAPI,
Performance ✅ Tinggi & stabil 🔶 Sedang ✅ Cepat, async-ready 🔶 Sedang dan PostgreSQL
• Support Microservices Architecture
Learning Curve 🔶 Menengah - Tinggi ✅ Mudah ✅ Mudah ✅ Menengah
• Sangat cocok untuk tim development dengan
Microservices
✅ Spring Cloud
Support
❌ Tidak dirancang
untuk itu
🔶 Bisa, tapi manual 🔶 Tidak optimal kebutuhan stabilitas dan maintainability
Komunitas ✅ Besar ✅ Besar ✅ Besar ✅ Besar jangka panjang
Struktur Dasar Aplikasi
Annotation Fungsi
Annotation Fungsi
@Service Menandakan class berisi logika bisnis (service layer)
@Repository Menandakan class DAO / JPA Repository
@Autowired Untuk dependency injection otomatis
@RequestMapping Mapping request (GET, POST, dll) ke controller
@PathVariable Mengambil data dari URL path (e.g. /user/{id})
@RequestParam Mengambil query parameter (e.g. /search?keyword=x)
@RequestBody Untuk menerima body JSON dari request POST/PUT
@ResponseBody Mengembalikan data langsung, bukan view
•
Cocok untuk tim besar dengan
standar perusahaan
Dokumentasi lebih lengkap
🔧 Apa Itu Dependency dalam Spring Boot? • Lebih stabil untuk proyek yang sangat
kompleks dan butuh kestabilan build
Dependency adalah library atau komponen eksternal Kapan Pakai Gradle?
yang dibutuhkan oleh sebuah aplikasi agar bisa berjalan • Cocok untuk proyek modern,
dengan baik. Dalam konteks Java (termasuk Spring Boot), startup, Android development
dependency biasanya berupa file .jar yang berisi • Butuh fleksibilitas konfigurasi
• Ingin build lebih cepat & efisien
kode/library pihak ketiga, misalnya:
Aspek Maven Gradle
✍️Contoh Dependency di Maven (pom.xml)
📁 File Konfigurasi pom.xml (XML) build.gradle (Groovy/Kotlin DSL)
Groovy/Kotlin (imperatif +
⚙️Bahasa Konfigurasi XML (deklaratif)
deklaratif)
Lebih cepat (terutama dengan
🚀 Kecepatan Build Cenderung lebih lambat
cache & parallel)
📦 Dependency Management Terstandarisasi, stabil Lebih fleksibel dan customizable
Semakin populer di proyek
✍️Contoh Dependency di Gradle (build.gradle)
📚 Dokumentasi & Community Sangat luas dan mapan
modern
🧩 Plugin Banyak, stabil Juga banyak, lebih fleksibel
🔁 Incremental Build Tidak mendukung ✅ Mendukung (lebih efisien)
Logging Output Verbose (lebih banyak teks) Ringkas dan bisa dikustomisasi
🎯 Dependency Resolution Sedikit lebih kaku Lebih cepat dan dinamis
Contoh Maven
Tag Fungsi
Root element dari semua file POM Maven.
<project>
Mendefinisikan bahwa ini adalah proyek Maven.
└─ id 'org.springframework.boot'
Mendefinisikan plugin yang digunakan dalam
build.
Plugin utama untuk menjalankan dan membangun
aplikasi Spring Boot.
└─ id 'io.spring.dependency- Plugin untuk mengelola versi dependency secara
management' otomatis.
└─ id 'java' Plugin dasar untuk proyek Java.
Seperti groupId di Maven — identitas
group = 'com.example'
organisasi/proyek.
Versi proyek saat ini. Gunakan -SNAPSHOT untuk
version = '0.0.1-SNAPSHOT'
versi pengembangan.
sourceCompatibility = '17' Versi Java yang digunakan untuk compile.
repositories { ... } Menentukan dari mana dependency diunduh.
Repositori default untuk dependency open source
└─ mavenCentral()
Java.
Tempat mendefinisikan semua dependency/library
dependencies { ... }
yang dibutuhkan aplikasi.
Menandakan bahwa library ini dibutuhkan saat
└─ implementation ...
runtime dan compile (tanpa diekspos keluar).
Tipe
Kegunaan
Dependency
implementation Untuk library yang hanya digunakan dalam proyek ini.
api Untuk library yang juga akan dipakai oleh dependensi lain (biasanya untuk library umum).
Gradle
Autowired
Constructor
Depedency Injection
Setter Injection
Fungsi Penjelasan
Mapping class Java ke tabel DB
ORM (Object ↔ DB) tanpa harus menulis query SQL
langsung
Menyimpan, mengambil,
📥 CRUD Otomatis mengupdate, menghapus data
dengan lebih mudah
Menyembunyikan detail vendor
🔄 Abstract DB Layer
database (PostgreSQL, MySQL, dll)
ENTITY DAN RELASI ANTAR ENTITY
🧩 Apa itu Entity?
Entity adalah representasi dari sebuah tabel di database. Dalam konteks
JPA, sebuah @Entity adalah class Java yang akan dipetakan ke tabel database.
CRUD Otomatis findAll(), findById(id), save(obj), deleteById(id) Fleksibilitas Kurang fleksibel untuk operasi SQL Bisa memakai fitur SQL penuh
(JOIN, LIMIT)
Query Berdasarkan Nama findByEmail(String email)
📦 Paging & Sorting
Paging & Sorting findAll(Pageable p), findAll(Sort s) Spring Data menyediakan fitur pagination dan sorting bawaan, sangat berguna saat
✅ Contoh: menampilkan data dalam jumlah besar.
🧪 Contoh Sorting:
Gunakan custom exception Untuk error yang sering terjadi, seperti UserNotFound,
Unauthorized
Return JSON yang konsisten Sehingga client mudah memproses respons error
Pisahkan logic handling Gunakan @ControllerAdvice agar controller tetap bersih
Logging error Selalu log error (misalnya dengan SLF4J atau logback)
LOGGING
🚫 Mengapa Logging Penting? 📘 Level Logging
Saat terjadi error (contoh: data tidak ditemukan, validasi gagal, atau kesalahan sistem), kita ingin: • TRACE : Detail sangat tinggi, biasanya untuk debugging level mendalam.
• • DEBUG : Informasi untuk debugging umum.
Catatan informasi selama runtime aplikasi
• • INFO : Informasi penting (misalnya aplikasi start, stop, atau event bisnis).
Debugging
• • WARN : Sesuatu yang perlu diperhatikan, tetapi tidak menghentikan program.
Monitoring
• • ERROR : Terjadi kesalahan yang harus ditangani.
Audit Trail
➡️Dari yang paling verbose hingga paling kritis:
📍 Stack Logging di Spring Boot 📊Contoh Konfigurasi
📍Depedency
✅ Konfigurasi File Logback (logbackspring.xml)
• Role-Based Access:
• Setelah login, setiap request
harus menyertakan JWT di
header Authorization.
• JwtFilter (extends
OncePerRequestFilter)
memvalidasi token.
• Spring Security memeriksa
anotasi seperti
@PreAuthorize("hasRole('AD
MIN')") sebelum mengakses
API.
• Stateless Practices:
• Tidak ada session disimpan di
server (token JWT
menyimpan claims/roles).
• Token memiliki expiry time
(misal 1 jam).
ASYNCHRONOUS PROGRAMMING
Scheduler & Task Management
Alur Scheduler:
• Spring Boot memulai scheduler saat aplikasi startup.
• Task dieksekusi berdasarkan:
• Cron Expression (misal: 0 0 9 * * MON-FRI untuk
weekday jam 9 pagi)
• Fixed Delay (misal: @Scheduled(fixedDelay =
5000) setiap 5 detik setelah task sebelumnya
selesai)
• Fixed Rate (misal: @Scheduled(fixedRate = 3000)
setiap 3 detik tanpa menunggu task sebelumnya
selesai)
Cache Hit/Miss Flow:
Cache
• Cache Hit: Data diambil langsung dari Redis tanpa
query database.
• Cache Miss: Data diambil dari database, lalu disimpan
ke Redis untuk request berikutnya.
Spring Boot & Microservices
• API Gateway
(Spring Cloud
Gateway)
• Service
Discovery
(Eureka/Nacos)
• Feign Client
• Circuit Breaker
(Resilience4j)
Testing
TIPE TEST TOOLS USE CASE
Unit Test JUnit, Mockito Test kelas service/repo
Integration Test @SpringBootTest Test integrasi DB/API
Controller Test MockMvc Test endpoint REST
Real Env Test Testcontainers Test dengan infra real (Docker)
Coverage JaCoCo Ukur cakupan kode
Unit Test (JUnit + Integration Controller Test
Mockito) Test (MockMvc)
Terima
Kasih
Etrio Widodo