Belajar Quarkus - Konsep Dasar & Arsitektur Utama
Episode 2 of 24

Belajar Quarkus - Konsep Dasar & Arsitektur Utama

Episode ini membedah arsitektur Quarkus dari dalam: build-time augmentation, live coding dan Dev UI, model extension yang extensible, cara kerja GraalVM native dan JIT, serta alur lifecycle aplikasi dan CDI container.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Pada episode 1 kita sudah memahami mengapa Quarkus lahir. Sekarang saatnya melihat apa yang terjadi di balik layar. Quarkus bukan sekadar framework yang lebih cepat — ia mengubah fundamental cara aplikasi Java dibangun dan dijalankan.

Episode 2 membedah konsep dasar dan arsitektur utama Quarkus: build-time augmentation, live coding dengan Dev UI, model extension yang extensible, penggunaan GraalVM native dan JIT, serta alur lifecycle aplikasi dan CDI container. Dengan memahami fondasi ini, episode-episode praktik berikutnya akan terasa lebih masuk akal.

Build Time Augmentation

Konsep Utama

Sebagian besar framework Java melakukan classpath scanning saat runtime: memindai semua class, membaca annotation, lalu membangun konteks aplikasi. Ini penyebab utama startup lambat. Quarkus membalik pendekatannya: semua analisis metadata dan pembentukan struktur aplikasi dilakukan saat build time.

Hasilnya adalah bytecode yang sudah siap dioptimalkan dan di-dead code elimination. Runtime Quarkus hanya melakukan inisialisasi minimal, sehingga aplikasi menyala dalam waktu sangat singkat.

Implikasi bagi Developer

Pendekatan ini punya konsekuensi penting: kode yang bergantung pada nilai runtime saat boot (seperti System.getProperty untuk keperluan build-time) harus dipisahkan dengan jelas. Quarkus menyediakan mekanisme seperti @ConfigProperty dan config mappings untuk menangani ini secara aman.

Live Coding dan Quarkus Dev UI

Hot Reload

Salah satu fitur favorit developer adalah live coding. Saat kalian menjalankan aplikasi dengan mode dev dan mengubah kode, Quarkus melakukan hot reload — mengganti sebagian besar aplikasi tanpa restart penuh. Hanya perubahan yang memaksa JVM restart yang membutuhkan proses ulang penuh.

Menjalankan mode dev
./mvnw quarkus:dev
 
# Saat kode diubah, lihat output seperti:
# Restarting Quarkus application due to changed source
# Quarkus started in 0.321s

Quarkus Dev UI

Saat mode dev aktif, buka http://localhost:8080/q/dev di browser. Dev UI menyediakan dashboard interaktif: melihat bean yang terdaftar, memeriksa config, mengeksekusi query, melihat OpenAPI, dan masih banyak lagi. Ini alat diagnostik yang sangat berharga selama pengembangan.

URL yang tersedia di mode dev
http://localhost:8080/q/dev          # Dev UI
http://localhost:8080/q/openapi      # Spesifikasi OpenAPI
http://localhost:8080/q/health       # Health check

Peran Extension dan Arsitektur Extensible

Quarkus dibangun sebagai platform extensible. Setiap integrasi — database, messaging, observability, security — adalah sebuah extension yang menambahkan build step ke proses augmentation. Semakin sedikit extension, semakin ringan aplikasi kalian.

Mengelola extension
quarkus extension list          # daftar extension terinstall
quarkus extension add "resteasy-reactive-jackson"
quarkus extension add "hibernate-orm-panache,jdbc-postgresql"
./mvnw quarkus:add-extension -Dextensions=cache

Perintah quarkus extension add akan menambahkan dependency ke pom.xml dan secara otomatis menyesuaikan konfigurasi build. Model ini membuat aplikasi hanya memuat apa yang dipakai — prinsip pay for what you use.

GraalVM Native Image dan JIT Mode

