Merhabalar,
Bugün dikkatimi çeken modern, Kubernetes-yerel bir Java framework olan Quarkus’tan bahsedeceğim. Quarkus, geliştiricilerin konteyner (container) ortamları için yüksek performanslı Java uygulamaları geliştirmesine olanak tanıyan açık kaynaklı, Kubernetes-yerel bir Java framework’üdür.

Quarkus’un sunduğu pek çok avantaj var. Bunlar nelerdir?
Hızlı Başlangıç Süreleri: Uygulamalar çok kısa sürede başlatılır, bu sayede özellikle bulut tabanlı ortamlarda ve mikroservis mimarilerinde ölçeklenebilirlik ve yanıt süresi açısından büyük avantaj sağlar. Örneğin bir mikroservis saniyeler yerine milisaniyeler içinde ayağa kalkabilir.
Düşük Bellek Tüketimi: Geleneksel Java uygulamalarına kıyasla daha az bellek kullanır. Bu, özellikle sınırlı kaynaklara sahip bulut altyapılarında maliyet ve verimlilik açısından çok önemlidir. Örneğin, 1 GB bellek yerine 100–200 MB bellekle çalışan uygulamalar mümkündür.
Düşük Sunucu (Host) Maliyetleri: Daha az kaynak tüketimi sayesinde, aynı sunucuda daha fazla uygulama çalıştırabilir ve genel sistem kaynak maliyetlerini azaltabilirsiniz. Örneğin daha az CPU ve RAM ile daha çok iş yükü çalıştırmak mümkün olur.
Java Uygulamalarında Performans Artışı: Quarkus, özellikle native image desteği (GraalVM gibi) ile Java uygulamalarının geleneksel JVM’e göre çok daha hızlı çalışmasını sağlar. Örneğin, uygulamanız sadece hızlı başlamaz, aynı zamanda yüksek yük altında da hızlı çalışır.
Geliştirici Verimliliğinde Artış: Canlı yenileme (live reload), entegre test araçları, sade yapılandırmalar ve IDE dostu yapısıyla geliştiricilere modern ve hızlı bir geliştirme deneyimi sunar. Örneğin, kodda yapılan değişiklikler uygulama yeniden başlatılmadan doğrudan test edilebilir.

Geleneksel Java teknolojileri, geçmişte monolitik (bütünleşik) yapılar için tasarlandı. Bu sistemlerde uygulamanın başlaması uzun sürerdi, çok fazla bellek (RAM) kullanırdı, o zamanlar bulut (cloud), konteyner (container) ve Kubernetes gibi teknolojilerin adları anılmazdı. Artık uygulamalar küçük parçalara ayrılıyor (mikroservisler), hızlı çalışması ve az kaynakla yönetilebilmesi bekleniyor. Bu nedenle Java’nın da günümüz ihtiyaçlarına uygun şekilde evrilmesi gerekiyordu. İşte burada Quarkus devreye giriyor. Quarkus, Java geliştiricilerinin modern, bulut-yerel (cloud-native) uygulamalar geliştirmesini sağlamak için oluşturuldu.
Quarkus için şunları söylemek mümkün:
Kubernetes-native, yani doğrudan Kubernetes altyapısı için optimize edilmiştir. GraalVM ve HotSpot gibi modern JVM altyapılarına uygun şekilde tasarlanmıştır. En iyi Java kütüphaneleri ve standartları üzerine inşa edilmiştir. Örneğin, normalde klasik bir Java uygulamasını konteynerde çalıştırmak çok yer kaplarken ve bu uygulama daha geç başlarken, Quarkus ile bu uygulama birkaç yüz MB bellekle milisaniyeler içinde çalışmaya başlayabilir.

Quarkus’un amacı, Java’yı Kubernetes ve sunucusuz (serverless) dünyada lider platform haline getirmek, geliştiricilere dağıtık mimari (distributed architecture) sistemleri yazabilecekleri güçlü bir altyapı sunmaktır. Örneğin, küçük, bağımsız çalışan mikroservisler yazmak isteyen bir geliştirici, Quarkus ile hem daha performanslı sonuçlar alır hem de sistem kaynaklarını verimli kullanır.

