0% menganggap dokumen ini bermanfaat (0 suara)
73 tayangan27 halaman

Level Up With Springboot From Middle To Advanced Engineering

Spring Boot adalah framework Java yang memudahkan pengembangan aplikasi dengan konfigurasi minimal dan dukungan untuk berbagai jenis aplikasi, termasuk REST API dan microservices. Keunggulannya termasuk auto-configuration, starter dependencies, dan integrasi keamanan yang kuat. Selain itu, Spring Boot juga mendukung dependency injection dan manajemen bean, serta menawarkan kemudahan dalam pengelolaan dependensi melalui Maven dan Gradle.

Diunggah oleh

Etrio Widodo
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
73 tayangan27 halaman

Level Up With Springboot From Middle To Advanced Engineering

Spring Boot adalah framework Java yang memudahkan pengembangan aplikasi dengan konfigurasi minimal dan dukungan untuk berbagai jenis aplikasi, termasuk REST API dan microservices. Keunggulannya termasuk auto-configuration, starter dependencies, dan integrasi keamanan yang kuat. Selain itu, Spring Boot juga mendukung dependency injection dan manajemen bean, serta menawarkan kemudahan dalam pengelolaan dependensi melalui Maven dan Gradle.

Diunggah oleh

Etrio Widodo
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 27

Level Up

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

@Configuration Menandakan bahwa class ini berisi


konfigurasi Spring (mirip XML)

@EnableAutoConfiguration Meminta Spring untuk mengonfigurasi bean


secara otomatis

@ComponentScan Memindai package dan subpackage untuk


menemukan komponen Spring

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

@Entity Menandakan class sebagai representasi tabel database (ORM)


Diagram Alur Sederhana Spring Boot
Kapan Pakai Maven?
Depedency •


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.

xmlns, xsi:schemaLocation Namespace XML dan lokasi skema untuk validasi


struktur XML.
<modelVersion> Versi model POM yang digunakan. Saat ini selalu 4.0.0.
Identitas unik proyek/organisasi. Umumnya berupa
<groupId>
domain terbalik, misal com.example.
Nama proyek atau modul. Menentukan nama file output
<artifactId>
(.jar, .war, dll).
Versi dari proyek. Tambahan -SNAPSHOT menandakan
<version> versi masih dalam pengembangan.
<packaging> Jenis paket hasil build: jar, war, pom, dll. Default: jar.
Mengimpor konfigurasi dari proyek induk (biasanya
<parent> spring-boot-starter-parent).
└─ <groupId> Group ID dari parent (misalnya Spring Boot).
└─ <artifactId> Artifact ID dari parent.
└─ <version> Versi parent yang digunakan.
Variabel global, seperti versi Java
<properties>
(<java.version>17</java.version>).
<dependencies> Daftar library yang dibutuhkan proyek.
└─ <dependency> Masing-masing library ditulis dalam tag ini.
└── <groupId> Group ID library (misalnya org.springframework.boot).
Nama library/artifact (misalnya spring-boot-starter-
└── <artifactId>
web).
Bagian / Tag Fungsi

Contoh Gradle plugins { ... }

└─ 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).

runtimeOnly Hanya dibutuhkan saat aplikasi dijalankan, bukan saat compile.

testImplementation Dependency hanya untuk testing.


Diagram Alur Maven dan Gradle
Maven

Gradle

Init → Inisialisasi proyek.


• Validate → Memeriksa struktur proyek.
Configure → Membaca build.gradle dan menyiapkan task.
• Compile → Kompilasi kode sumber (src/main/java).
Execute Tasks → Menjalankan task yang dipilih (contoh: build, test).
• Test → Menjalankan unit test (src/test/java). Gradle Build → Kompilasi + package.
• Package → Membuat artefak (JAR/WAR).
Test → Menjalankan tes (bisa paralel).
• Verify → Memeriksa hasil package. Maven Assemble → Membuat artefak (JAR/WAR).
• Install → Menyimpan artefak ke lokal Maven repository
(~/.m2). Publish → Upload ke repository.

• Deploy → Mengirim artefak ke remote repository


(Nexus/Artifactory).
Depedency Injection & Bean Management
🧩 Apa itu Dependency Injection (DI)? 🌱 Apa itu Bean Management?
Dependency Injection adalah pola desain (design Bean Management adalah cara Spring membuat,
pattern) di mana objek tidak membuat dependency- mengelola, dan mengatur siklus hidup (lifecycle) dari
nya sendiri, melainkan disuntikkan dari luar (oleh Spring Bean (objek yang dikelola Spring).
framework). 🟢 Spring Bean = Objek Java yang:
📌 Contoh Tanpa DI: • Didaftarkan oleh Spring (otomatis atau manual)
• Dikelola lifecycle-nya
📌 Contoh Dengan DI (Spring): • Disediakan lewat DI jika dibutuhkan
Pendaftaran Bean Manual Pendaftaran Bean Auto
Fungsi Penjelasan
Dependency bisa dipakai
🔁 Reusability
berulang di banyak class
Ganti implementasi tinggal Aspek Dependency Injection (DI) Bean Management

