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ı.
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
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
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
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ü
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.
İSTEK → KİMLİK DOĞRULAMA → YÖNLENDİRME → SERVİSLER → VERİ → TELEMETRİ
Diyagramın tamamını görmek için yatay kaydırın.
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.
API rotaları, OpenFeign çağrıları ve servis keşfi
GELİŞİM SÜRECİ
Çalışan Bankacılık Uygulamasından Dağıtık Sisteme
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.
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.
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.
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ışı.
GitHub · Jenkins · BuildKit · Docker Hub
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