Tamamen Açık Kaynaktır (Open Source). Quarkus, Apache Lisansı 2.0 altında yayınlanan açık kaynaklı bir projedir. Bu ne anlama gelir? Kaynak kodları herkese açıktır, geliştirici topluluğu katkıda bulunabilir, tüm fikirler, geliştirmeler, tartışmalar şeffaf şekilde yürütülür. “Birlikte güçlüyüz” anlayışıyla, Java’nın geleceğini hep birlikte inşa edebiliriz.

Quarkus yalnızca web uygulamaları ya da mikroservisler yazmak için değil, aynı zamanda geliştirici deneyimini en üst düzeye çıkarmak için tasarlanmış bir çerçevedir. Buradaki amaç sadece özellik zenginliği sunmak değil; aynı zamanda her özelliğin kolayca çalışmasını, minimum konfigürasyonla kullanılabilmesini ve sezgisel bir geliştirme deneyimi yaşatmasını sağlamaktır. Basit bir uygulama geliştirmek çocuk oyuncağı olmalı, daha karmaşık işler ise zahmetsizce yapılabilmelidir. Quarkus’un sunduğu Live Coding (Canlı Kodlama) özelliği sayesinde geliştirme döngüsü inanılmaz hızlanır. Kodda bir değişiklik yaptığınızda uygulama yeniden başlatılmadan bu değişiklik hemen yansır. Yani sadece kodu yaz, tarayıcıyı yenile, tekrar et – bu kadar basit! Birleşik Yapılandırma (Unified Config) sayesinde, geleneksel sistemlerdeki gibi onlarca farklı konfigürasyon dosyası ve formatı yerine, tek bir yapılandırma dosyası ile tüm eklentiler (extensions) yönetilebilir. Bu, büyük kolaylık sağlar. Opinionated Design (Yorumlu Tasarım Yaklaşımı) ile Quarkus, bir özelliğin en iyi nasıl kullanılacağına dair size yol gösterir. Gereksiz esneklikten ziyade, en doğru ve verimli yolu sunarak geliştiriciyi yönlendirir. “Bunu böyle yapman hem daha doğru hem daha kolay” der gibi düşünün. Geliştirici Arayüzü (Dev UI) ile uygulamanızın uzantılarını görselleştirebilir, yapılandırabilir, log’lara erişebilir ve test bileşenlerine kolayca ulaşabilirsiniz. Tüm bunlar tarayıcı üzerinden görsel olarak yönetilebilir. Geliştirici Servisleri (Dev Services), veritabanı ya da kimlik doğrulama sunucuları gibi yardımcı servisleri otomatik olarak ayağa kaldırır ve uygulamanıza entegre eder. Yani dış sistemleri bağlamak için fazladan bir şey yapmanıza gerek kalmaz. Sürekli Test (Continuous Testing) özelliği sayesinde, kodda yaptığınız değişiklikler arka planda test edilir ve size anında geri bildirim sunulur. Hataları anında görmek, geliştirme kalitesini ve hızını ciddi biçimde artırır. Komut Satırı Arayüzü (CLI) ile Quarkus projeleri oluşturabilir, eklentileri yönetebilir ve temel geliştirme ya da derleme komutlarını hızlıca çalıştırabilirsiniz. Bu da konsoldan çalışan geliştiriciler için büyük bir verimlilik sağlar. Son olarak, Uzaktan Geliştirme (Remote Development) özelliğiyle, geliştirme modunu uzak bir sunucuda çalıştırabilir, kendi bilgisayarınızdaki dosya değişikliklerinin anında bu konteyner ortamda etkili olmasını sağlayabilirsiniz. Özellikle bulut tabanlı geliştirme senaryoları için büyük kolaylık sunar.