🔄 Maintainability ubah konfigurasi, bukan 🎯 Tujuan


Menyuntikkan dependency ke dalam
objek
Mengelola objek (Bean) dan siklus
hidupnya
hardcode Menggunakan @Autowired, constructor, Menggunakan @Component, @Service,
⚙️Mekanisme
setter @Bean, dll

Mengurangi keterikatan antar


✅ Decoupling 📌 Fokus Pemakaian dependency
Pembuatan dan pengaturan objek
class dependency

🧠 Siapa yang mengatur Spring (container) Spring (container)

Mudah diuji karena 💡 Contoh @Autowired UserService userService;


@Bean public UserService userService() {
... }
♻️Testability dependency bisa diganti mock-
nya 🔁 Lifecycle Tidak mengatur lifecycle Mengelola lifecycle: init, destroy, scope
Depedency Injection

Autowired

Constructor
Depedency Injection

Setter Injection

Qualifier untuk Multiple Beans


Restful API dengan Spring MVC
📌 Apa itu RESTful API? 📊 Karakteristik RESTful API dengan
RESTful API adalah arsitektur web service yang mengikuti Spring MVC
prinsip REST (Representational State Transfer):
• Aspek Penjelasan
Menggunakan HTTP method standar (GET, POST, PUT, DELETE)
• Berbasis resource yang diakses melalui URL Format Data JSON / XML (default: JSON)
• Stateless (server tidak menyimpan state client) Arsitektur Stateless (tidak menyimpan state client
di server)
Anotasi Fungsi
HTTP GET, POST, PUT, DELETE sesuai aksi
Methods
Menandai class sebagai REST controller (otomatis
@RestController mengembalikan JSON) URI berbasis Resource (misal: /users, /orders/1)

Response Menggunakan @ResponseBody secara


@RequestMapping Menentukan URL dasar atau endpoint otomatis dengan @RestController
@GetMapping Handler untuk HTTP GET Swagger (dokumentasi), Postman
Tools Bantu (testing), Lombok (reduksi kode
@PostMapping Handler untuk HTTP POST boilerplate)

@PutMapping Handler untuk HTTP PUT


@DeleteMapping Handler untuk HTTP DELETE
🔄 Perbandingan: RESTful API vs Non-
@PathVariable Mengambil bagian dari path URL (misalnya /{id})
REST (SOAP atau MVC Tradisional)
Mengambil data dari body request (biasanya
@RequestBody
JSON) Aspek RESTful API SOAP / MVC Tradisional
Protokol HTTP HTTP, SMTP, dll
Format Data JSON / XML (flexibel) XML (fixed)
Arsitektur Stateless Stateful (bisa menyimpan session)
Lebih lambat karena overhead
Kecepatan Cepat dan ringan
XML
Resource-oriented Action-oriented (/getUserById?
URL Struktur (/users/1) id=1)
Mudah digunakan di Perlu tools khusus (SOAP client,
Tools / Standar
browser/API client WSDL)
Penggunaan di Mobile Sangat cocok Kurang efisien
JPA ( Java Persistence API )
📌 Apa itu JPA?
JPA (Java Persistence API) adalah spesifikasi standar di Java
untuk ORM (Object Relational Mapping), yaitu
menghubungkan objek Java dengan tabel di database.

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.

🔗 Relasi Antar Table


Tipe Relasi Contoh Relasi
OneToMany Satu User punya banyak Post
ManyToOne Banyak Post dimiliki satu User
OneToOne Satu User punya satu Profile
ManyToMany Banyak Mahasiswa mengikuti banyak MataKuliah

📌 Contoh Kasus OneToMany dan ManyToOne :


• Satu User bisa menulis banyak Post → @OneToMany
• Tiap Post ditulis oleh satu User → @ManyToOne

📊 Penjelasan Anotasi Relasi (Tabel)


Anotasi Digunakan di Fungsi
@OneToMany Di entity induk (User) Menunjukkan bahwa satu entitas memiliki banyak entitas lain
mappedBy @OneToMany Menunjukkan field pemilik relasi di entitas lain (harus cocok)
@ManyToOne Di entity anak (Post) Menunjukkan bahwa banyak entitas ini milik satu entitas lain
@JoinColumn @ManyToOne Menentukan nama kolom foreign key di tabel (misal: user_id)

cascade @OneToMany Menentukan apakah operasi pada parent memengaruhi child


