Portfolyöye dön

BANKACILIK OTOMASYONU / MİKROSERVİS MİMARİSİ

Bank-Demo

Java, Spring Boot, PostgreSQL ve Next.js ile geliştirdiğim Bank-Demo; hesap yönetimi, para transferi, fatura ve kurumsal maaş işlemlerini kapsayan bir bankacılık uygulamasıdır. Monolitik yapıdan mikroservislere taşıdığım proje, kimlik ve erişim yönetimi, senkron ve asenkron servis iletişimi, gözlemlenebilirlik ve konteyner tabanlı çalışma ortamlarını bir araya getirir.

KAPSAM
Core Banking · Kimlik ve Erişim · Servis İletişimi · Gözlemlenebilirlik

PROJE HİKÂYESİ

Bankacılık İşlevlerinden Mimari Evrime

Bank-Demo'ya staj görevim kapsamında başladım. Java ve Spring Boot ile bankacılık iş kurallarını ve REST API'lerini, PostgreSQL ile veri modelini, Next.js ile müşteri ve yönetim ekranlarını geliştirdim. Hesap yönetimi, para yatırma ve transfer, fatura talimatları, çalışan yönetimi ve toplu maaş ödemeleri uygulamanın işlevsel temelini oluşturdu.

Monolitik uygulamadaki Core Banking, kimlik ve kullanıcı yönetimi, fatura, kurumsal işlemler, kur bilgisi ve bildirim sorumluluklarını ayrı servislere taşıdım. Servisler kendi verilerini yönetirken API Gateway istekleri yönlendirir; OpenFeign ve Eureka senkron iletişimi, RabbitMQ asenkron bildirimleri, Redis kur önbelleğini ve kayıt isteklerindeki hız sınırını sağlar.

Kimlik ve erişim yönetimini Keycloak ile kurdum; oturum ve servis yetkilendirmesini sonraki çalışmalarımda geliştirdim. Docker Compose ve K3s ortamlarında ELK, Prometheus ve Grafana ile log ve metrik takibini yapılandırdım. Jenkins'te doğrulanan koddan seçici imaj yayını hazırladım; K3s dağıtımı ayrı manifestlerle yürütülür.

SİSTEM YETKİNLİKLERİ

Bankacılık ve Operasyon Akışları

Bireysel müşteriler, kurumsal kullanıcılar ve yöneticiler için hesap, ödeme, maaş ve yönetim işlemlerini kapsayan temel bankacılık akışları.

  1. Bireysel Bankacılık İşlemleri

    Müşteriler hesaplarını yönetebilir, para yatırabilir, transfer yapabilir ve hesap hareketlerini görüntüleyebilir.

    • Hesap Açma / Kapatma
    • Para Yatırma
    • Para Transferi
    • Hesap Hareketleri
  2. Fatura ve Kur Bilgisi

    Fatura talimatları oluşturulabilir ve yönetilebilir; güncel kur bilgisi ayrı servis üzerinden sunulur.

    • Fatura Talimatı
    • Talimat Listeleme
    • Talimat İptali
    • Kur Görüntüleme
  3. Kurumsal Operasyonlar

    Kurumsal kullanıcılar çalışan kayıtlarını ve şirket hesaplarını yönetebilir, toplu maaş ödemesi ile otomatik ödeme ayarlarını yürütebilir.

    • Çalışan Yönetimi
    • Toplu Maaş
    • Şirket Transferi
    • Otomatik Ödeme
  4. Kimlik Doğrulama ve Rol Tabanlı Erişim

    Bireysel müşteri, kurumsal yönetici ve yönetici rollerinin erişim alanları; kimlik doğrulama ve yetkilendirme akışlarıyla ayrılır.

    • Kayıt ve Oturum Açma
    • Profil Yönetimi
    • Rol Tabanlı Ekranlar
    • Erişim Kontrolü
  5. Yönetim ve İşlem Takibi

    Yönetici tarafında müşteri ve hesap yönetimi, işlem geçmişi ile işlem onay ve ret akışları tek uygulama üzerinden takip edilir.

    • Müşteri Yönetimi
    • Hesap Yönetimi
    • İşlem Geçmişi
    • İşlem Onayı / Reddi

SİSTEM MİMARİSİ

Bank-Demo Sistem Mimarisi

İsteklerin web arayüzünden API Gateway’e, oradan iş servislerine ve veri katmanına nasıl yönlendirildiğini; kimlik doğrulama ve yetkilendirme, olay iletimi ve gözlemlenebilirlik bileşenlerinin sisteme nerede bağlandığını gösterir.

UÇTAN UCA SİSTEM GÖRÜNÜMÜBank-Demo dağıtık sistem mimarisi

İSTEK → KİMLİK DOĞRULAMA → YÖNLENDİRME → SERVİSLER → VERİ → TELEMETRİ