Quarkus ile Kubernetes’in birleşimi, ölçeklenebilir, hızlı ve hafif uygulamalar oluşturmak için ideal bir ortam sunar. Quarkus, sunduğu araçlar (tooling), hazır entegrasyonlar, uygulama servisleri ve daha fazlasıyla geliştirici verimliliğini önemli ölçüde artırır.
Quarkus Neden Kubernetes-Yerel (Kubernetes-Native)?
Tek Adımda Dağıtım (Single-step Deployments): Quarkus, mikroservis uygulamalarının Kubernetes’e kolayca dağıtılmasını sağlar. Kubernetes’in karmaşık yapısını öğrenmeden bile bu işlemi gerçekleştirmek mümkündür. Quarkus’un Kubernetes uzantıları sayesinde sadece minimum düzeyde konfigürasyon girerek uygulamanızı doğrudan dağıtabilirsiniz. Örneğin, Jib, Docker, veya Source-to-Image (S2i) gibi araçlarla otomatik dağıtım yapılabilir. Ayrıca Kubernetes içindeki DeploymentConfig nesneleri oluşturularak kodda yapılan değişikliklerin otomatik olarak yeniden dağıtımı (redeploy) sağlanabilir. Sunucusuz (Serverless) Ortamlar için Hazır: Quarkus, AWS Lambda, Azure Functions, Google Cloud Functions ve Knative gibi platformlara da destek sunar. Uygulamanın hızlı başlaması (fast startup) sayesinde sunucusuz ortamlarda oldukça verimli çalışır. İzleme (Tracing) ve Hata Ayıklama (Debugging): Quarkus, dağıtık mikroservis mimarileri üzerinde çalışan uygulamaların Kubernetes ortamında kolayca izlenebilmesi ve debug yapılabilmesi için araçlar sağlar. Özellikle OpenTelemetry entegrasyonu sayesinde, geliştiriciler uygulamalarına dağıtık izleme (distributed tracing) ekleyebilir. Bu da sistemde hataların veya yavaşlıkların tam olarak nerede ve neden oluştuğunu anlamaya yardımcı olur. Uygulama Sağlığı (Health) ve Ölçümler (Metrics): Quarkus, MicroProfile Health standardına uygun olarak geliştirilen SmallRye Health modülünü kullanır. Bu sayede uygulama Kubernetes’e “ben sağlıklıyım” ya da “yeniden başlatılmalıyım” gibi sağlık durum bilgilerini iletebilir. Bu, otomatik işlem ve yönetişim süreçleri için kritiktir. Ayrıca, Micrometer adlı metrik kütüphanesi sayesinde Quarkus, JVM tabanlı uygulamalardan performans ve sistem metrikleri toplayabilir. Bu kütüphane Prometheus, Grafana gibi popüler izleme sistemleriyle sorunsuz çalışır ve üretici bağımlılığı (vendor lock-in) yaratmaz. Uygulama Yapılandırması (Configuration): Quarkus, Kubernetes üzerinde yapılandırma yönetimini basitleştirir. Geliştiriciler, ConfigMaps ve Secrets gibi Kubernetes bileşenlerini doğrudan yapılandırma kaynağı olarak kullanabilir. Üstelik bunu yapmak için bu dosyaları Pod içine mount etmeye veya Deployment tanımlarını değiştirmeye gerek yoktur. Bu sayede yapılandırma yönetimi hem daha güvenli hem de sade hale gelir. Uzaktan Geliştirme (Remote Development): Quarkus, geliştiricilerin uygulamalarını doğrudan çalıştıkları Kubernetes ortamında yazıp test etmelerine olanak tanır. Canlı kodlama (live coding) desteğiyle, geliştiricinin kendi bilgisayarında yaptığı değişiklikler anında Kubernetes kümesinde çalışan uygulamada yansır. Bu da hem zaman kazandırır hem de gerçek ortama daha yakın test imkânı sunar.
Kolay Öğrenme, Tanıdık Standartlar: Quarkus’un amacı, sizi saatlerce yeni teknolojiler öğrenmeye zorlamak değil. Bunun yerine, Quarkus’un geliştirme modeli; zaten sektörde kendini kanıtlamış ve yaygın olarak kullanılan standartların üzerine kuruludur. Bu standartlar arasında hem resmi Java standartları hem de belirli alanlarda lider hale gelmiş açık kaynak projeler bulunur. Örneğin:
Eclipse MicroProfile: Bulut tabanlı Java uygulamaları için geliştirilen mikroservis odaklı standartlar topluluğu, Eclipse Vert.x: Reaktif (reactive) uygulamalar geliştirmek için kullanılan modern, olay tabanlı framework.

