{"id":33578,"date":"2025-11-04T17:31:59","date_gmt":"2025-11-04T14:31:59","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/"},"modified":"2025-11-04T17:31:59","modified_gmt":"2025-11-04T14:31:59","slug":"mikro-frontendler-angularda-module-federation-ile-pratik-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/","title":{"rendered":"Mikro Frontendler Angular&#8217;da: Module Federation ile Pratik Rehber"},"content":{"rendered":"<p><body><\/p>\n<p>Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik ve esneklik gibi kritik ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabiliyor. Peki, Angular projelerinizde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in daha mod\u00fcler, ba\u011f\u0131ms\u0131z ve verimli bir yakla\u015f\u0131m benimsemek m\u00fcmk\u00fcn m\u00fc? Bu rehber, Angular tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 Mikro Frontend mimarisine ta\u015f\u0131rken, Webpack 5&#8217;in g\u00fcc\u00fc olan Module Federation&#8217;\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.<\/p>\n<p>B\u00fcy\u00fck, karma\u015f\u0131k ve \u00e7ok \u00f6zellikli web uygulamalar\u0131 geli\u015ftiren ekiplerin en s\u0131k kar\u015f\u0131la\u015ft\u0131\u011f\u0131 sorunlardan biri, uygulaman\u0131n b\u00fcy\u00fckl\u00fc\u011f\u00fcyle do\u011fru orant\u0131l\u0131 olarak artan geli\u015ftirme ve bak\u0131m y\u00fck\u00fcd\u00fcr. Geleneksel monolitik bir mimaride, t\u00fcm kullan\u0131c\u0131 aray\u00fcz\u00fc tek bir kod taban\u0131nda bulunur. Bu durum, ba\u015flang\u0131\u00e7ta h\u0131zl\u0131 bir geli\u015ftirme s\u00fcreci sunsa da, projenin kapsam\u0131 geni\u015fledik\u00e7e ciddi zorluklar\u0131 beraberinde getirir. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck bir \u00f6zellik de\u011fi\u015fikli\u011fi bile t\u00fcm uygulaman\u0131n yeniden derlenmesini ve da\u011f\u0131t\u0131lmas\u0131n\u0131 gerektirebilir, bu da test s\u00fcre\u00e7lerini uzat\u0131r ve hatalar\u0131n yay\u0131lma riskini art\u0131r\u0131r. Ayr\u0131ca, farkl\u0131 ekiplerin ayn\u0131 kod taban\u0131 \u00fczerinde e\u015f zamanl\u0131 \u00e7al\u0131\u015fmas\u0131 \u00e7ak\u0131\u015fmalara yol a\u00e7abilir, ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7inden \u00e7\u0131k\u0131lmaz hale getirebilir ve geli\u015ftiricilerin otonomisini s\u0131n\u0131rlar. Tek bir teknoloji y\u0131\u011f\u0131n\u0131na s\u0131k\u0131 s\u0131k\u0131ya ba\u011fl\u0131 kalmak, yeni ve daha verimli teknolojileri denemeyi veya belirli alt sistemler i\u00e7in en uygun arac\u0131 se\u00e7meyi imkans\u0131z hale getirir. \u00d6l\u00e7eklendirme de ayr\u0131 bir derttir; uygulaman\u0131n tamam\u0131n\u0131 \u00f6l\u00e7eklendirmek zorunda kal\u0131rken, asl\u0131nda sadece belirli bir b\u00f6l\u00fcm\u00fcn\u00fcn yo\u011funlu\u011funu kar\u015f\u0131laman\u0131z gerekebilir.<\/p>\n<p>\u0130\u015fte tam bu noktada Mikro Frontendler devreye girer. Mikro Frontend mimarisi, monolitik \u00f6n u\u00e7 uygulamas\u0131n\u0131 dikey olarak, i\u015flevsel alanlara g\u00f6re ayr\u0131lm\u0131\u015f daha k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z birimlere b\u00f6lme yakla\u015f\u0131m\u0131n\u0131 benimser. Her bir &#8220;mikro frontend&#8221;, kendi teknolojisine, geli\u015ftirme s\u00fcrecine ve da\u011f\u0131t\u0131m pipeline&#8217;\u0131na sahip olabilir. Bu, ekiplerin daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alar \u00fczerinde odaklanmas\u0131n\u0131 sa\u011flar, ba\u011f\u0131ms\u0131z olarak geli\u015ftirme yapmalar\u0131na olanak tan\u0131r ve b\u00f6ylece daha h\u0131zl\u0131 yineleme ve da\u011f\u0131t\u0131m yapabilirler. Her bir mikro frontend kendi ba\u015f\u0131na bir \u00fcr\u00fcn gibi davran\u0131r, bu da tak\u0131m otonomisini ve m\u00fclkiyetini art\u0131r\u0131r. Monolitik yap\u0131n\u0131n aksine, bir mikro frontenddeki hata veya g\u00fcncelleme di\u011ferlerini etkilemez. Ayr\u0131ca, farkl\u0131 par\u00e7alar\u0131n farkl\u0131 teknolojilerle (\u00f6rne\u011fin, bir b\u00f6l\u00fcm Angular, di\u011feri React veya Vue ile) geli\u015ftirilmesine olanak tan\u0131yarak teknoloji esnekli\u011fini de art\u0131r\u0131r. Bu esneklik, \u00f6zellikle b\u00fcy\u00fck ve uzun \u00f6m\u00fcrl\u00fc projelerde, zamanla de\u011fi\u015fen teknoloji trendlerine uyum sa\u011flamak a\u00e7\u0131s\u0131ndan hayati \u00f6neme sahiptir. B\u00f6ylece, uygulaman\u0131z\u0131n belirli b\u00f6l\u00fcmlerini, genel yap\u0131y\u0131 bozmadan kademeli olarak modernize edebilirsiniz. Monolitik yap\u0131n\u0131n getirdi\u011fi t\u00fcm bu operasyonel ve geli\u015ftirme zorluklar\u0131, modern ve \u00f6l\u00e7eklenebilir web uygulamalar\u0131 i\u00e7in Mikro Frontendleri cazip bir alternatif haline getirir.<\/p>\n<h2>Mikro Frontend Mimarisi ve Angular Ekosistemi: Neden Bu Kadar Uyumlu?<\/h2>\n<p>Mikro Frontend mimarisi, b\u00fcy\u00fck \u00f6n u\u00e7 uygulamalar\u0131n\u0131 y\u00f6netilebilir, ba\u011f\u0131ms\u0131z par\u00e7alara ay\u0131rarak geli\u015ftirme s\u00fcrecini h\u0131zland\u0131rmay\u0131, tak\u0131mlar aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 azaltmay\u0131 ve teknolojik esnekli\u011fi art\u0131rmay\u0131 hedefler. Temel olarak, bir web uygulamas\u0131n\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc, mikro servislerin arka u\u00e7ta yapt\u0131\u011f\u0131 gibi, dikey olarak b\u00f6ler. Her bir mikro frontend, kendi i\u015f alan\u0131na odaklanan, ba\u011f\u0131ms\u0131z olarak geli\u015ftirilebilen, test edilebilen ve da\u011f\u0131t\u0131labilen bir mini uygulamad\u0131r. Bu yakla\u015f\u0131m\u0131n en b\u00fcy\u00fck faydalar\u0131ndan biri, farkl\u0131 ekiplerin ayn\u0131 anda farkl\u0131 \u00f6zellikler \u00fczerinde \u00e7al\u0131\u015f\u0131rken birbirlerini engellemelerini \u00f6nlemesidir. \u00d6rne\u011fin, bir e-ticaret platformunda &#8220;\u00fcr\u00fcn listeleme&#8221;, &#8220;sepet&#8221; ve &#8220;\u00f6deme&#8221; gibi farkl\u0131 i\u015flevler, ayr\u0131 mikro frontendler olarak ele al\u0131nabilir. Her bir mikro frontend, kendi ekibi taraf\u0131ndan, kendi zaman \u00e7izelgesine g\u00f6re geli\u015ftirilebilir ve canl\u0131ya al\u0131nabilir. Bu durum, &#8220;tak\u0131m otonomisi&#8221; kavram\u0131n\u0131 \u00f6n plana \u00e7\u0131kar\u0131r ve ekiplerin daha h\u0131zl\u0131 ve \u00e7evik hareket etmesine olanak tan\u0131r.<\/p>\n<p>Angular, g\u00fc\u00e7l\u00fc mod\u00fcler yap\u0131s\u0131, bile\u015fen tabanl\u0131 mimarisi ve zengin ara\u00e7 ekosistemi sayesinde Mikro Frontendler i\u00e7in son derece uygun bir platformdur. Angular&#8217;\u0131n kendi mod\u00fcl sistemi (NgModule&#8217;ler), ba\u011f\u0131ms\u0131z i\u015flevsellikleri grupland\u0131rmak i\u00e7in do\u011fal bir yol sunar. Her bir mikro frontend, kendi Angular mod\u00fcl\u00fc veya hatta kendi Angular projesi olarak d\u00fc\u015f\u00fcn\u00fclebilir. Angular CLI, yeni projeler olu\u015fturmay\u0131, bile\u015fenler ve mod\u00fcller eklemeyi kolayla\u015ft\u0131rarak bu par\u00e7al\u0131 yap\u0131n\u0131n y\u00f6netimini basitle\u015ftirir. Ayr\u0131ca, Angular&#8217;\u0131n g\u00fc\u00e7l\u00fc tip sistemi (TypeScript) ve kapsaml\u0131 test ara\u00e7lar\u0131, ba\u011f\u0131ms\u0131z mikro frontendlerin kalitesini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131rmaya yard\u0131mc\u0131 olur. Router mekanizmas\u0131 ise farkl\u0131 mikro frontendler aras\u0131nda sorunsuz ge\u00e7i\u015fler sa\u011flamak i\u00e7in ideal bir temel sunar.<\/p>\n<p>Bu uyum, Webpack 5 ile gelen Module Federation \u00f6zelli\u011fi sayesinde daha da g\u00fc\u00e7lenmi\u015ftir. \u00d6nceleri, Angular uygulamalar\u0131n\u0131 mikro frontend mimarisine ta\u015f\u0131mak, karma\u015f\u0131k iframe \u00e7\u00f6z\u00fcmleri, k\u00fct\u00fcphane payla\u015f\u0131m zorluklar\u0131 veya sunucu taraf\u0131nda birle\u015ftirme gibi y\u00f6ntemlerle biraz sanc\u0131l\u0131 olabiliyordu. Ancak Module Federation, bu zorluklar\u0131n \u00e7o\u011funu ortadan kald\u0131r\u0131yor. Webpack 5&#8217;in bu \u00f6zelli\u011fi, farkl\u0131 Webpack build&#8217;lerinin \u00e7al\u0131\u015fma zaman\u0131nda (runtime) kodlar\u0131n\u0131 payla\u015fmas\u0131n\u0131 ve dinamik olarak y\u00fcklemesini m\u00fcmk\u00fcn k\u0131lar. Bu, host (ana) uygulaman\u0131n, uzak (remote) bir mikro frontend taraf\u0131ndan a\u00e7\u0131\u011fa \u00e7\u0131kar\u0131lan (exposed) bir bile\u015feni veya mod\u00fcl\u00fc sanki kendi projesinin bir par\u00e7as\u0131ym\u0131\u015f gibi kolayca kullanabilmesi anlam\u0131na gelir. Angular&#8217;\u0131n bile\u015fen ve mod\u00fcl odakl\u0131 yap\u0131s\u0131yla birle\u015fti\u011finde, Module Federation, ger\u00e7ek bir ba\u011f\u0131ms\u0131zl\u0131k ve dinamik y\u00fckleme kabiliyeti sunarak, Angular projelerini Mikro Frontend mimarisine entegre etmek i\u00e7in en modern ve verimli yollardan birini te\u015fkil eder. Bu sinerji, b\u00fcy\u00fck \u00f6l\u00e7ekli Angular uygulamalar\u0131nda geli\u015ftirme verimlili\u011fini, esnekli\u011fi ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi radikal bir \u015fekilde art\u0131rma potansiyeline sahiptir.<\/p>\n<h2>Module Federation Derinlemesine: Webpack 5 ve Dinamik Mod\u00fcl Y\u00fckleme Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h2>\n<p>Webpack 5 ile birlikte hayat\u0131m\u0131za giren Module Federation, JavaScript uygulamalar\u0131nda mod\u00fclerli\u011fi ve kod payla\u015f\u0131m\u0131n\u0131 tamamen yeni bir seviyeye ta\u015f\u0131yan devrim niteli\u011finde bir \u00f6zelliktir. Bu \u00f6zellik, farkl\u0131 Webpack derlemelerinin (yani farkl\u0131 projelerin) \u00e7al\u0131\u015fma zaman\u0131nda birbirleriyle kod payla\u015fmas\u0131n\u0131 ve dinamik olarak mod\u00fcl y\u00fcklemesini sa\u011flar. Geleneksel olarak, birden fazla uygulamay\u0131 tek bir sayfada \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizde, ya her uygulaman\u0131n kendi ba\u011f\u0131ms\u0131z betiklerini y\u00fcklemesi ve global de\u011fi\u015fkenler \u00fczerinden ileti\u015fim kurmas\u0131 (ki bu karma\u015faya yol a\u00e7ar), ya da uygulamalar\u0131 iframe&#8217;ler i\u00e7inde izole etmek (ki bu da performans ve ileti\u015fim k\u0131s\u0131tlamalar\u0131 getirir) gibi y\u00f6ntemler kullan\u0131l\u0131rd\u0131. Module Federation, bu zorluklar\u0131 a\u015farak, uygulamalar aras\u0131 kod payla\u015f\u0131m\u0131n\u0131 ve entegrasyonu \u00e7ok daha do\u011fal ve verimli hale getirir.<\/p>\n<p>Module Federation&#8217;\u0131n temelinde \u00fc\u00e7 anahtar kavram yatar: <code>remotes<\/code>, <code>exposes<\/code> ve <code>shared<\/code>.<\/p>\n<ul>\n<li><strong><code>exposes<\/code> (A\u00e7\u0131\u011fa \u00c7\u0131karma):<\/strong> Bir projenin (ki buna &#8220;remote&#8221; uygulama denir) di\u011fer projeler taraf\u0131ndan kullan\u0131lmas\u0131n\u0131 istedi\u011fi mod\u00fclleri veya bile\u015fenleri tan\u0131mlar. \u00d6rne\u011fin, bir &#8220;\u00fcr\u00fcn kart\u0131&#8221; bile\u015fenini veya bir &#8220;\u00f6deme mod\u00fcl\u00fcn\u00fc&#8221; a\u00e7\u0131\u011fa \u00e7\u0131karabilirsiniz. Bu, remote uygulaman\u0131n adeta bir k\u00fct\u00fcphane gibi davranarak belirli par\u00e7alar\u0131n\u0131 d\u0131\u015f d\u00fcnyaya sunmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong><code>remotes<\/code> (Uzaklar):<\/strong> Bir projenin (ki buna &#8220;host&#8221; uygulama denir) hangi uzak uygulamalardan hangi mod\u00fclleri dinamik olarak y\u00fckleyece\u011fini tan\u0131mlar. Host uygulama, burada belirtilen remote uygulamalar\u0131n a\u00e7\u0131\u011fa \u00e7\u0131kard\u0131\u011f\u0131 mod\u00fclleri kendi koduna dahil edebilir ve sanki kendi projesinin bir par\u00e7as\u0131ym\u0131\u015f gibi kullanabilir. Bu sayede, host uygulama, remote uygulaman\u0131n g\u00fcncellemelerinden otomatik olarak faydalanabilir.<\/li>\n<li><strong><code>shared<\/code> (Payla\u015f\u0131lanlar):<\/strong> Birden fazla uygulama aras\u0131nda payla\u015f\u0131lan ba\u011f\u0131ml\u0131l\u0131klar\u0131 tan\u0131mlar. Bu, \u00f6zellikle b\u00fcy\u00fck framework&#8217;ler (Angular, React, Vue gibi) veya b\u00fcy\u00fck k\u00fct\u00fcphaneler (RxJS, Lodash gibi) i\u00e7in kritik \u00f6neme sahiptir. <code>shared<\/code> yap\u0131land\u0131rmas\u0131 sayesinde, her mikro frontend kendi Angular kopyas\u0131n\u0131 y\u00fcklemek yerine, sadece bir kopyan\u0131n t\u00fcm uygulamalar taraf\u0131ndan payla\u015f\u0131lmas\u0131n\u0131 sa\u011flayabiliriz. Bu, uygulama boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde k\u00fc\u00e7\u00fclt\u00fcr ve y\u00fckleme performans\u0131n\u0131 art\u0131r\u0131r. Ayr\u0131ca, <code>singleton: true<\/code> gibi se\u00e7eneklerle, payla\u015f\u0131lan mod\u00fcl\u00fcn yaln\u0131zca bir \u00f6rne\u011finin (singleton) y\u00fcklendi\u011finden emin olunabilir, bu da ba\u011f\u0131ml\u0131l\u0131k \u00e7at\u0131\u015fmalar\u0131n\u0131 \u00f6nler ve tutarl\u0131l\u0131\u011f\u0131 garanti eder.<\/li>\n<\/ul>\n<p>Peki, bu dinamik mod\u00fcl y\u00fckleme s\u00fcreci nas\u0131l i\u015fler? Bir host uygulama, bir remote uygulaman\u0131n a\u00e7\u0131\u011fa \u00e7\u0131kard\u0131\u011f\u0131 bir mod\u00fcl\u00fc kullanmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, Module Federation \u00e7al\u0131\u015fma zaman\u0131nda remote uygulaman\u0131n manifest dosyas\u0131n\u0131 (uzak bir URL \u00fczerinden) y\u00fckler. Bu manifest dosyas\u0131, remote uygulaman\u0131n hangi mod\u00fclleri a\u00e7\u0131\u011fa \u00e7\u0131kard\u0131\u011f\u0131n\u0131 ve bu mod\u00fcllerin nerede bulundu\u011funu belirtir. Host uygulama daha sonra bu bilgilere dayanarak gerekli mod\u00fcl\u00fc dinamik olarak indirir ve kendi uygulama ba\u011flam\u0131na enjekte eder. Bu s\u00fcre\u00e7, genellikle bir promise veya async\/await yap\u0131s\u0131 ile y\u00f6netilir, bu da mod\u00fcllerin asenkron olarak y\u00fcklenmesini ve uygulaman\u0131n kullan\u0131c\u0131 deneyimini engellememesini sa\u011flar. \u00d6rne\u011fin, bir Angular uygulamas\u0131nda, host uygulaman\u0131n bir rota tan\u0131m\u0131nda veya bir bile\u015fenin i\u00e7indeki bir dinamik import ifadesinde uzak bir bile\u015feni veya mod\u00fcl\u00fc \u00e7a\u011f\u0131rabilirsiniz. Webpack&#8217;in arkaplanda yapt\u0131\u011f\u0131 t\u00fcm bu karma\u015f\u0131k i\u015fler sayesinde, geli\u015ftiriciler olarak biz, bu dinamik y\u00fcklemeyi olduk\u00e7a basit bir \u015fekilde entegre edebilir ve uygulaman\u0131n mod\u00fclerli\u011fini art\u0131rabiliriz. Bu dinamik y\u00fckleme yetene\u011fi, \u00f6zellikle b\u00fcy\u00fck kurumsal uygulamalarda, farkl\u0131 tak\u0131mlar\u0131n birbirinden ba\u011f\u0131ms\u0131z olarak geli\u015ftirdi\u011fi par\u00e7alar\u0131 ana uygulamaya kolayca entegre etme imkan\u0131 sunarak geli\u015ftirme verimlili\u011fini ve \u00e7evikli\u011fi maksimize eder.<\/p>\n<h2>Pratik Uygulama: Angular ile Module Federation Ad\u0131m Ad\u0131m<\/h2>\n<p>\u015eimdi Angular uygulamalar\u0131m\u0131zda Module Federation&#8217;\u0131 nas\u0131l hayata ge\u00e7irece\u011fimize dair ad\u0131m ad\u0131m pratik bir uygulama yapal\u0131m. Bu b\u00f6l\u00fcmde, bir &#8220;host&#8221; (ana) uygulama ve bir &#8220;remote&#8221; (uzak) uygulama olu\u015fturup, remote uygulaman\u0131n bir bile\u015fenini host uygulamada nas\u0131l dinamik olarak kullanaca\u011f\u0131m\u0131z\u0131 g\u00f6rece\u011fiz.<\/p>\n<h3>Ad\u0131m 1: Yeni Angular Projeleri Olu\u015fturma<\/h3>\n<p>\u00d6ncelikle, iki adet Angular projesi olu\u015ftural\u0131m. Birisi ana uygulamam\u0131z (host), di\u011feri ise payla\u015faca\u011f\u0131m\u0131z bile\u015feni i\u00e7eren mikro frontend (remote) olacak.<\/p>\n<pre><code>\n        ng new host-app --no-standalone --routing --style=scss\n        ng new remote-app --no-standalone --routing --style=scss\n    <\/pre>\n<p><\/code><\/p>\n<p><code>--no-standalone<\/code> bayra\u011f\u0131n\u0131 kullan\u0131yoruz \u00e7\u00fcnk\u00fc \u015fu anki Module Federation entegrasyonu genellikle NgModule tabanl\u0131 uygulamalarla daha sorunsuz \u00e7al\u0131\u015fmaktad\u0131r.<\/p>\n<h3>Ad\u0131m 2: Custom Webpack Yap\u0131land\u0131rmas\u0131n\u0131 Entegre Etme<\/h3>\n<p>Angular CLI, varsay\u0131lan olarak Webpack yap\u0131land\u0131rmas\u0131n\u0131 gizler. Module Federation'\u0131 kullanabilmek i\u00e7in bu yap\u0131land\u0131rmaya eri\u015fmemiz ve onu geni\u015fletmemiz gerekiyor. Bunun i\u00e7in <code>@angular-architects\/module-federation<\/code> paketini kullanaca\u011f\u0131z.<\/p>\n<p>Her iki projede de a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\n        cd host-app\n        npm i @angular-architects\/module-federation@latest --save-dev\n        ng add @angular-architects\/module-federation --project host-app --port 4200 --type host\n        cd ..\/remote-app\n        npm i @angular-architects\/module-federation@latest --save-dev\n        ng add @angular-architects\/module-federation --project remote-app --port 4201 --type remote\n    <\/pre>\n<p><\/code><\/p>\n<p><code>ng add<\/code> komutu, projenize otomatik olarak bir <code>webpack.config.js<\/code> dosyas\u0131 ekleyecek ve <code>angular.json<\/code> dosyan\u0131zdaki build ve serve yap\u0131land\u0131rmalar\u0131n\u0131 g\u00fcncelleyecektir. <code>--type host<\/code> ve <code>--type remote<\/code> parametreleri, s\u0131ras\u0131yla uygulaman\u0131n host mu yoksa remote mu olaca\u011f\u0131n\u0131 belirler.<\/p>\n<h3>Ad\u0131m 3: Remote Uygulamay\u0131 Yap\u0131land\u0131rma (<code>remote-app<\/code>)<\/h3>\n<p><code>remote-app<\/code> projesinin k\u00f6k dizinindeki <code>webpack.config.js<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n. Bu dosyada <code>ModuleFederationPlugin<\/code>'in yap\u0131land\u0131rmas\u0131n\u0131 bulacaks\u0131n\u0131z. Bizim Remote uygulamam\u0131z bir bile\u015fen a\u00e7\u0131\u011fa \u00e7\u0131karacak.<\/p>\n<p>\u00d6ncelikle, a\u00e7\u0131\u011fa \u00e7\u0131karaca\u011f\u0131m\u0131z bir bile\u015fen olu\u015ftural\u0131m:<\/p>\n<pre><code>\n        cd remote-app\n        ng g c products\/product-list\n    <\/pre>\n<p><\/code><\/p>\n<p><code>src\/app\/products\/product-list\/product-list.component.ts<\/code> dosyas\u0131n\u0131n i\u00e7eri\u011fi basit olabilir:<\/p>\n<pre><code class=\"language-typescript\">\n        import { Component, OnInit } from '@angular\/core';\n\n        @Component({\n          selector: 'app-product-list',\n          template: <code><h2>Remote \u00dcr\u00fcn Listesi<\/h2>\n            <ul>\n              <li>\u00dcr\u00fcn A<\/li>\n              <li>\u00dcr\u00fcn B<\/li>\n              <li>\u00dcr\u00fcn C<\/li>\n            <\/ul>\n            <p>Bu bile\u015fen remote-app&#039;ten y\u00fcklenmi\u015ftir.<\/p><\/code>,\n          styles: [<code>:host {\n              display: block;\n              border: 1px solid blue;\n              padding: 15px;\n              margin: 10px;\n              background-color: #e0e7ff;\n              border-radius: 8px;\n            }\n            h2 { color: #3f51b5; }\n            ul { list-style-type: disc; margin-left: 20px; }\n            li { margin-bottom: 5px; }<\/code>]\n        })\n        export class ProductListComponent implements OnInit {\n          constructor() { }\n          ngOnInit(): void { }\n        }\n    <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi bu bile\u015feni d\u0131\u015f d\u00fcnyaya a\u00e7\u0131\u011fa \u00e7\u0131karmak i\u00e7in <code>webpack.config.js<\/code> dosyas\u0131n\u0131 g\u00fcncelleyelim:<\/p>\n<pre><code class=\"language-javascript\">\n        const { shareAll, withModuleFederationPlugin } = require('@angular-architects\/module-federation\/webpack');\n\n        module.exports = withModuleFederationPlugin({\n          name: 'remoteApp', \/\/ Uzak uygulaman\u0131n ad\u0131\n          exposes: {\n            \/\/ D\u0131\u015fa a\u00e7t\u0131\u011f\u0131m\u0131z bile\u015fen veya mod\u00fcl\n            '.\/ProductListComponent': '.\/src\/app\/products\/product-list\/product-list.component.ts',\n          },\n          shared: {\n            ...shareAll({ singleton: true, strictVersion: true, requiredVersion: 'auto' }),\n          },\n        });\n    <\/pre>\n<p><\/code><\/p>\n<p><code>name<\/code> alan\u0131, bu remote uygulaman\u0131n di\u011fer uygulamalar taraf\u0131ndan tan\u0131nmas\u0131n\u0131 sa\u011flayacak benzersiz bir kimliktir. <code>exposes<\/code> alt\u0131nda, key olarak host uygulaman\u0131n kullanaca\u011f\u0131 ad\u0131, value olarak ise a\u00e7\u0131\u011fa \u00e7\u0131kar\u0131lan dosyan\u0131n yolunu veriyoruz. <code>shared<\/code> alan\u0131, Angular ve di\u011fer k\u00fct\u00fcphanelerin tek bir kopyas\u0131n\u0131n y\u00fcklenmesini sa\u011flar.<\/p>\n<h3>Ad\u0131m 4: Host Uygulamay\u0131 Yap\u0131land\u0131rma (<code>host-app<\/code>)<\/h3>\n<p><code>host-app<\/code> projesinin k\u00f6k dizinindeki <code>webpack.config.js<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n. Burada <code>remotes<\/code> k\u0131sm\u0131n\u0131 g\u00fcncelleyece\u011fiz:<\/p>\n<pre><code class=\"language-javascript\">\n        const { shareAll, withModuleFederationPlugin } = require('@angular-architects\/module-federation\/webpack');\n\n        module.exports = withModuleFederationPlugin({\n          remotes: {\n            \/\/ Uzak uygulamay\u0131 ve URL'sini belirtiyoruz\n            \"remoteApp\": \"http:\/\/localhost:4201\/remoteEntry.js\",\n          },\n          shared: {\n            ...shareAll({ singleton: true, strictVersion: true, requiredVersion: 'auto' }),\n          },\n        });\n    <\/pre>\n<p><\/code><\/p>\n<p><code>remotes<\/code> alt\u0131nda, key olarak remote uygulaman\u0131n ad\u0131n\u0131 (<code>remoteApp<\/code>), value olarak ise remote uygulaman\u0131n <code>remoteEntry.js<\/code> dosyas\u0131n\u0131n URL'sini belirtiyoruz. Bu dosya, remote uygulaman\u0131n hangi mod\u00fclleri a\u00e7\u0131\u011fa \u00e7\u0131kard\u0131\u011f\u0131na dair meta bilgileri i\u00e7erir.<\/p>\n<h3>Ad\u0131m 5: Host Uygulamada Uzak Bile\u015feni Kullanma<\/h3>\n<p>\u015eimdi <code>host-app<\/code> i\u00e7inde <code>remote-app<\/code>'ten gelen <code>ProductListComponent<\/code>'i dinamik olarak y\u00fckleyelim. Bunun en kolay yolu Angular router ile lazy loading kullanmakt\u0131r. Host uygulaman\u0131n <code>src\/app\/app.module.ts<\/code> dosyas\u0131nda herhangi bir de\u011fi\u015fiklik yapmam\u0131za gerek yok. <code>src\/app\/app-routing.module.ts<\/code> dosyas\u0131n\u0131 a\u00e7al\u0131m:<\/p>\n<pre><code class=\"language-typescript\">\n        import { NgModule } from '@angular\/core';\n        import { RouterModule, Routes } from '@angular\/router';\n\n        const routes: Routes = [\n          {\n            path: 'products',\n            loadChildren: () =>\n              import('remoteApp\/ProductListComponent').then(m => m.ProductListComponent)\n              \/\/ Dynamik olarak remoteApp'ten ProductListComponent'i y\u00fckl\u00fcyoruz.\n              \/\/ Dikkat: Burada do\u011frudan bir bile\u015feni y\u00fckl\u00fcyoruz. Genellikle bir mod\u00fcl\u00fc y\u00fcklemek daha yayg\u0131nd\u0131r.\n              \/\/ Bir mod\u00fcl y\u00fcklemek isterseniz: import('remoteApp\/ProductsModule').then(m => m.ProductsModule)\n          },\n        ];\n\n        @NgModule({\n          imports: [RouterModule.forRoot(routes)],\n          exports: [RouterModule]\n        })\n        export class AppRoutingModule { }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, bir bile\u015feni do\u011frudan y\u00fckledik. Daha ger\u00e7ek\u00e7i senaryolarda, genellikle bir feature mod\u00fcl\u00fcn\u00fc (\u00f6rne\u011fin, <code>ProductsModule<\/code>) a\u00e7\u0131\u011fa \u00e7\u0131kar\u0131p onu y\u00fcklersiniz. E\u011fer bir mod\u00fcl a\u00e7\u0131\u011fa \u00e7\u0131karacaksan\u0131z, <code>remote-app<\/code>'in <code>webpack.config.js<\/code> dosyas\u0131nda <code>'.\/ProductsModule': '.\/src\/app\/products\/products.module.ts'<\/code> \u015feklinde bir expose tan\u0131m\u0131 yapmal\u0131 ve <code>host-app<\/code>'in router'\u0131nda <code>import('remoteApp\/ProductsModule').then(m => m.ProductsModule)<\/code> \u015feklinde kullanmal\u0131s\u0131n\u0131z.<\/p>\n<p>Son olarak, <code>host-app<\/code>'in <code>src\/app\/app.component.html<\/code> dosyas\u0131na bir navigasyon linki ekleyelim:<\/p>\n<pre><code class=\"language-html\">\n        <header>\n          <h1>Host Uygulamas\u0131<\/h1>\n          <nav>\n            <a routerLink=\"\/\">Ana Sayfa<\/a> |\n            <a routerLink=\"\/products\">\u00dcr\u00fcnler (Remote)<\/a>\n          <\/nav>\n        <\/header>\n\n        <router-outlet><\/router-outlet>\n    <\/pre>\n<p><\/code><\/p>\n<h3>Ad\u0131m 6: Uygulamalar\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>\u00d6nce remote uygulamay\u0131 ba\u015flat\u0131n:<\/p>\n<pre><code>\n        cd remote-app\n        npm start\n        \/\/ veya ng serve --port 4201\n    <\/pre>\n<p><\/code><\/p>\n<p>Sonra host uygulamay\u0131 ba\u015flat\u0131n:<\/p>\n<pre><code>\n        cd host-app\n        npm start\n        \/\/ veya ng serve --port 4200\n    <\/pre>\n<p><\/code><\/p>\n<p>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:4200<\/code> adresine gidin ve \"\u00dcr\u00fcnler (Remote)\" linkine t\u0131klay\u0131n. <code>remote-app<\/code>'ten gelen <code>ProductListComponent<\/code>'in <code>host-app<\/code> i\u00e7inde sorunsuz bir \u015fekilde y\u00fcklendi\u011fini g\u00f6receksiniz. Bu, farkl\u0131 Angular projelerinin dinamik olarak nas\u0131l birle\u015febildi\u011fini g\u00f6steren g\u00fc\u00e7l\u00fc bir \u00f6rnektir.<\/p>\n<p class=\"expert-tip\">Uzman \u0130pucu: Mod\u00fcl Federasyonu ile Angular bile\u015fenlerini payla\u015f\u0131rken, payla\u015f\u0131lan ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131n (\u00f6zellikle Angular kendisinin) tekil (singleton) oldu\u011fundan emin olun. Bu, gereksiz kod indirmelerini \u00f6nler ve \u00e7al\u0131\u015fma zaman\u0131 hatalar\u0131n\u0131 minimize eder.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve Vaka Analizleri<\/h2>\n<p>Module Federation ile Angular mikro frontendlerini uygulamak, teoride kula\u011fa ho\u015f gelse de, ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l bir d\u00f6n\u00fc\u015f\u00fcm yaratt\u0131\u011f\u0131n\u0131 anlamak kritik \u00f6neme sahiptir. Monolitik yap\u0131lar\u0131n getirdi\u011fi t\u0131kan\u0131kl\u0131klar\u0131 a\u015fmada Module Federation'\u0131n sundu\u011fu \u00e7\u00f6z\u00fcmler, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli ve h\u0131zla geli\u015fen projelerde kendini g\u00f6sterir.<\/p>\n<h3>Vaka Analizi 1: E-ticaret Platformu<\/h3>\n<p>B\u00fcy\u00fck bir e-ticaret platformu hayal edelim. Bu platformda \"\u00dcr\u00fcn Listeleme\", \"\u00dcr\u00fcn Detay\u0131\", \"Sepet\", \"\u00d6deme\", \"Hesab\u0131m\" ve \"M\u00fc\u015fteri Deste\u011fi\" gibi bir\u00e7ok farkl\u0131 i\u015flevsel alan bulunur. Geleneksel monolitik bir yakla\u015f\u0131mda, t\u00fcm bu \u00f6zellikler tek bir Angular projesinde geli\u015ftirilip, ayn\u0131 ekip taraf\u0131ndan veya b\u00fcy\u00fck bir ekibin farkl\u0131 gruplar\u0131 taraf\u0131ndan y\u00f6netilir. Her bir de\u011fi\u015fiklik, t\u00fcm uygulaman\u0131n yeniden da\u011f\u0131t\u0131lmas\u0131n\u0131 gerektirir, bu da geli\u015ftirme h\u0131z\u0131n\u0131 ve \u00e7evikli\u011fi olumsuz etkiler. Module Federation sayesinde bu platformu a\u015fa\u011f\u0131daki gibi mikro frontendlere ay\u0131rabiliriz:<\/p>\n<ul>\n<li><strong>Host Uygulama (Kabuk):<\/strong> Sadece ana navigasyonu, site genelindeki ba\u015fl\u0131k ve altbilgiyi (header\/footer) ve rotalar\u0131 y\u00f6netir. Kendisi \u00e7ok az i\u015f mant\u0131\u011f\u0131 i\u00e7erir.<\/li>\n<li><strong>\u00dcr\u00fcn Mikro Frontend:<\/strong> \"\u00dcr\u00fcn Listeleme\" ve \"\u00dcr\u00fcn Detay\u0131\" sayfalar\u0131n\u0131 i\u00e7erir. Kendi ekibi taraf\u0131ndan geli\u015ftirilir ve ba\u011f\u0131ms\u0131z olarak da\u011f\u0131t\u0131l\u0131r. Yeni filtreleme \u00f6zellikleri veya \u00fcr\u00fcn g\u00f6rselle\u015ftirme ara\u00e7lar\u0131 eklenirken di\u011fer ekipleri etkilemez.<\/li>\n<li><strong>Sepet Mikro Frontend:<\/strong> Kullan\u0131c\u0131n\u0131n sepetine \u00fcr\u00fcn ekleme, \u00e7\u0131karma ve miktar g\u00fcncelleme i\u015flevselli\u011fini sunar. Kendi \u00f6zel indirim kurallar\u0131n\u0131 veya karma\u015f\u0131k sepet mant\u0131\u011f\u0131n\u0131 geli\u015ftirebilir.<\/li>\n<li><strong>\u00d6deme Mikro Frontend:<\/strong> Kredi kart\u0131 giri\u015fi, adres bilgileri ve \u00f6deme sa\u011flay\u0131c\u0131 entegrasyonlar\u0131n\u0131 y\u00f6netir. PCI DSS uyumlulu\u011fu gibi kritik g\u00fcvenlik gereksinimleri nedeniyle izole edilmesi \u00f6zellikle \u00f6nemlidir.<\/li>\n<li><strong>Hesab\u0131m Mikro Frontend:<\/strong> Kullan\u0131c\u0131 profili, sipari\u015f ge\u00e7mi\u015fi, adres defteri gibi ki\u015fisel bilgileri y\u00f6netir.<\/li>\n<\/ul>\n<p>Bu yap\u0131da, her mikro frontend kendi Angular s\u00fcr\u00fcm\u00fcn\u00fc, ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve hatta farkl\u0131 bir UI k\u00fct\u00fcphanesini kullanabilir (her ne kadar Angular ekosisteminde kalmak genellikle tercih edilse de). Webpack'in <code>shared<\/code> \u00f6zelli\u011fi sayesinde, temel Angular k\u00fct\u00fcphaneleri ve di\u011fer yayg\u0131n ba\u011f\u0131ml\u0131l\u0131klar yaln\u0131zca bir kez y\u00fcklenir, bu da performans kayb\u0131n\u0131 minimuma indirir. \u00d6rne\u011fin, Sepet ekibi yeni bir \u00f6deme ge\u00e7idi entegrasyonu yaparken, \u00dcr\u00fcn ekibi ba\u011f\u0131ms\u0131z olarak yeni bir \u00fcr\u00fcn filtreleme \u00f6zelli\u011fi geli\u015ftirebilir ve her iki de\u011fi\u015fiklik de ana uygulamay\u0131 etkilemeden kendi da\u011f\u0131t\u0131m s\u00fcre\u00e7leriyle canl\u0131ya al\u0131nabilir.<\/p>\n<h3>Vaka Analizi 2: Kurumsal Dashboard ve Y\u00f6netim Paneli<\/h3>\n<p>B\u00fcy\u00fck bir \u015firketin farkl\u0131 departmanlar\u0131n\u0131n (Sat\u0131\u015f, Pazarlama, \u0130nsan Kaynaklar\u0131, IT) kulland\u0131\u011f\u0131 tek bir kurumsal dashboard uygulamas\u0131 d\u00fc\u015f\u00fcnelim. Her departman\u0131n kendi verilerine ve raporlama ihtiya\u00e7lar\u0131na y\u00f6nelik farkl\u0131 widget'lar\u0131 ve panelleri vard\u0131r. Monolitik bir dashboardda, her yeni widget veya rapor talebi, merkezi ekibin i\u015f y\u00fck\u00fcn\u00fc art\u0131r\u0131r ve departmanlar\u0131n kendi ihtiya\u00e7lar\u0131na h\u0131zl\u0131ca yan\u0131t vermesini zorla\u015ft\u0131r\u0131r. Module Federation bu senaryoyu da optimize edebilir:<\/p>\n<ul>\n<li><strong>Host Dashboard:<\/strong> Ana navigasyon, genel d\u00fczen ve kullan\u0131c\u0131 kimlik do\u011frulama\/yetkilendirme mekanizmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Sat\u0131\u015f Analizleri Mikro Frontend:<\/strong> Sat\u0131\u015f ekibi taraf\u0131ndan geli\u015ftirilir. Ger\u00e7ek zamanl\u0131 sat\u0131\u015f grafikleri, performans g\u00f6stergeleri ve m\u00fc\u015fteri segmentasyonu widget'lar\u0131 i\u00e7erir.<\/li>\n<li><strong>Pazarlama Kampanyalar\u0131 Mikro Frontend:<\/strong> Pazarlama ekibi taraf\u0131ndan y\u00f6netilir. Kampanya performans raporlar\u0131, A\/B test sonu\u00e7lar\u0131 ve sosyal medya entegrasyonlar\u0131 gibi bile\u015fenleri sunar.<\/li>\n<li><strong>\u0130K Y\u00f6netimi Mikro Frontend:<\/strong> \u0130nsan Kaynaklar\u0131 departman\u0131 i\u00e7in \u00e7al\u0131\u015fan bilgileri, izin takipleri ve performans de\u011ferlendirme mod\u00fclleri sa\u011flar.<\/li>\n<\/ul>\n<p>Bu modelde, her departman kendi mini uygulamas\u0131n\u0131n geli\u015ftirilmesinden ve s\u00fcrd\u00fcr\u00fclmesinden sorumlu olur. Onlar i\u00e7in en uygun teknolojileri veya k\u00fct\u00fcphaneleri se\u00e7ebilirler (yine de uyumluluk i\u00e7in Angular'da kalmak mant\u0131kl\u0131d\u0131r). Dashboard'un ana ekibi sadece entegrasyon ve genel \u00e7er\u00e7eveye odaklan\u0131rken, departmanlar kendi i\u015f ak\u0131\u015flar\u0131na \u00f6zel ve \u00f6zelle\u015ftirilmi\u015f widget'lar\u0131 h\u0131zl\u0131ca geli\u015ftirebilir ve da\u011f\u0131tabilirler. Bu, geli\u015ftirici verimlili\u011fini art\u0131rman\u0131n yan\u0131 s\u0131ra, departmanlar\u0131n kendi i\u015f ihtiya\u00e7lar\u0131na daha h\u0131zl\u0131 yan\u0131t vermesini sa\u011flayarak i\u015f s\u00fcre\u00e7lerini de h\u0131zland\u0131r\u0131r. Ba\u011f\u0131ml\u0131l\u0131k \u00e7at\u0131\u015fmalar\u0131n\u0131 minimuma indirmek ve farkl\u0131 mikro frontendlerin ayn\u0131 Angular ba\u011f\u0131ml\u0131l\u0131k setini kullanmas\u0131n\u0131 sa\u011flamak i\u00e7in <code>shared<\/code> yap\u0131land\u0131rmas\u0131n\u0131 <code>singleton: true<\/code> ile kullanmak esast\u0131r. Bu sayede, uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmleri ayn\u0131 anda y\u00fcklendi\u011finde, ayn\u0131 Angular instance'\u0131n\u0131 payla\u015farak hem performans optimizasyonu sa\u011flan\u0131r hem de olas\u0131 hatalar\u0131n \u00f6n\u00fcne ge\u00e7ilir. Bu vaka analizleri, Module Federation'\u0131n sadece teorik bir konsept olmad\u0131\u011f\u0131n\u0131, aksine b\u00fcy\u00fck ve karma\u015f\u0131k sistemlerde ger\u00e7ek de\u011fer yaratan pratik bir \u00e7\u00f6z\u00fcm oldu\u011funu a\u00e7\u0131k\u00e7a ortaya koymaktad\u0131r.<\/p>\n<p class=\"expert-tip\">Uzman \u0130pucu: Karma\u015f\u0131k payla\u015f\u0131ml\u0131 mod\u00fcl yap\u0131land\u0131rmalar\u0131nda (\u00f6zellikle farkl\u0131 versiyonlardaki k\u00fct\u00fcphaneler), <code>strictVersion: true<\/code> ve <code>requiredVersion: 'auto'<\/code> gibi se\u00e7enekleri dikkatlice kullan\u0131n. Bu, beklenmedik versiyon \u00e7at\u0131\u015fmalar\u0131n\u0131 engellemeye yard\u0131mc\u0131 olur.<\/p>\n<h2>Geli\u015fmi\u015f Konular ve Optimizasyon \u0130pu\u00e7lar\u0131<\/h2>\n<p>Mikro Frontend mimarisini Module Federation ile Angular projelerinize uygulad\u0131ktan sonra, uygulaman\u0131n performans\u0131n\u0131, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve kullan\u0131c\u0131 deneyimini daha da art\u0131rmak i\u00e7in ileri d\u00fczey konulara ve optimizasyon ipu\u00e7lar\u0131na odaklanmak \u00f6nemlidir.<\/p>\n<h3>Performans \u0130yile\u015ftirmeleri<\/h3>\n<ol>\n<li><strong>Lazy Loading ve Dinamik Import:<\/strong> Module Federation'\u0131n temel faydalar\u0131ndan biri dinamik y\u00fcklemedir. Mikro frontendlerinizi ve hatta i\u00e7indeki bile\u015fenleri sadece ihtiya\u00e7 duyuldu\u011funda y\u00fckleyerek ba\u015flang\u0131\u00e7 \u200b\u200by\u00fckleme s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azaltabilirsiniz. Angular Router ile bu zaten do\u011fal olarak desteklenir.<\/li>\n<li><strong>Shared Mod\u00fcl Optimizasyonu:<\/strong> <code>shared<\/code> yap\u0131land\u0131rmas\u0131nda Angular, RxJS gibi b\u00fcy\u00fck k\u00fct\u00fcphanelerin tekil (singleton) kopyalar\u0131n\u0131 payla\u015fmak esast\u0131r. Ayr\u0131ca, t\u00fcm projelerinizde ayn\u0131 versiyonlar\u0131 kullanmaya \u00f6zen g\u00f6sterin. E\u011fer farkl\u0131 versiyonlar ka\u00e7\u0131n\u0131lmazsa, Webpack'in bu durumu nas\u0131l ele alaca\u011f\u0131n\u0131 <code>shared<\/code> se\u00e7eneklerinde (\u00f6rne\u011fin, <code>eager<\/code>, <code>strictVersion<\/code>) detayl\u0131ca belirtin.<\/li>\n<li><strong>Caching Stratejileri:<\/strong> Taray\u0131c\u0131 \u00f6nbellekleme ve Service Worker'lar (Angular PWA) kullanarak statik varl\u0131klar\u0131 ve mikro frontend bundle'lar\u0131n\u0131 \u00f6nbelle\u011fe al\u0131n. Bu, tekrar eden ziyaretlerde uygulaman\u0131n \u00e7ok daha h\u0131zl\u0131 y\u00fcklenmesini sa\u011flar.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck ve Odakl\u0131 Mikro Frontendler:<\/strong> Her mikro frontend'i m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck ve tek bir i\u015flevsel alana odaklanm\u0131\u015f tutun. Bu, hem bundle boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fclt\u00fcr hem de ba\u011f\u0131ms\u0131z da\u011f\u0131t\u0131m\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ol>\n<h3>Hata Y\u00f6netimi ve Kullan\u0131c\u0131 Deneyimi<\/h3>\n<p>Dinamik y\u00fckleme ve da\u011f\u0131t\u0131k bir yap\u0131, hata durumlar\u0131n\u0131 y\u00f6netmeyi biraz daha karma\u015f\u0131k hale getirebilir.<\/p>\n<ul>\n<li><strong>Y\u00fckleme Hatalar\u0131n\u0131 Yakalama:<\/strong> Bir mikro frontend y\u00fcklenemedi\u011finde (\u00f6rne\u011fin a\u011f hatas\u0131 veya remote sunucusu kapal\u0131ysa), kullan\u0131c\u0131ya anlaml\u0131 bir geri bildirim sunmak \u00f6nemlidir. Router'da <code>loadChildren<\/code> kullanan durumlarda, <code>catch<\/code> bloklar\u0131 ile bu hatalar\u0131 yakalayabilir ve alternatif bir \"y\u00fckleme ba\u015far\u0131s\u0131z oldu\" bile\u015feni g\u00f6sterebilirsiniz.<\/li>\n<li><strong>Loading G\u00f6stergeleri:<\/strong> Mikro frontendler asenkron olarak y\u00fcklendi\u011fi i\u00e7in, kullan\u0131c\u0131ya bir \u015feylerin y\u00fcklendi\u011fini g\u00f6steren g\u00f6rsel bir geri bildirim (spinner, iskelet ekran) sa\u011flamak kullan\u0131c\u0131 deneyimini art\u0131r\u0131r.<\/li>\n<li><strong>Sa\u011fl\u0131k Kontrolleri:<\/strong> Mikro frontendlerin sa\u011fl\u0131kl\u0131 \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 izlemek i\u00e7in sa\u011fl\u0131k kontrol\u00fc (health check) endpointleri ekleyin. Bu, sorunlar\u0131 proaktif olarak tespit etmenize yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<h3>CSS ve Styling Stratejileri<\/h3>\n<p>Farkl\u0131 mikro frontendler aras\u0131nda stil \u00e7at\u0131\u015fmalar\u0131n\u0131 \u00f6nlemek kritik bir konudur.<\/p>\n<ul>\n<li><strong>Scoped CSS (Shadow DOM):<\/strong> Angular bile\u015fenleri varsay\u0131lan olarak <code>ViewEncapsulation.Emulated<\/code> ile kaps\u00fcllenmi\u015f stiller kullan\u0131r. Bu, \u00e7o\u011fu durumda yeterli olsa da, baz\u0131 durumlarda Shadow DOM (<code>ViewEncapsulation.ShadowDom<\/code>) kullanarak stillerin tamamen izole edilmesini sa\u011flayabilirsiniz.<\/li>\n<li><strong>CSS \u00d6n \u0130\u015flemcileri ve Adland\u0131rma Kurallar\u0131:<\/strong> Sass\/Less gibi \u00f6n i\u015flemcilerle mod\u00fcler stil dosyalar\u0131 olu\u015fturun. BEM (Block Element Modifier) gibi adland\u0131rma kurallar\u0131 kullanarak s\u0131n\u0131flar aras\u0131nda \u00e7at\u0131\u015fma riskini azalt\u0131n.<\/li>\n<li><strong>CSS De\u011fi\u015fkenleri:<\/strong> Ortak tema ve stil k\u0131lavuzlar\u0131n\u0131 global CSS de\u011fi\u015fkenleri (CSS Custom Properties) arac\u0131l\u0131\u011f\u0131yla payla\u015f\u0131n. Bu, her mikro frontend'in kendi stillerini korurken, ana tema ile uyumlu kalmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Utility-First CSS (Tailwind CSS):<\/strong> Tailwind CSS gibi utility-first framework'ler, bile\u015fen d\u00fczeyinde stillendirme konusunda b\u00fcy\u00fck esneklik sa\u011flar ve global stil \u00e7at\u0131\u015fmalar\u0131n\u0131 en aza indirir.<\/li>\n<\/ul>\n<pre><code class=\"language-css\">\n        \/* Mobil uyumlu tasar\u0131m i\u00e7in \u00f6rnek bir medya sorgusu *\/\n        @media (max-width: 768px) {\n          .micro-frontend-container {\n            flex-direction: column;\n            padding: 10px;\n          }\n          .remote-widget {\n            margin-bottom: 15px;\n          }\n        }\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu medya sorgusu \u00f6rne\u011fi, farkl\u0131 mikro frontendlerin bulundu\u011fu bir d\u00fczenin mobil cihazlarda nas\u0131l daha iyi g\u00f6r\u00fcnece\u011fini g\u00f6sterir. Her bir mikro frontend kendi i\u00e7inde responsive olabilir veya ana uygulama genel bir responsive iskelet sunabilir.<\/p>\n<h3>CI\/CD S\u00fcre\u00e7leri ve Da\u011f\u0131t\u0131m Stratejileri<\/h3>\n<p>Her mikro frontend'in ba\u011f\u0131ms\u0131z olarak da\u011f\u0131t\u0131labilir olmas\u0131, CI\/CD s\u00fcre\u00e7lerini modernize etmeyi gerektirir.<\/p>\n<ul>\n<li><strong>Ba\u011f\u0131ms\u0131z Pipeline'lar:<\/strong> Her mikro frontend i\u00e7in kendi derleme, test ve da\u011f\u0131t\u0131m pipeline'\u0131n\u0131 olu\u015fturun. Bu, ekiplerin birbirini beklemeden kendi kodlar\u0131n\u0131 canl\u0131ya almas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Versiyonlama Stratejileri:<\/strong> Mikro frontendlerinizi semantik versiyonlama (SemVer) ile versiyonlay\u0131n. Host uygulaman\u0131n belirli bir remote uygulaman\u0131n hangi versiyonunu t\u00fcketece\u011fini a\u00e7\u0131k\u00e7a belirtin. Gerekirse, <code>webpack.config.js<\/code> i\u00e7inde remote URL'sini versiyona \u00f6zel hale getirebilirsiniz (\u00f6rn. <code>http:\/\/localhost:4201\/v1\/remoteEntry.js<\/code>).<\/li>\n<li><strong>Ortak Build Ortam\u0131:<\/strong> Ortak ba\u011f\u0131ml\u0131l\u0131klar ve build ara\u00e7lar\u0131 i\u00e7in bir \"base image\" veya \"starter kit\" olu\u015fturmak, tutarl\u0131l\u0131\u011f\u0131 ve kolayl\u0131\u011f\u0131 art\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Bu geli\u015fmi\u015f konular\u0131 ve optimizasyon ipu\u00e7lar\u0131n\u0131 uygulayarak, Angular ile Module Federation tabanl\u0131 mikro frontend mimarisinin sundu\u011fu t\u00fcm potansiyeli ortaya \u00e7\u0131karabilir, daha performansl\u0131, esnek ve s\u00fcrd\u00fcr\u00fclebilir uygulamalar geli\u015ftirebilirsiniz.<\/p>\n<h2>G\u00fcvenlik ve S\u00fcrd\u00fcr\u00fclebilirlik<\/h2>\n<p>Her da\u011f\u0131t\u0131k mimaride oldu\u011fu gibi, Mikro Frontendler de beraberinde baz\u0131 g\u00fcvenlik ve s\u00fcrd\u00fcr\u00fclebilirlik zorluklar\u0131n\u0131 getirir. Ancak do\u011fru stratejilerle bu zorluklar\u0131n \u00fcstesinden gelmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h3>G\u00fcvenlik Endi\u015feleri<\/h3>\n<p>1.  <strong>\u00c7apraz Kaynak G\u00fcvenli\u011fi (CORS):<\/strong> Module Federation, farkl\u0131 k\u00f6kenlerden (domain, port) mod\u00fcl y\u00fcklemeyi i\u00e7erdi\u011finden, CORS politikalar\u0131n\u0131n do\u011fru yap\u0131land\u0131r\u0131lmas\u0131 hayati \u00f6neme sahiptir. Remote uygulamalar\u0131n sunucular\u0131, host uygulaman\u0131n k\u00f6keninden gelen isteklere izin verecek \u015fekilde ayarlanmal\u0131d\u0131r. Yanl\u0131\u015f yap\u0131land\u0131r\u0131lm\u0131\u015f CORS, g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir veya uygulamalar aras\u0131 ileti\u015fimi engelleyebilir. Her mikro frontend'in da\u011f\u0131t\u0131ld\u0131\u011f\u0131 sunucuda veya CDN'de bu ayarlar\u0131n do\u011fru yap\u0131ld\u0131\u011f\u0131ndan emin olunmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\n        \/\/ \u00d6rnek bir Node.js (Express) sunucusunda CORS yap\u0131land\u0131rmas\u0131\n        const express = require('express');\n        const cors = require('cors');\n        const app = express();\n\n        app.use(cors({\n          origin: 'http:\/\/localhost:4200', \/\/ Host uygulamas\u0131n\u0131n URL'si\n          methods: ['GET', 'POST'],\n          credentials: true \/\/ \u00c7erezler ve kimlik do\u011frulama bilgileri i\u00e7in\n        }));\n\n        \/\/ Di\u011fer route'lar\n        app.listen(4201, () => {\n          console.log('Remote app server running on port 4201');\n        });\n    <\/pre>\n<p><\/code><\/p>\n<p>2.  <strong>Ba\u011f\u0131ml\u0131l\u0131k G\u00fcvenli\u011fi:<\/strong> Her mikro frontend'in kendi ba\u011f\u0131ml\u0131l\u0131k setine sahip olmas\u0131, g\u00fcvenlik a\u00e7\u0131\u011f\u0131 taramalar\u0131n\u0131n her proje i\u00e7in ayr\u0131 ayr\u0131 yap\u0131lmas\u0131n\u0131 gerektirir. <code>npm audit<\/code> veya Snyk gibi ara\u00e7larla d\u00fczenli olarak ba\u011f\u0131ml\u0131l\u0131klar\u0131n g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kontrol etmek, potansiyel riskleri minimize eder.<\/p>\n<p>3.  <strong>\u0130stemci Taraf\u0131 G\u00fcvenli\u011fi:<\/strong> XSS (Cross-Site Scripting) ve CSRF (Cross-Site Request Forgery) gibi yayg\u0131n web sald\u0131r\u0131lar\u0131na kar\u015f\u0131 her mikro frontend'in ayr\u0131 ayr\u0131 g\u00fcvence alt\u0131na al\u0131nd\u0131\u011f\u0131ndan emin olun. Angular'\u0131n yerle\u015fik g\u00fcvenlik mekanizmalar\u0131 (sanitizasyon) bu konuda b\u00fcy\u00fck destek sa\u011flar, ancak geli\u015ftiricilerin de dikkatli olmas\u0131 gerekir.<\/p>\n<h3>S\u00fcrd\u00fcr\u00fclebilirlik Stratejileri<\/h3>\n<p>1.  <strong>Ba\u011f\u0131ml\u0131l\u0131k \u00c7at\u0131\u015fmalar\u0131 ve Versiyonlama:<\/strong> Module Federation'\u0131n <code>shared<\/code> \u00f6zelli\u011fi ba\u011f\u0131ml\u0131l\u0131k \u00e7at\u0131\u015fmalar\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r. Ancak, farkl\u0131 mikro frontendler ayn\u0131 k\u00fct\u00fcphanenin uyumsuz versiyonlar\u0131n\u0131 kullanmaya kalkt\u0131\u011f\u0131nda sorunlar ortaya \u00e7\u0131kabilir. Bu durumu y\u00f6netmek i\u00e7in:<\/p>\n<ul>\n<li><strong>Semantik Versiyonlama (SemVer):<\/strong> T\u00fcm payla\u015f\u0131lan k\u00fct\u00fcphaneler ve mikro frontendler i\u00e7in tutarl\u0131 bir SemVer stratejisi benimseyin.<\/li>\n<li><strong><code>singleton<\/code> ve <code>strictVersion<\/code>:<\/strong> Webpack yap\u0131land\u0131rmas\u0131nda <code>shared<\/code> mod\u00fclleri i\u00e7in <code>singleton: true<\/code> ve <code>strictVersion: true<\/code> kullanmak, tek bir kopyan\u0131n y\u00fcklenmesini ve versiyon uyumsuzluklar\u0131n\u0131n kat\u0131 bir \u015fekilde denetlenmesini sa\u011flar.<\/li>\n<li><strong>Versiyon Politikas\u0131:<\/strong> Ekipler aras\u0131nda ortak ba\u011f\u0131ml\u0131l\u0131klar\u0131n hangi versiyonlar\u0131n\u0131n kullan\u0131laca\u011f\u0131na dair bir politika belirleyin ve bunu d\u00f6k\u00fcmante edin.<\/li>\n<\/ul>\n<p>2.  <strong>Ekip Organizasyonu ve \u0130leti\u015fim:<\/strong> Mikro Frontendler, \u00fcr\u00fcn odakl\u0131, \u00e7apraz fonksiyonel ekipleri te\u015fvik eder. Her ekip, kendi mikro frontend'inin t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcnden (geli\u015ftirme, test, da\u011f\u0131t\u0131m, bak\u0131m) sorumlu olmal\u0131d\u0131r. Bu, tak\u0131m otonomisini art\u0131r\u0131r, ancak ekipler aras\u0131nda a\u00e7\u0131k ve d\u00fczenli ileti\u015fim olmadan ba\u015far\u0131l\u0131 olamaz. Ortak bile\u015fenler, API s\u00f6zle\u015fmeleri ve genel tasar\u0131m ilkeleri hakk\u0131nda d\u00fczenli senkronizasyon toplant\u0131lar\u0131 yap\u0131lmal\u0131d\u0131r.<\/p>\n<p>3.  <strong>Test Stratejileri:<\/strong> Da\u011f\u0131t\u0131k bir sistemde testler daha kapsaml\u0131 olmal\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>Birim ve Entegrasyon Testleri:<\/strong> Her mikro frontend kendi i\u00e7inde kapsaml\u0131 birim ve entegrasyon testlerine sahip olmal\u0131d\u0131r.<\/li>\n<li><strong>U\u00e7tan Uca (E2E) Testleri:<\/strong> Host uygulama ile entegre olan t\u00fcm mikro frontendlerin bir arada \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulayan E2E testleri vazge\u00e7ilmezdir. Cypress veya Playwright gibi ara\u00e7lar bu t\u00fcr testler i\u00e7in idealdir.<\/li>\n<li><strong>S\u00f6zle\u015fme Testleri (Contract Testing):<\/strong> Mikro frontendler aras\u0131nda veya mikro frontend ile backend aras\u0131nda API s\u00f6zle\u015fmelerini do\u011frulayan testler (Pact gibi ara\u00e7larla) entegrasyon hatalar\u0131n\u0131 \u00f6nler.<\/li>\n<\/ul>\n<p>4.  <strong>\u0130zleme ve G\u00f6zlemlenebilirlik:<\/strong> Da\u011f\u0131t\u0131k bir mimaride sorun gidermek karma\u015f\u0131k olabilir. Merkezi bir loglama sistemi (ELK Stack, Grafana Loki), performans izleme ara\u00e7lar\u0131 (Datadog, New Relic) ve hata izleme sistemleri (Sentry) kurmak, sorunlar\u0131 h\u0131zl\u0131ca tespit etmek ve \u00e7\u00f6zmek i\u00e7in kritik \u00f6neme sahiptir. Her mikro frontend'in kendi telemetri verilerini bu merkezi sistemlere g\u00f6ndermesi sa\u011flanmal\u0131d\u0131r.<\/p>\n<p>Bu g\u00fcvenlik ve s\u00fcrd\u00fcr\u00fclebilirlik stratejilerini uygulayarak, Module Federation ile kurdu\u011funuz Angular mikro frontend mimarisinin uzun vadede hem g\u00fcvenli hem de y\u00f6netilebilir kalmas\u0131n\u0131 sa\u011flayabilirsiniz. Unutmay\u0131n, teknik m\u00fckemmeliyet kadar, ekipler aras\u0131 ileti\u015fim ve ortak standartlar da bu mimarinin ba\u015far\u0131s\u0131 i\u00e7in kilit rol oynar.<\/p>\n<h2>Sonu\u00e7: Mikro Frontendler ile Gelece\u011fe Y\u00f6nelik Mimari<\/h2>\n<p>Angular ekosisteminde Mikro Frontend mimarisi, \u00f6zellikle Webpack 5'in Module Federation \u00f6zelli\u011fi ile birle\u015fti\u011finde, b\u00fcy\u00fck \u00f6l\u00e7ekli ve karma\u015f\u0131k web uygulamalar\u0131n\u0131n geli\u015ftirme ve s\u00fcrd\u00fcr\u00fclebilirlik sorunlar\u0131na g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunmaktad\u0131r. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar\u0131 a\u015farak, tak\u0131mlar\u0131n ba\u011f\u0131ms\u0131z bir \u015fekilde \u00e7al\u0131\u015fmas\u0131na, teknolojileri daha esnek bir \u015fekilde se\u00e7mesine ve uygulamalar\u0131n\u0131 kademeli olarak \u00f6l\u00e7eklendirmesine olanak tan\u0131r. Bu rehberde, Module Federation'\u0131n temel prensiplerinden Angular projelerinde ad\u0131m ad\u0131m nas\u0131l uygulanaca\u011f\u0131na, ger\u00e7ek d\u00fcnya senaryolar\u0131ndan performans optimizasyonuna ve g\u00fcvenlik stratejilerine kadar bir\u00e7ok konuyu ele ald\u0131k.<\/p>\n<p>Module Federation, dinamik kod payla\u015f\u0131m\u0131n\u0131 ve asenkron mod\u00fcl y\u00fcklemesini basitle\u015ftirerek, Angular'\u0131n g\u00fc\u00e7l\u00fc bile\u015fen tabanl\u0131 yap\u0131s\u0131yla m\u00fckemmel bir uyum sergiler. Bu sayede, \"\u00fcr\u00fcn kart\u0131\" gibi k\u00fc\u00e7\u00fck bir bile\u015fenden, \"\u00f6deme\" gibi karma\u015f\u0131k bir i\u015flevsel mod\u00fcle kadar her \u015feyi ba\u011f\u0131ms\u0131z olarak geli\u015ftirip host uygulaman\u0131za sorunsuz bir \u015fekilde entegre edebilirsiniz. Bu yakla\u015f\u0131m, geli\u015ftirme ekiplerinin verimlili\u011fini art\u0131rman\u0131n yan\u0131 s\u0131ra, uygulaman\u0131n esnekli\u011fini ve gelece\u011fe y\u00f6nelik s\u00fcrd\u00fcr\u00fclebilirli\u011fini de garanti eder. Mikro Frontendler ve Module Federation ile art\u0131k Angular projeleriniz, de\u011fi\u015fen i\u015f ihtiya\u00e7lar\u0131na \u00e7ok daha h\u0131zl\u0131 adapte olabilen, \u00e7evik ve \u00f6l\u00e7eklenebilir bir yap\u0131ya kavu\u015facakt\u0131r.<\/p>\n<p>Bu teknolojilerin potansiyelini tam olarak ke\u015ffetmek i\u00e7in kendi projelerinizde denemeler yapmaktan \u00e7ekinmeyin. K\u00fc\u00e7\u00fck ad\u0131mlarla ba\u015flayarak, mevcut monolitik uygulaman\u0131z\u0131n belirli bir b\u00f6l\u00fcm\u00fcn\u00fc mikro frontend'e d\u00f6n\u00fc\u015ft\u00fcrerek veya yeni bir \u00f6zellik geli\u015ftirirken bu mimariyi deneyerek adaptasyon s\u00fcrecinizi kolayla\u015ft\u0131rabilirsiniz. Gelece\u011fin web uygulamalar\u0131, \u015f\u00fcphesiz daha mod\u00fcler, da\u011f\u0131t\u0131k ve esnek yap\u0131lar \u00fczerine in\u015fa edilecek; Mikro Frontendler ve Module Federation da bu d\u00f6n\u00fc\u015f\u00fcm\u00fcn en \u00f6nemli ara\u00e7lar\u0131ndan biridir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<h4>1. Mikro Frontendler her proje i\u00e7in uygun mudur?<\/h4>\n<p>Hay\u0131r, her proje i\u00e7in uygun de\u011fildir. K\u00fc\u00e7\u00fck veya orta \u00f6l\u00e7ekli projelerde, monolitik bir mimari genellikle daha h\u0131zl\u0131 ve daha az karma\u015f\u0131k bir geli\u015ftirme s\u00fcreci sunar. Mikro Frontendler, \u00f6zellikle b\u00fcy\u00fck ekiplerin \u00e7al\u0131\u015ft\u0131\u011f\u0131, farkl\u0131 i\u015f alanlar\u0131na sahip, ba\u011f\u0131ms\u0131z da\u011f\u0131t\u0131m ve teknoloji esnekli\u011fi gerektiren \u00e7ok b\u00fcy\u00fck ve karma\u015f\u0131k uygulamalar i\u00e7in en b\u00fcy\u00fck fayday\u0131 sa\u011flar. Yanl\u0131\u015f uyguland\u0131\u011f\u0131nda, gereksiz karma\u015f\u0131kl\u0131k ve y\u00f6netim y\u00fck\u00fc getirebilir.<\/p>\n<h4>2. Module Federation'\u0131n alternatifi var m\u0131?<\/h4>\n<p>Evet, Module Federation, mikro frontendler i\u00e7in en modern ve verimli \u00e7\u00f6z\u00fcmlerden biri olsa da alternatifleri mevcuttur. Bunlar aras\u0131nda iframe'ler (izolasyon sa\u011flar ancak ileti\u015fim ve SEO sorunlar\u0131 yarat\u0131r), Web Components (framework ba\u011f\u0131ms\u0131z bile\u015fenler olu\u015fturma), tek sayfa uygulamalar\u0131n\u0131n manuel olarak birle\u015ftirilmesi (build zaman\u0131 entegrasyonu) veya Nginx gibi bir reverse proxy arac\u0131l\u0131\u011f\u0131yla farkl\u0131 uygulamalar\u0131n birle\u015ftirilmesi (sunucu taraf\u0131 kompozisyon) say\u0131labilir. Ancak Module Federation, \u00e7al\u0131\u015fma zaman\u0131nda dinamik kod payla\u015f\u0131m\u0131 ve ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimindeki \u00fcst\u00fcnl\u00fc\u011f\u00fcyle \u00f6ne \u00e7\u0131kar.<\/p>\n<h4>3. Mikro Frontendler uygulaman\u0131n performans\u0131n\u0131 nas\u0131l etkiler?<\/h4>\n<p>Do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131nda, Mikro Frontendler performans\u0131 art\u0131rabilir. Dinamik y\u00fckleme (lazy loading) sayesinde kullan\u0131c\u0131lar yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 kodu indirir. <code>shared<\/code> mod\u00fcllerin ak\u0131ll\u0131ca kullan\u0131lmas\u0131yla ortak ba\u011f\u0131ml\u0131l\u0131klar yaln\u0131zca bir kez y\u00fcklenir. Ancak yanl\u0131\u015f yap\u0131land\u0131r\u0131l\u0131rsa (\u00f6rne\u011fin, ba\u011f\u0131ml\u0131l\u0131klar\u0131n birden fazla kopyas\u0131n\u0131n y\u00fcklenmesi, gereksiz mikro frontend y\u00fcklemeleri), performans\u0131 olumsuz etkileyebilir. Dikkatli planlama ve optimizasyon kritik \u00f6neme sahiptir.<\/p>\n<h4>4. Ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi nas\u0131l yap\u0131l\u0131r?<\/h4>\n<p>Module Federation'\u0131n <code>shared<\/code> \u00f6zelli\u011fi ba\u011f\u0131ml\u0131l\u0131k y\u00f6netiminin anahtar\u0131d\u0131r. Bu \u00f6zellik sayesinde, Angular ve di\u011fer b\u00fcy\u00fck k\u00fct\u00fcphanelerin tekil (singleton) kopyalar\u0131n\u0131 t\u00fcm mikro frontendler aras\u0131nda payla\u015fabilirsiniz. <code>strictVersion: true<\/code> ve <code>requiredVersion: &#039;auto&#039;<\/code> gibi se\u00e7enekler, versiyon uyumsuzluklar\u0131ndan kaynaklanan hatalar\u0131 \u00f6nlemeye yard\u0131mc\u0131 olur. Ekipler aras\u0131nda ortak ba\u011f\u0131ml\u0131l\u0131klar\u0131n versiyonlar\u0131 konusunda tutarl\u0131 bir politika benimsemek de \u00f6nemlidir.<\/p>\n<h4>5. Angular d\u0131\u015f\u0131ndaki framework'lerle \u00e7al\u0131\u015f\u0131r m\u0131?<\/h4>\n<p>Evet, Module Federation, Webpack'in bir \u00f6zelli\u011fi oldu\u011fu i\u00e7in Angular ile s\u0131n\u0131rl\u0131 de\u011fildir. Farkl\u0131 JavaScript framework'lerini (React, Vue, Svelte vb.) kullanan uygulamalar aras\u0131nda kod ve mod\u00fcl payla\u015f\u0131m\u0131n\u0131 destekler. Hatta bir Angular mikro frontend'ini bir React host uygulamas\u0131na veya tam tersine entegre etmek bile m\u00fcmk\u00fcnd\u00fcr. Bu, teknoloji esnekli\u011finin en b\u00fcy\u00fck g\u00f6stergelerinden biridir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1488],"tags":[],"class_list":{"0":"post-33578","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-angular","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Mikro Frontendler Angular&#039;da: Module Federation ile Pratik Rehber<\/title>\n<meta name=\"description\" content=\"Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik ve esneklik gibi kritik ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabiliyor. Peki, Angular projelerinizde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in daha mod\u00fcler, ba\u011f\u0131ms\u0131z ve verimli bir yakla\u015f\u0131m benimsemek m\u00fcmk\u00fcn m\u00fc? Bu rehber, Angular tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 Mikro Frontend mimarisine ta\u015f\u0131rken, Webpack 5&#039;in g\u00fcc\u00fc olan Module Federation&#039;\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mikro Frontendler Angular&#039;da: Module Federation ile Pratik Rehber\" \/>\n<meta property=\"og:description\" content=\"Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik ve esneklik gibi kritik ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabiliyor. Peki, Angular projelerinizde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in daha mod\u00fcler, ba\u011f\u0131ms\u0131z ve verimli bir yakla\u015f\u0131m benimsemek m\u00fcmk\u00fcn m\u00fc? Bu rehber, Angular tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 Mikro Frontend mimarisine ta\u015f\u0131rken, Webpack 5&#039;in g\u00fcc\u00fc olan Module Federation&#039;\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-04T14:31:59+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Mikro Frontendler Angular&#8217;da: Module Federation ile Pratik Rehber\",\"datePublished\":\"2025-11-04T14:31:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/\"},\"wordCount\":5476,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Angular\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/\",\"name\":\"Mikro Frontendler Angular'da: Module Federation ile Pratik Rehber\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-04T14:31:59+00:00\",\"description\":\"Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik ve esneklik gibi kritik ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabiliyor. Peki, Angular projelerinizde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in daha mod\u00fcler, ba\u011f\u0131ms\u0131z ve verimli bir yakla\u015f\u0131m benimsemek m\u00fcmk\u00fcn m\u00fc? Bu rehber, Angular tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 Mikro Frontend mimarisine ta\u015f\u0131rken, Webpack 5'in g\u00fcc\u00fc olan Module Federation'\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mikro Frontendler Angular&#8217;da: Module Federation ile Pratik Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mikro Frontendler Angular'da: Module Federation ile Pratik Rehber","description":"Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik ve esneklik gibi kritik ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabiliyor. Peki, Angular projelerinizde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in daha mod\u00fcler, ba\u011f\u0131ms\u0131z ve verimli bir yakla\u015f\u0131m benimsemek m\u00fcmk\u00fcn m\u00fc? Bu rehber, Angular tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 Mikro Frontend mimarisine ta\u015f\u0131rken, Webpack 5'in g\u00fcc\u00fc olan Module Federation'\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Mikro Frontendler Angular'da: Module Federation ile Pratik Rehber","og_description":"Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik ve esneklik gibi kritik ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabiliyor. Peki, Angular projelerinizde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in daha mod\u00fcler, ba\u011f\u0131ms\u0131z ve verimli bir yakla\u015f\u0131m benimsemek m\u00fcmk\u00fcn m\u00fc? Bu rehber, Angular tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 Mikro Frontend mimarisine ta\u015f\u0131rken, Webpack 5'in g\u00fcc\u00fc olan Module Federation'\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-04T14:31:59+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"30 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Mikro Frontendler Angular&#8217;da: Module Federation ile Pratik Rehber","datePublished":"2025-11-04T14:31:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/"},"wordCount":5476,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Angular"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/","name":"Mikro Frontendler Angular'da: Module Federation ile Pratik Rehber","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-04T14:31:59+00:00","description":"Modern web uygulamalar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, onlar\u0131 geli\u015ftirmek ve s\u00fcrd\u00fcrmek giderek zorla\u015f\u0131yor. Monolitik yap\u0131lar\u0131n getirdi\u011fi k\u0131s\u0131tlamalar, ekiplerin h\u0131z\u0131n\u0131 yava\u015flat\u0131rken, \u00f6l\u00e7eklenebilirlik ve esneklik gibi kritik ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabiliyor. Peki, Angular projelerinizde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in daha mod\u00fcler, ba\u011f\u0131ms\u0131z ve verimli bir yakla\u015f\u0131m benimsemek m\u00fcmk\u00fcn m\u00fc? Bu rehber, Angular tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 Mikro Frontend mimarisine ta\u015f\u0131rken, Webpack 5'in g\u00fcc\u00fc olan Module Federation'\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/mikro-frontendler-angularda-module-federation-ile-pratik-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Mikro Frontendler Angular&#8217;da: Module Federation ile Pratik Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33578"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33578\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}