Bank-Demo yüksek seviye sistem mimarisiKullanıcı isteğinin Next.js, API Gateway, Keycloak, mikroservisler, veri kaynakları, RabbitMQ ve ELK arasındaki yolculuğu.MİKROSERVİS KATMANIKullanıcıNext.jsArayüz · BFFAPI GatewayJWT Doğrulama · YönlendirmeKayıt İçin Rate LimitingKeycloakOAuth2 / OIDCAuthKimlik ve ProfilCore BankingHesaplar ve İşlemlerCorporateÇalışanlar ve MaaşBillFatura TalimatlarıCurrencyDöviz KurlarıPostgreSQLKimlik VerisiPostgreSQLCore Banking VerisiPostgreSQLKurumsal VeriPostgreSQLFatura VerisiRedisKur Önbelleğiopen.er-api.comHarici Kur API'siRedisKayıt İstek SınırıRabbitMQİş OlaylarıNotificationOlay TüketicisiELKMerkezi Servis LoglarıOIDC · PKCEJWT DoğrulamaAsenkron OlaylarServis Logları

Diyagramın tamamını görmek için yatay kaydırın.

DETAY AKIŞLARI

Sistem Akışları Nasıl Çalışıyor?

Ana mimarideki servis iletişimi, olay iletimi, kimlik doğrulama ve yetkilendirme ile dağıtım ve gözlemlenebilirlik akışlarını ayrıntılı inceleyin.

01
Senkron Servis İletişimi

API rotaları, OpenFeign çağrıları ve servis keşfi