Tanıdık Anotasyonlar ve Bileşenler ile Hızlı Geliştirme: Quarkus, geliştiricilerin hali hazırda bildiği teknolojilere dayalıdır:
CDI (Contexts and Dependency Injection) ile bağımlılıkları yönetin,
JAX-RS anotasyonları ile REST API uç noktalarını tanımlayın,
JPA anotasyonlarıyla kalıcı veri sınıflarınızı (entity) haritalayın,
JTA ile işlemsel (transactional) sınırlamaları belirleyin,
MicroProfile ile uygulamanızın yapılandırmasını ve gözlemini (monitoring) yönetin,
Vert.x, Apache Camel gibi popüler framework’lerle entegrasyon sağlayın.
Bu yapı sayesinde hem yeni başlayanlar hem de deneyimli Java geliştiricileri, ek öğrenme yükü olmadan hızlıca uygulama geliştirmeye başlayabilir.

Standartların Ötesinde, İnovasyonun İçindeyiz: Quarkus yalnızca mevcut standartları pasif olarak kullanan bir platform değil. Aynı zamanda:
Kullandığı teknolojileri daha da ileriye taşıma amacı güder,
Katkı sağladığı açık kaynak projelere geri bildirim ve geliştirme desteği sunar,
Sınırları zorlayarak, geliştiricilere standartların ötesinde yeni imkânlar sunar.

Quarkus 3.20 (Güncel LTS Sürümü) ile Gelen Standartlar
Jakarta EE Standartları
Jakarta Core 10
CDI 4.1 (Lite) – Bağımlılık enjeksiyonu için
Bean Validation 3.0 – Nesne doğrulama
Persistence 3.1 – Kalıcı veri yönetimi (JPA)
Transactions 2.0 – İşlem (transaction) yönetimi
RESTful Web Services 3.1 – REST API oluşturma
JSON Processing & Binding 2.1 – JSON veri işleme
Batch 2.1 – Toplu iş süreçleri

MicroProfile Spesifikasyonları
Config 3.1 – Dışsal yapılandırmalar
JWT RBAC 2.1 – Kimlik doğrulama & rol tabanlı erişim
Health 4.0 – Uygulama sağlık kontrolü
Fault Tolerance 4.1 – Hatalara dayanıklılık (circuit breaker vb.)
OpenAPI 4.0 – API dokümantasyonu
REST Client 4.0 – HTTP istemci entegrasyonu
Telemetry 2.0 – İzleme ve ölçümleme
Context Propagation 1.3 – Bağlam aktarımı
Reactive Streams & Messaging 3.0 – Reaktif uygulama destekleri
GraphQL 2.0 – Alternatif veri sorgu dili
Long Running Actions 2.0 – Uzun süreli işlemler desteği

OpenTelemetry Entegrasyonları
Tüm bileşenler sürüm 1.39:
Trace – Dağıtık izleme
Context – Bağlam taşıma
Baggage – İzleme bağlamına ek veri aktarımı
Resource – Kaynak meta verileri
Metrics – Metrik veriler
Logs – Uygulama log’ları

Quarkus, modern yazılım dünyasının ihtiyaçlarına göre tasarlanmış, hızlı başlatılan, düşük bellek tüketen, Kubernetes-yerel bir Java framework’üdür. Monolitik uygulamalardan mikroservislere, sunucusuz fonksiyonlardan yapay zekâ destekli sistemlere kadar her mimariye uyum sağlar. HTTP servisleri, olay tabanlı sistemler, reaktif uygulamalar ve AI gibi çağdaş teknolojilere ilk sınıf destek sunar. Geliştiricilere hem klasik Java standartlarıyla (CDI, JAX-RS, JPA) hem de modern yaklaşımlarla (Reactive, Funqy, OpenTelemetry) kolay ve verimli bir geliştirme deneyimi sunar. Quarkus, sade kod yapısı, canlı kodlama, gelişmiş entegrasyon kabiliyetleri ve reaktif çekirdeğiyle yüksek performanslı, ölçeklenebilir ve geleceğe hazır uygulamalar geliştirmenizi sağlar.
Şimdi birlikte basit bir test yapalım. Oracle Cloud üzerinde çalışan Rock Linux 9.5 sistemimiz üzerinde çalışacağız.
[rocky@instance-20241019-1038 ~]$ uname -a
Linux instance-20241019-1038 5.14.0-503.14.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 15 12:04:32 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
[rocky@instance-20241019-1038 ~]$
Sistemimize Java yükleyeceğiz.
[rocky@instance-20241019-1038 ~]$ sudo dnf install java-17-openjdk-devel -y
Last metadata expiration check: 0:00:45 ago on Sun May 25 15:37:24 2025.
Dependencies resolved.