Dua Cara Menjalankan Quarkus

  • JVM mode: aplikasi dijalankan di atas JVM standar, memanfaatkan JIT (Just-In-Time) compiler. Cocok untuk development dan lingkungan yang tidak terlalu sensitif terhadap resource.
  • Native image: aplikasi dikompilasi ahead-of-time (AOT) dengan GraalVM menjadi executable mandiri yang berjalan tanpa JVM. Startup sangat cepat dan memory sangat kecil.
Membangun native image
./mvnw package -Pnative
./mvnw package -Pnative -Dquarkus.native.container-build=true

Flag -Dquarkus.native.container-build=true menjalankan kompilasi native di dalam container, sehingga tidak perlu menginstall GraalVM secara lokal. Detail lengkap akan kita bahas di episode 16.

CDI Container, Bean Discovery, dan Scope

CDI Container

Quarkus menggunakan ArC — implementasi CDI yang dioptimalkan untuk build-time processing. Container ArC mengenali bean pada saat build, sehingga tidak perlu scanning classpath saat runtime.

Bean Discovery dan Scope

Bean CDI memiliki scope yang menentukan siklus hidupnya:

  • @Singleton: satu instance selama aplikasi hidup.
  • @ApplicationScoped: satu instance per aplikasi, thread-safe.
  • @RequestScoped: satu instance per request HTTP.
  • @SessionScoped: satu instance per sesi pengguna.

Pola yang paling sering dipakai di Quarkus adalah @ApplicationScoped untuk service dan repository, dan @RequestScoped untuk data yang khusus per request.

Application Lifecycle dan Bootstrap

Alur Bootstrap

Saat aplikasi Quarkus dimulai, urutannya adalah: pemuatan config, inisialisasi runtime, pembuatan CDI container, deklarasi semua bean, lalu menjalankan endpoint HTTP. Kalian bisa menyuntikkan logika saat startup dan shutdown memakai event lifecycle:

JavaHook lifecycle Quarkus
import jakarta.enterprise.context.ApplicationScoped;
import io.quarkus.runtime.StartupEvent;
import io.quarkus.runtime.ShutdownEvent;
import jakarta.enterprise.event.Observes;
 
@ApplicationScoped
public class AppLifecycleBean {
 
    void onStart(@Observes StartupEvent ev) {
        System.out.println("Aplikasi siap menerima request");
    }
 
    void onStop(@Observes ShutdownEvent ev) {
        System.out.println("Aplikasi sedang ditutup");
    }
}

Metode void onStart(@Observes StartupEvent ev) dijalankan saat aplikasi selesai bootstrap — tempat yang tepat untuk inisialisasi koneksi, pemuatan cache awal, atau seeding data.

Penutup

Episode ini membuka kotak hitam Quarkus: kalian kini memahami build-time augmentation yang memindahkan kerja dari runtime ke fase build, live coding dan Dev UI yang mempercepat development, model extension yang membuat aplikasi ringan, dua mode eksekusi JVM dan native, serta cara kerja CDI container ArC dan lifecycle aplikasi.

Inti yang harus dibawa pulang:

  • Build-time augmentation membuat startup Quarkus sangat cepat.
  • Dev UI tersedia di /q/dev hanya saat mode dev.
  • Extension menambah build step; semakin sedikit extension semakin ringan aplikasi.
  • JVM mode memakai JIT; native image memakai AOT GraalVM.
  • ArC adalah container CDI yang diproses saat build time.
  • Scope bean menentukan siklus hidup: @Singleton, @ApplicationScoped, @RequestScoped.
  • Lifecycle application bisa disambungkan lewat StartupEvent dan ShutdownEvent.

Di episode 3 selanjutnya kita akan membuat aplikasi Quarkus pertama — dari inisialisasi project dengan Quarkus CLI atau Maven, memahami struktur direktori, menjalankan dev mode dengan live reload, hingga mengatur konfigurasi dasar dan dependency. Ini episode praktik pertama, jadi siapkan terminal kalian!