Servisler arası senkron iletişim akışıÖRNEK API GATEWAY ROTALARIAPI GatewayRota EşlemeJWT DoğrulamaAuth/api/v1/auth/**Core Banking/api/v1/**Catch-all Backend RotasıCorporate/api/v1/companies/employees/**Bill/api/v1/bills/**Currency/api/v1/currencies/**ÖNE ÇIKAN SERVİS ÇAĞRILARICorporateToplu Maaş İşlemleriBillFatura Borcu TahsilatıCore BankingHesaplar · TransferlerCurrencyCanlı Döviz Kurlarıopen.er-api.comHarici Kur SağlayıcısıIBAN Kontrolü · MaaşFeign · Fatura TahsilatıFeign · KurlarREST · Güncel KurlarGateway rotaları servis DNS adlarına yönlenir; OpenFeign çağrıları Eureka üzerinden çözümlenir.

GELİŞİM SÜRECİ

Çalışan Bankacılık Uygulamasından Dağıtık Sisteme

  1. 01

    Monolitik Temel

    Staj kapsamında Java, Spring Boot, PostgreSQL ve Next.js ile hesap, transfer, fatura, kurumsal bankacılık ve yönetim akışlarını tek uygulama sınırında geliştirdim.

  2. 02

    Mikroservis Mimarisine Geçiş

    Core Banking, kimlik, fatura, kurumsal işlemler, kur ve bildirim sorumluluklarını ayrı servislere taşıdım. API Gateway, OpenFeign, Eureka ve RabbitMQ ile servislerin birlikte çalışmasını sağladım.

  3. 03

    Güvenlik ve İmaj Yayını

    Keycloak ve BFF oturum yönetimini, servislerde JWT ve scope kontrollerini geliştirdim. Jenkins'te doğrulanmış commit'ten seçici imaj derleme ve yayın akışı kurdum.

  4. 04

    K3s Ortamının Yenilenmesi

    K3s manifestlerini Ingress, sağlık kontrolleri ve kaynak tanımlarıyla yeniledim. PostgreSQL ve Grafana için Longhorn üzerinde kalıcı depolama; log ve metrikler için ELK, Prometheus ve Grafana yapılandırdım.

TEKNİK TERCİHLER

Sistem Bileşenleri Hangi İhtiyaçları Karşılıyor?

Bankacılık akışlarını destekleyen güvenlik, servis iletişimi, önbellekleme ve çalışma ortamı tercihlerinin hangi ihtiyacı karşıladığı.

Oturum ve Kimlik Yönetimi

İHTİYAÇKullanıcı oturumlarını yönetmek ve token'ları tarayıcı JavaScript'ine açmadan API isteklerini gerçekleştirmek.

ÇÖZÜMKeycloak ile OIDC Authorization Code ve PKCE akışı kullanılır. Next.js BFF, şifreli HttpOnly ve Secure çerezlerle oturumu yönetir; CSRF ve origin kontrolleri korunan yazma isteklerini denetler.

Servis İletişimi ve Yetkilendirme

İHTİYAÇSenkron servis çağrılarını yönetmek ve her servisin yalnızca gerekli iç API'lere erişmesini sağlamak.

ÇÖZÜMGateway yönlendirmeyi, OpenFeign ve Eureka senkron çağrı ve servis keşfini sağlar. Korunan iş API'lerinde JWT servis tarafından doğrulanır; iç API çağrıları client credentials ve servise özel scope'larla yetkilendirilir.

Asenkron Bildirimler

İHTİYAÇBildirim işlemeyi ana bankacılık isteğinden ayırmak ve yayınlama ile tüketim hatalarını takip edebilmek.

ÇÖZÜMİşlem olayları commit sonrasında yayımlanır; RabbitMQ publisher confirm ve return kontrolleri yayın hatalarını izler. Notification Service, sınırlı yeniden deneme ve hata kuyruğuyla demo bildirimlerini işler.

Önbellekleme ve İstek Sınırlama

İHTİYAÇTekrarlanan kur sorgularında dış API çağrılarını azaltmak ve kayıt endpoint'ine gelen istekleri sınırlamak.

ÇÖZÜMCurrency servisindeki kur görüntüleme sorguları Redis'te önbelleklenir. Gateway'deki kayıt rotası, IP tabanlı Redis rate limiter ile korunur.

CI ve İmaj Yayını

İHTİYAÇKontrollerden geçen koddan izlenebilir imajlar üretmek ve gereksiz imaj derlemelerini azaltmak.

ÇÖZÜMJenkins, frontend ve Java kontrollerinden geçen commit'ten rootless BuildKit ile girdileri değişen imajları derleyip Docker Hub'a yayımlar. Değişmeyen imajların önceki referanslarıyla tam sürüm manifesti oluşturur.

K3s ve Gözlemlenebilirlik

İHTİYAÇServisleri manifestlerle çalıştırmak; hazır olma durumunu, kalıcı veriyi, logları ve metrikleri yönetmek.

ÇÖZÜMNGINX Ingress trafiği yönlendirir; probe'lar servislerin hazır olma durumunu bildirir. PostgreSQL ve Grafana verileri Longhorn PVC'lerinde tutulur; ELK, Prometheus ve Grafana log ve metrik görünürlüğü sağlar.

CI VE İMAJ YAYINI

Commit'ten İmaj Yayınına

Bir değişikliğin PR kontrollerinden main CI'a, ardından doğrulanan commit üzerinden seçici imaj derleme ve Docker Hub yayınına uzanan akışı.

İKİ AŞAMALI JENKINS AKIŞIJenkinsfile → Jenkinsfile.release

GitHub · Jenkins · BuildKit · Docker Hub

Bank-Demo Jenkins doğrulama ve imaj yayını akışıCommit ve push sonrası PR kontrolleri çalışır. Merge sonrası main CI aynı kontrolleri yeniden çalıştırır. Yalnızca başarılı main CI, doğrulanan kaynak SHA'sını yayın işine aktarır. Yayın işi aynı commit'i alır, son başarılı yayına göre imaj girdilerini karşılaştırır ve seçilen imajları rootless BuildKit ile Docker Hub'a yayımlar. Değişmeyen imaj referansları ve digest'leri korunarak dokuz imajlık tam sürüm manifesti oluşturulur. Derlenecek imaj yoksa build ve push atlanır. K3s dağıtımı ayrı bir işlemdir.Commit ve PushFeature BranchGitHub → Pull RequestPR CILint · Typecheck · Build8 Java · Maven clean verifymain'e MergeKod İncelemesimain CIKontroller Yeniden Çalışırsource-provenance.txtCI hatası → Akış durur. Yayın işini yalnızca başarılı main CI tetikler.Yayın İşini DoğrulaCI_RUN_ID · Kaynak SHAAynı Commit'ten Checkoutİmaj Girdilerini KarşılaştırSon Başarılı Yayına Göre8 Java + 1 FrontendDerleme İçinİmaj Seçildi mi?EvetHayırRootless BuildKitYalnız Seçilen İmajlarDockerfile → İmajDocker HubSHA Etiketi · DigestTam Sürüm Manifestirelease-manifest.tsv9 İmaj · Referans ve DigestÖnceki Referansları KoruDeğişmeyen İmajların Digest'leriBuild / Push Atlanır

Diyagramın tamamını görmek için yatay kaydırın.

İlk yayında 9 imaj üretilir. Sonraki yayınlarda değişmeyen imajların referans ve digest'leri korunur; hiç imaj seçilmemişse build ve push tamamen atlanır.

Docker Hub yayını çalışan ortamı güncellemez; K3s sürümü manifestlerin ayrıca uygulanmasıyla değiştirilir.

TEKNOLOJİ HARİTASI

Katmanlara Göre Teknoloji Haritası

UYGULAMA KATMANI
JavaSpring BootNext.js
KİMLİK DOĞRULAMA VE ERİŞİM
KeycloakOAuth2/OIDCAPI Gateway
VERİ VE SERVİS İLETİŞİMİ
PostgreSQLRedisOpenFeignRabbitMQEureka
CI VE İMAJ YAYINI
JenkinsBuildKitDocker Hub
PLATFORM VE GÖZLEMLENEBİLİRLİK
Docker ComposeK3sNGINX IngressLonghornELKPrometheusGrafana