Complete!
[rocky@instance-20241019-1038 ~]$ sudo java -version
openjdk version “17.0.15” 2025-04-15 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.15.0.6-1) (build 17.0.15+6-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.15.0.6-1) (build 17.0.15+6-LTS, mixed mode, sharing)
[rocky@instance-20241019-1038 ~]$

Quarkus, Java ile yazılmış bir framework’tür. Uygulamayı çalıştırmak için sistemde JDK (Java Development Kit) kurulu olmalıdır. Quarkus için en iyi uyumluluk sağlayan sürüm şu anda JDK 17’dir.
Quarkus projeleri Maven adlı araç ile oluşturulur, bağımlılıkları yönetilir ve derlenir. Sistemimize Maven 3.9.6 kuracağız.

[rocky@instance-20241019-1038 ~]$ cd /opt
sudo curl -O https://downloads.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9189k 100 9189k 0 0 52.1M 0 –:–:– –:–:– –:–:– 52.1M
[rocky@instance-20241019-1038 opt]$ sudo tar -xzvf apache-maven-3.9.6-bin.tar.gz
apache-maven-3.9.6/README.txt

[rocky@instance-20241019-1038 opt]$ sudo ln -s /opt/apache-maven-3.9.6 /opt/maven
[rocky@instance-20241019-1038 opt]$ sudo tee /etc/profile.d/maven.sh > /dev/null << ‘EOF’
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
EOF
[rocky@instance-20241019-1038 opt]$ sudo chmod +x /etc/profile.d/maven.sh
source /etc/profile.d/maven.sh
[rocky@instance-20241019-1038 opt]$ mvn -version
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /opt/maven
Java version: 17.0.15, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-17-openjdk-17.0.15.0.6-2.el9.x86_64
Default locale: en, platform encoding: UTF-8
OS name: “linux”, version: “5.14.0-503.14.1.el9_5.x86_64”, arch: “amd64”, family: “unix”
[rocky@instance-20241019-1038 opt]$
Quarkus, klasik anlamda sisteminize kurulacak bir program değildir (örneğin apt install quarkus gibi bir şey yoktur). Bunun yerine: Quarkus projeleri, Maven aracılığıyla oluşturulur ve çalıştırılır.
Quarkus’un ihtiyaç duyduğu tüm kütüphaneler, Maven tarafından otomatik olarak indirilir ve proje dizini içinde tutulur. Kurulum sonrası aşağıda olanları gördük.
[rocky@instance-20241019-1038 ~]$ whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz
[rocky@instance-20241019-1038 opt]$ whereis mvn
mvn: /opt/apache-maven-3.9.6/bin/mvn
[rocky@instance-20241019-1038 opt]$

Oracle Cloud üzerinde çalışan Rocky Linux 9.5 sistemimizde, modern Java uygulamaları geliştirmemizi sağlayan Quarkus’u test etmek için ilk adım olarak gerekli çalışma ortamını hazırladık. Quarkus, Java tabanlı bir framework olduğu için öncelikle sistemimize OpenJDK 17 sürümünü kurduk. Bu sürüm, Quarkus’un önerdiği ve en iyi uyumluluğu sağladığı JDK versiyonudur. Ardından, Quarkus projelerini oluşturmak ve bağımlılıklarını yönetmek için gerekli olan Maven aracını sistemimize ekledik. Oracle Linux’un varsayılan paket yöneticisi ile gelen Maven sürümü (3.6.3) Quarkus’un minimum sürüm gereksinimi olan 3.8.2’nin altında olduğu için, güncel versiyon olan Maven 3.9.6’yı manuel olarak /opt dizinine indirip kurduk. Çevresel değişkenleri /etc/profile.d/maven.sh dosyası aracılığıyla tanımladık ve terminale yansıttık. Bu işlemlerin ardından mvn -version komutu ile Maven’in doğru kurulduğunu, java -version komutu ile de JDK’nin sistemde aktif olduğunu doğruladık. Ek olarak whereis java ve whereis mvn komutları ile hem Java’nın hem de Maven’in sistemde nerelere kurulduğunu inceledik. Tüm bu adımların sonunda, Quarkus projesi oluşturmaya hazır, güncel ve sağlam bir Java geliştirme ortamına sahip olduk.