(persist, delete, dsb)
SPRING DATA JPA
📌 Apa itu Spring Data JPA? 🧠 Contoh Repository dengan Spring Data JPA:
Spring Data JPA adalah ekstensi dari Spring yang
mengintegrasikan JPA dengan Spring dan memberikan fitur
tambahan seperti:
• CRUD otomatis tanpa perlu implementasi
• Query method berdasarkan nama fungsi
• Paging & Sorting 📦Contoh Dependency untuk Spring Data JPA dan DB Postgresql
• Support @Query untuk native SQL atau JPQL
🔁 Hubungan: JPA vs Hibernate vs Spring Data
Layer Fungsi
🔷 JPA Spesifikasi (API) untuk ORM
🟣 Hibernate Implementasi JPA (paling populer)

🟢 Spring Data JPA Framework Spring yang mempermudah


integrasi dan penggunaan JPA
⚙️Contoh Konfigurasi application.properties
📊 Perbandingan: JPA vs Spring Data JPA
Aspek JPA (Standar) Spring Data JPA (Framework)
Sifat API / Spesifikasi Framework berbasis Spring
Kode CRUD Perlu implementasi manual Otomatis disediakan via interface
Query JPQL / Native SQL manual Bisa pakai method query, @Query, DSL
Integrasi Spring Perlu konfigurasi manual Terintegrasi langsung dengan Spring Boot
Support Pagination Tidak langsung Built-in (via Pageable, Page)
JPA REPOSITORY
📦 Repository: JpaRepository
JpaRepository adalah interface bawaan Spring Data yang menyediakan operasi CRUD
📊 Perbandingan @Query vs Native
lengkap tanpa perlu implementasi manual Aspek @Query (JPQL) Native Query (SQL murni)
Bahasa Berdasarkan entity & field Berdasarkan nama tabel & kolom
Portabilitas Lebih portable antar DB Bergantung pada jenis database

Kinerja Biasanya cukup cepat Bisa lebih optimal untuk query


Fitur Contoh Method kompleks

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.

• Pageable → untuk paging


• Sort → untuk sorting
• Page<T> → hasil paging
🧪 Contoh Paging:

🔍 @Query: Custom Query JPQL dan Native Query

🧪 Contoh Sorting:

🧪 Kombinasi Paging + Sorting:


ERROR HANDLING DAN GLOBAL EXCEPTION
🚫 Mengapa Error Handling Penting? 📘 Contoh Penggunaan di Controller
Saat terjadi error (contoh: data tidak ditemukan, validasi gagal, atau kesalahan sistem), kita ingin:
• Memberikan pesan error yang informatif
• Memberikan HTTP status code yang sesuai (seperti 404, 400, 500)
• Menghindari error HTML bawaan server
• Menjaga agar API tetap konsisten dan terkontrol
➡️Jika user tidak ditemukan, akan dilempar ResourceNotFoundException, lalu ditangani oleh
📍 Custom Exception Class GlobalExceptionHandler.
Buat class exception khusus untuk mewakili jenis kesalahan tertentu.
📊Perbandingan
Komponen Fungsi

@ExceptionHandler Menangani exception tertentu di controller atau global handler

@ControllerAdvice Menandai class sebagai global exception handler


➡️Ini akan digunakan ketika data tidak ditemukan (misalnya user tidak ada).
CustomException Membuat class exception sendiri sesuai kebutuhan aplikasi
📍Global Exception Handling dengan @ControllerAdvice ResponseEntity Mengontrol isi dan status HTTP dari respons error
@ControllerAdvice adalah anotasi yang membuat class jadi global exception handler untuk semua
controller.
✅ Best Practice
Tips Penjelasan

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)

📍Contoh Penggunaan Logging di Kode


LOGGING
✅BEST PRACTICE LOGGING
• Jangan log data sensitif (password, token, dll).
• Gunakan logger.debug() hanya jika benar-benar diperlukan di production.
• Tambahkan Trace ID atau Request ID untuk trace log per permintaan (gunakan MDC).
• Gunakan @Slf4j dari Lombok untuk mempermudah logging.

✅ADVANCED: MDC (MAPPED DIAGNOSTIC CONTEXT)


Gunakan MDC untuk menyimpan informasi yang konsisten per-
thread (misalnya Trace ID).
Lalu, sesuaikan log pattern: <pattern>%d{yyyy-MM-dd
HH:mm:ss} [%X{traceId}] %-5level %logger{36} -
%msg%n</pattern>
✅INTEGRASI DENGAN TOOLS LOGGING
• ELK Stack (Elasticsearch, Logstash, Kibana)
• Grafana + Loki
• Cloud Logging (GCP, AWS, Azure)
• Fluentd / Filebeat untuk pengiriman log dari file ke
sistem observasi.
✅LOGGING ASYNCHRONOUS / BACKGROUND TASKS
SECURITY DENGAN JWT & ROLE-BASED ACCESS
• Login Flow:
• Client mengirim credentials
(username/password).
• AuthenticationProvider
memvalidasi via
UserDetailsService.
• Jika valid, JWT Filter
menghasilkan token yang
ditandatangani.

• 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

Anda mungkin juga menyukai