Modern web uygulamaları büyüdükçe, kod tabanlarının yönetimi de bir o kadar karmaşık hale geliyor. Arka planda (backend) mikro servislerin sunduğu esneklik ve bağımsızlık, günümüzde ön yüz geliştirme süreçlerine de taşındı. İşte tam bu noktada, büyük ölçekli projelerin kurtarıcısı olan Mikro Ön Uç (Microfrontends) Mimarisi devreye giriyor. Bu mimari, monolitik ön yüz yapılarını parçalayarak ekiplerin daha özgür, hızlı ve birbirinden bağımsız çalışmasını sağlıyor.
Peki, mikro ön uç yaklaşımı tam olarak nedir? Büyük ve karmaşık projelerde bu mimariyi kurarken hangi yöntemleri tercih etmeliyiz ve bizi ne gibi zorluklar bekliyor? Bu rehberde, modern yazılım dünyasının en popüler mimari trendlerinden birini tüm detaylarıyla ele alıyoruz.
Mikro Ön Uç (Microfrontends) Mimarisi Nedir?
Mikro ön uç mimarisi, büyük ve tek parça (monolitik) bir web uygulamasının ön yüzünü, her biri kendi işlevinden sorumlu olan daha küçük, bağımsız ve yönetilebilir mikro uygulamalara bölme yaklaşımıdır. Tıpkı mikro servislerin backend dünyasında yaptığı gibi, bu mimari de frontend dünyasında kod tabanını dikey dilimlere ayırır.
Örneğin, büyük bir e-ticaret platformunu ele alalım. Geleneksel monolitik yapıda tüm web sitesi tek bir React veya Angular projesi olarak geliştirilir. Mikro ön uç mimarisinde ise:
- Ürün detay sayfası bir ekip tarafından,
- Ödeme ve sepet işlemleri başka bir ekip tarafından,
- Kullanıcı profili ve üyelik işlemleri ise tamamen farklı bir ekip tarafından geliştirilir.
- Uzun Derleme ve Dağıtım Süreleri: Kod tabanı büyüdükçe uygulamanın derlenmesi (build) ve canlıya alınması (deploy) saatler sürebilir.
- Teknoloji Bağımlılığı: Projenin başında seçilen bir kütüphane veya framework (örneğin React 16), yıllar sonra güncellenmek istendiğinde tüm sistemin kırılmasına yol açabilir.
- Ekipler Arası Çatışmalar: Onlarca geliştiricinin aynı repo üzerinde çalışması, sürekli olarak kod çakışmalarına (merge conflicts) ve test süreçlerinin tıkanmasına neden olur.
- Hata Dağılımı: Basit bir buton hatası veya CSS çakışması, tüm web sitesinin çökmesine yol açabilir.
- Avantajı: Kurulumu kolaydır, paketler arası tip güvenliği (TypeScript) kolayca sağlanır.
- Dezavantajı: Bir mikro ön uçta yapılan en ufak değişiklik için bile ana uygulamanın tekrar derlenmesi ve dağıtılması gerekir. Bu durum, tam bağımsızlık ilkesine aykırıdır.
- Webpack Module Federation: Webpack 5 ile gelen bu özellik, mikro ön uç dünyasında adeta bir devrim yarattı. Farklı projelerin derlenmiş kodlarını, çalışma zamanında dinamik olarak birbirleriyle paylaşmalarına olanak tanır.
- Single-spa: Farklı framework'lerle (React, Vue, Angular) yazılmış mikro uygulamaları aynı sayfada sorunsuz bir şekilde çalıştırmak için kullanılan güçlü bir framework'tür.
Her ekip kendi mikro uygulamasını istediği teknoloji yığınıyla yazabilir, bağımsız olarak test edebilir ve ana uygulamayı etkilemeden canlıya alabilir. Son kullanıcı ise tüm bu farklı parçaları tek bir bütünsel web sitesi olarak deneyimler.
Monolitik Ön Yüzlerin Yarattığı Sorunlar
Küçük ve orta ölçekli projelerde monolitik yapılar oldukça hızlı sonuç verir. Ancak proje büyüdükçe ve geliştirici sayısı arttıkça şu sorunlar baş göstermeye başlar:
Büyük Projelerde Mikro Ön Uç (Microfrontends) Mimarisi Nasıl Uygulanır?
Mikro ön uç mimarisini hayata geçirmek için tek bir doğru yöntem yoktur. Projenizin ihtiyaçlarına, ekibinizin yetkinliklerine ve performans beklentilerinize göre seçebileceğiniz farklı entegrasyon yöntemleri mevcuttur.
1. Build-Time (Derleme Zamanı) Entegrasyonu
Bu yöntemde, her mikro ön uç bağımsız birer npm paketi olarak geliştirilir. Ana uygulama (App Shell), bu paketleri bağımlılık (dependency) olarak kendi package.json dosyasına ekler ve derleme sırasında tek bir paket haline getirir.
2. Run-Time (Çalışma Zamanı) Entegrasyonu
Günümüzde en çok tercih edilen ve mikro ön uç felsefesine en uygun olan yöntemdir. Mikro uygulamalar çalışma zamanında tarayıcı tarafından yüklenir. Bu yöntemi uygulamak için popüler araçlar kullanılır:
Bir Webpack Module Federation yapılandırması temel olarak şu şekildedir:
// mfe-product/webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
module.exports = {
plugins: [
new ModuleFederationPlugin({
name: "product",
filename: "remoteEntry.js",
exposes: {
"./ProductDetail": "./src/ProductDetail",
},
shared: { react: { singleton: true }, "react-dom": { singleton: true } },
}),
],
};
Bu yapılandırma sayesinde, ürün detay bileşeni bağımsız olarak sunulur ve ana uygulama bu bileşeni tarayıcıda dinamik olarak yükler.
3. Server-Side (Sunucu Tarafı) Entegrasyonu
Bu yöntemde, sunucu gelen isteğe göre farklı mikro ön uçlardan gelen HTML parçalarını birleştirir ve tarayıcıya tek bir sayfa olarak gönderir. Server-Side Rendering (SSR) gerektiren ve SEO odaklı projeler için oldukça idealdir. Bu yaklaşım için Tailor veya Podium gibi araçlar tercih edilebilir.
Mikro Ön Uç Mimarisinde Karşılaşılan Zorluklar
Her mimari yaklaşımda olduğu gibi, mikro ön uçların da getirdiği bazı zorluklar ve ödün verilmesi gereken noktalar vardır:
CustomEvent API'si veya URL parametreleri üzerinden haberleşme tercih edilmelidir.Sonuç
Mikro ön uç mimarisi, özellikle yüzlerce geliştiricinin çalıştığı büyük ölçekli kurumsal projelerde ölçeklenebilirliği, hızı ve ekip bağımsızlığını artıran mükemmel bir çözümdür. Ancak küçük ekipler ve basit projeler için bu mimariyi kurmak, gereksiz bir mühendislik karmaşasına (overengineering) yol açabilir. Projenizin sınırlarını, ekibinizin yapısını ve gelecekteki büyüme hedeflerinizi doğru analiz ederek bu mimariye geçiş kararını vermelisiniz.
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yazın