Quarkus Projesi Oluşturma (hello-quarkus):
[rocky@instance-20241019-1038 ~]$ mvn io.quarkus.platform:quarkus-maven-plugin:3.2.5.Final:create \
-DprojectGroupId=org.example \
-DprojectArtifactId=hello-quarkus \
-DclassName=”org.example.GreetingResource” \
-Dpath=”/hello”
[INFO] Scanning for projects…
[INFO]
[INFO] ——————< org.apache.maven:standalone-pom >——————-
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ——————————–[ pom ]———————————
[INFO]
[INFO] — quarkus:3.2.5.Final:create (default-cli) @ standalone-pom —
[INFO] Looking for the newly published extensions in registry.quarkus.io
[INFO] ———–
[INFO]
applying codestarts…
[INFO] java
maven
quarkus
config-properties
dockerfiles
maven-wrapper
resteasy-reactive-codestart
[INFO]
———–
[SUCCESS] ✅ quarkus project has been successfully generated in:
–> /home/rocky/hello-quarkus
———–
[INFO]
[INFO] ========================================================================================
[INFO] Your new application has been created in /home/rocky/hello-quarkus
[INFO] Navigate into this directory and launch your application with mvn quarkus:dev
[INFO] Your application will be accessible on http://localhost:8080
[INFO] ========================================================================================
[INFO]
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 10.028 s
[INFO] Finished at: 2025-05-25T16:02:21Z
[INFO] ————————————————————————
[rocky@instance-20241019-1038 ~]$

Quarkus projemizi oluşturmak için Maven’in Quarkus eklentisini kullanarak bir proje iskeleti oluşturduk. Bu işlem sırasında, Maven aracılığıyla quarkus-maven-plugin devreye girerek, hello-quarkus adlı bir klasör içerisinde çalışmaya hazır bir Quarkus uygulama yapısı oluşturdu. Proje, REST endpoint’leri oluşturabileceğimiz bir Java sınıfı (GreetingResource.java) ile birlikte geldi ve bu sınıf varsayılan olarak /hello yoluna yanıt verecek şekilde yapılandırıldı. Aynı zamanda Maven Wrapper dosyaları, yapılandırma dosyaları (application.properties) ve Dockerfile gibi yardımcı bileşenler de otomatik olarak projeye dahil edildi. Komut çalıştırıldığında Quarkus’un gerekli eklentileri internet üzerinden indirildi ve proje dizini içerisine yerleştirildi. Bu işlem sonunda terminalde “BUILD SUCCESS” ve “project has been successfully generated” mesajlarıyla birlikte uygulamanın /home/rocky/hello-quarkus dizininde hazır olduğu bilgisi verildi. Uygulama artık mvn quarkus:dev komutuyla doğrudan çalıştırılabilir duruma geldi.

[rocky@instance-20241019-1038 ~]$ pwd
/home/rocky
[rocky@instance-20241019-1038 ~]$ ls -ltra
total 44
-rw-r–r–. 1 rocky rocky 492 Jan 23 2023 .bashrc
-rw-r–r–. 1 rocky rocky 141 Jan 23 2023 .bash_profile
-rw-r–r–. 1 rocky rocky 18 Jan 23 2023 .bash_logout
drwx——. 2 rocky rocky 29 Oct 19 2024 .ssh
drwxr-xr-x. 9 root root 95 Nov 3 2024 ..
-rw-r–r–. 1 root root 295 Dec 21 13:21 block_sarav_access.te
-rw-r–r–. 1 root root 999 Dec 21 13:22 block_sarav_access.mod
-rw-r–r–. 1 root root 1015 Dec 21 13:22 block_sarav_access.pp
drwxr-xr-x. 3 rocky rocky 17 Mar 15 14:11 .cache
drwx——. 4 rocky rocky 28 Mar 15 14:12 .local
-rw-r–r–. 1 rocky rocky 1419 Mar 15 15:44 kafka_web_consumer.py
-rw-r–r–. 1 rocky rocky 816 Mar 15 15:50 flask.log
-rw——-. 1 rocky rocky 4239 Mar 15 16:24 .bash_history
drwxr-xr-x. 3 rocky rocky 24 May 25 15:52 .m2
drwx——. 7 rocky rocky 4096 May 25 16:02 .
drwxr-xr-x. 4 rocky rocky 128 May 25 16:02 hello-quarkus
[rocky@instance-20241019-1038 ~]$
Quarkus projesini oluşturduktan sonra, ev dizinimizde (/home/rocky) hello-quarkus adında yeni bir klasör oluştu. Bu klasör, Maven ve Quarkus tarafından otomatik olarak yapılandırılan bir Java projesi iskeletini içerir. ls -ltra komutu ile bu klasörün varlığını ve oluşturulma zamanını doğrulayabiliriz. Ayrıca .m2 klasörü de oluşmuş durumda; bu klasör Maven tarafından indirilen bağımlılıkların (JAR dosyalarının) yerel sistemde önbelleklenmesi için kullanılır. Kullanıcının ~/.m2/repository dizini altında, Quarkus’un ihtiyaç duyduğu kütüphaneler tutulur. Böylece aynı bağımlılıklar başka bir projede tekrar kullanılmak istendiğinde, internetten yeniden indirilmesine gerek kalmaz.
hello-quarkus klasörü, projenin asıl kaynak dosyalarını içerir. Bu dizin içerisine girdiğimizde src/main/java altında Java kaynak kodları, src/main/resources altında yapılandırma dosyaları (örneğin application.properties) bulunur. Ayrıca kök dizinde pom.xml adlı bir dosya yer alır; bu dosya Maven yapılandırmasını, proje bağımlılıklarını ve eklenti tanımlarını içerir. mvnw ve mvnw.cmd dosyaları ise Maven Wrapper’dır; sistemde Maven yüklü olmasa bile projeyi çalıştırmak için kullanılır. Bu yapı sayesinde, proje derlenmeye ve çalıştırılmaya hazır, tam bir Maven + Quarkus projesi haline gelmiştir.
[rocky@instance-20241019-1038 hello-quarkus]$ tree -L 2
.
├── README.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
└── test
3 directories, 4 files
[rocky@instance-20241019-1038 hello-quarkus]$

“tree -L 2” çıktısını da şöyle özetleyebilirim.
Proje kök dizininde, Quarkus ve Maven ile ilgili temel dosyalar yer alır. README.md projenin genel bilgilerini içerir. mvnw ve mvnw.cmd dosyaları ise Maven Wrapper’dır; sistemde Maven kurulu olmasa bile bu dosyalar aracılığıyla proje derlenip çalıştırılabilir. pom.xml dosyası Maven yapılandırma dosyasıdır ve projeye ait bağımlılıkları, eklentileri ve yapı ayarlarını tanımlar. src klasörü ise kaynak kodların yer aldığı ana dizindir. Bunun altında main klasörü uygulama kodlarını, test klasörü ise test senaryolarını içerir. Bu temel yapı, Quarkus’un önerdiği sade ama genişletilebilir proje mimarisinin iskeletini oluşturur. Proje bu haliyle çalıştırılmaya, geliştirme yapmaya ve genişletilmeye hazır durumdadır.

“./mvnw quarkus:dev” bu komutla Quarkus uygulamasını geliştirme modunda başlattık. Uzun bir çıktı sonrası, çıktının son kısmı aşağıdaki gibi.

Listening for transport dt_socket at address: 5005
__ ____ __ _____ ___ __ ____ ______
–/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ –\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 2025-05-25 16:20:11,380 INFO [io.quarkus] (Quarkus Main Thread) hello-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.22.3) started in 3.532s. Listening on: http://localhost:8080 2025-05-25 16:20:11,385 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. 2025-05-25 16:20:11,386 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, rest, smallrye-context-propagation, vertx] — Tests paused Press [e] to edit command line args (currently ”), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>

[rocky@instance-20241019-1038 ~]$ curl http://localhost:8080/hello
Hello from Quarkus REST[rocky@instance-20241019-1038 ~]$

curl http://localhost:8080/hello komutuna gelen “Hello from Quarkus REST” yanıtı, REST endpoint’inin düzgün şekilde çalıştığını ve Quarkus uygulamanın istenen portta aktif olduğunu gösteriyor.

Dosyamıza aşağıdaki şekilde bir ekleme yaptım.

[rocky@instance-20241019-1038 hello-quarkus]$ more src/main/java/org/example/GreetingResource.java
package org.example;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path(“/hello”)
public class GreetingResource {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return “Hello from Quarkus REST”;
}

@GET
@Path(“/greet/{name}”)
@Produces(MediaType.TEXT_PLAIN)
public String greet(@PathParam(“name”) String name) {
return “Hello, ” + name + ” from Quarkus!”;
}
}
[rocky@instance-20241019-1038 hello-quarkus]$

Quarkus projemizi çalıştırdıktan sonra, canlı kodlama (Live Coding) özelliğini test etmek amacıyla mevcut GreetingResource.java dosyasına yeni bir REST endpoint ekledik. Bu sınıf, src/main/java/org/example/GreetingResource.java konumunda yer alıyor ve varsayılan olarak /hello adresinden erişilebilen basit bir metin döndürüyordu. Bu yapıya ek olarak, @Path(“/greet/{name}”) anotasyonuyla yeni bir endpoint tanımladık. Böylece kullanıcı tarayıcı ya da terminal üzerinden /hello/greet/Asiye gibi bir istek gönderdiğinde, parametre olarak verilen isme özel kişiselleştirilmiş bir yanıt üreten bir yapı oluşturduk. @PathParam(“name”) ile URL’den gelen veriyi alıp String name parametresine aktardık ve çıktıda “Hello, Asiye from Quarkus!” şeklinde dinamik bir cevap sunduk. Bu işlem sırasında uygulamayı durdurmamıza gerek kalmadı; Quarkus’un dev modda sunduğu canlı kodlama özelliği sayesinde yaptığımız değişiklikler anında devreye girdi ve terminal üzerinden curl komutu ile test edildiğinde hemen doğru yanıtlar alındı. Bu da Quarkus’un geliştirici deneyimini ne kadar hızlandırdığını ve kolaylaştırdığını açıkça göstermektedir.

[rocky@instance-20241019-1038 ~]$ curl http://localhost:8080/hello
Hello from Quarkus REST[rocky@instance-20241019-1038 ~]$ curl http://localhost:8080/hello
Hello from Quarkus REST[rocky@instcurl http://localhost:8080/hello/greet/Asiye:8080/hello/greet/Asiye
Hello, Asiye from Quarkus![rocky@instance-20241019-1038 ~]$

Sonuç olarak, Quarkus; Java dünyasında konteynerleşme, mikroservis mimarileri ve Kubernetes gibi modern yaklaşımlar doğrultusunda geliştiricilere güçlü ve pratik bir alternatif sunuyor. Bu yazıda, Oracle Cloud üzerinde çalışan Rocky Linux 9.5 sistemimizde sıfırdan bir Quarkus ortamı hazırladık, JDK ve Maven kurulumlarını gerçekleştirdik, ilk Quarkus projemizi oluşturduk ve canlı kodlama (Live Coding) özelliğini kullanarak bir REST endpoint geliştirdik. Geliştirme süreci boyunca hiçbir yeniden başlatma yapmadan kod değişikliklerinin anında devreye alınabildiğini test ettik ve doğruladık. Bu deneyim, Quarkus’un sadece hızlı ve düşük kaynak tüketimli uygulamalar üretmekle kalmayıp, aynı zamanda geliştirici verimliliğini de en üst seviyeye taşıyan bir platform olduğunu açıkça ortaya koydu. Quarkus; sade yapısı, modern mimarilere uyumu ve canlı geliştirme olanaklarıyla hem yeni başlayanlar hem de kurumsal projelerde yer alan profesyonel geliştiriciler için ideal bir tercih olmaya adaydır.

Sarav Asiye Yiğit * 25 Mayıs 2025
Kaynakça:
https://www.redhat.com/en/engage/supersonic-java-quarkus-s-201910090233?sc_cid=7013a0000026OmyAAE&gad_source=1&gad_campaignid=22026187851&gbraid=0AAAAADsbVMQMjEXt3xZ9xxyGv93uoNUn8&gclid=Cj0KCQjw_8rBBhCFARIsAJrc9yC4tWcmTnyGbMoDvo08CH1TNKcA7OL2Hha3oiqqJdnSiM8bRr3fugQaAjdeEALw_wcB&gclsrc=aw.ds
https://quarkus.io/about/
https://quarkus.io/developer-joy/
https://quarkus.io/kubernetes-native/
https://quarkus.io/standards/
https://quarkus.io/versatility/