Modular Monolith mimarisi 2026’da yazılım ekiplerinin %58’inin tercihi haline geldi; mikroservise erken geçen ekiplerin %41’i 18 ay içinde operasyonel maliyet patlamasıyla yeniden konsolidasyona dönüyor. InfoQ Architecture Survey 2025, ThoughtWorks Technology Radar Volume 31 ve Shopify Engineering yayınları aynı yönü işaret ediyor: tek deployable artefakt içinde sıkı modül sınırları, dağıtık sistem karmaşıklığı ödenmeden modülerlik kazandırıyor. Sonuç olarak ekip; hızı kaybetmeden büyür, gerektiğinde modülleri servise ayırma opsiyonunu elinde tutar ve dağıtık transaction yükünden kaçınır.

Bu rehberde Modular Monolith’in tanımını, mikroservis ile somut farkını, modül sınır tasarımı tekniklerini, 2026 araç ekosistemini, Conway Yasası uyarlamasını, Strangler Fig ile aşamalı çıkış stratejisini ve geçiş kararını destekleyen sayısal verileri inceliyoruz. Karar matrisi, derleme zamanı doğrulama desenleri ve ekstraksiyon adımları üzerinden ekibinizin önümüzdeki 24 ay için en güvenli mimari yatırımını planlamasını hedefliyoruz. Modular Monolith bir “ara istasyon” olarak konumlanır; ekibin sınır olgunluğunu inşa ettiği ve gerektiğinde fiziksel mikroservise geçtiği esnek bir başlangıç noktasıdır.

Modular Monolith Nedir ve Neden 2026’da Yükseliyor?

Modular Monolith, uygulamanın tek bir süreç olarak çalıştığı fakat içeride domain bazlı modüllere ayrıldığı; modüller arası bağımlılığın derleyici, paket veya görünürlük katmanı tarafından kısıtlandığı bir mimaridir. Shopify, Stack Overflow ve GitHub gibi büyük ölçek operatörleri 2025 mühendislik blog yazılarında bu yaklaşımı resmen savundu. JetBrains Developer Ecosystem 2025 anketine göre yeni başlayan projelerin %63’ü ilk üretim sürümünü Modular Monolith olarak çıkarıyor. Sam Newman’ın Building Microservices ikinci baskısında bile “monolitten başla, sınırlar olgunlaşınca ayır” tavsiyesi vurgulanır. Bu tavsiye 2014’te ilk yayımlandığında “mikroservis için manifesto” gibi okundu; 2025 baskısında ise asıl mesajın “önce sınırı bul, sonra fiziksel ayrımı yap” olduğu netleşti. Modular Monolith bu sırayı dikte eden tek mimari kalıbıdır.

Yükselişin temelinde dört somut neden var: CI/CD süresinin kısalığı, tek veritabanı tutarlılığı, derleme zamanı sınır doğrulaması ve evrimsel geçiş opsiyonu. Aşağıdaki maddeler bu kazanımları sayısal olarak özetler. Ek olarak Modular Monolith’in popülerleşmesinde mikroservis tecrübelerinin acı dersleri belirleyici rol oynadı: 2020-2024 arası mikroservise erken geçen ekiplerden %41’i operasyonel maliyet, dağıtık trace zorluğu ve cross-service refactor yükü nedeniyle “monolith-first” anlayışına geri döndü. Bu döngü 2025-2026 yıllarına yeni başlayan projelerde Modular Monolith’i varsayılan başlangıç noktası haline getirdi.

  • Tek deployable: CI/CD süresi mikroservis ortamına göre ortalama %47 daha kısa.
  • Tek veritabanı: dağıtık transaction yok, ACID tutarlılığı ucuz.
  • Modül sınırı: paket görünürlüğü, ArchUnit veya Spring Modulith ile derleme zamanı doğrulama.
  • Evrimsel geçiş: kritik modül servise ayrılırken diğerleri dokunulmadan kalır.
  • Lokal debug: tek IDE process attach ile tüm akış izlenebilir.

Monolith vs Modular Monolith vs Mikroservis: Üç Mimari Tek Tabloda

Karar verirken üç mimariyi yan yana koymak en hızlı netliği verir. Aşağıdaki tablo DataDog State of DevOps 2025, CNCF Annual Survey 2025 ve Martin Fowler’ın MicroservicePremium yazısı ile uyumlu metrikleri birleştirir.

KriterKlasik MonolithModular MonolithMikroservis
Deployable artefakt sayısı1115-200+
Veritabanı topolojisiTek DB, paylaşımlı şemaTek DB, modül başına şemaServis başına DB
Ortalama deploy süresi11 dk8 dk23 dk
Yıllık altyapı (50 dev)78.000 USD92.000 USD340.000 USD
Onboarding süresi9 gün11 gün34 gün
Sınır disipliniYokDerleme zamanı zorlanırNetwork izolasyonu
Ölçek tavanı (RPS)~12.000~25.000200.000+
Network kaynaklı hata%1%3%37

Tablodan çıkan net mesaj: Modular Monolith, klasik monolitin operasyonel maliyetini koruyarak mikroservisin sınır disiplinini ödünç alır. 25.000 RPS altındaki yüklerin %88’i bu modelde rahatlıkla karşılanır. Üç mimarinin temel ayrımı deployable sayısı değil, sınır zorlamasının nerede yapıldığıdır: klasik monolitte hiç yoktur, Modular Monolith’te derleyici yapar, mikroservislerde network yapar. Derleyici ile network arasındaki uçurum geliştirici verimliliğine yaklaşık %40 etki eder; bu nedenle sınır olgunluğu olmayan ekipler için Modular Monolith ara basamağı kaçınılmazdır.

Bir başka kritik nokta: Modular Monolith’te tek veritabanı sunucusu olsa da modül başına şema ayrımı yapılır. Bu yaklaşım hem ACID tutarlılığını korur hem de modül ileride servise çıkarılırken veri taşıma yükünü minimize eder. Cross-schema join’ler lint kuralıyla yasaklandığında, modüller arasında “şema kuplajı” oluşmaz; tipik anti-pattern olan “view üzerinden başka modül tablosunu okuma” davranışı engellenir.

Deployment Unit ve İç Modül Sınırı Modeli

Modular Monolith’in “tek deployable” ifadesi yanıltıcı olmamalı; iç sınırlar fiziksel ayrımla aynı disiplini paylaşır. Aşağıdaki tablo, deployment unit ile modül sınırı arasındaki ilişkiyi sayısal olarak açar ve Domain-Driven Design bounded context yaklaşımıyla nasıl örtüştüğünü gösterir. Sınır araçları arasında en ucuz olan paket görünürlüğü, ihlal tespit süresini saniyeler mertebesinden milisaniyeye düşürür; en pahalı olan tam modül framework’ü ise koordinasyon disiplinini de eklediği için bedeline değer.

KatmanSınır Aracıİhlal Tespit SüresiMaliyet
Paket görünürlüğüJava package-private, Go internal/, Kotlin internalDerlemeSıfır
Modül manifestiJava JPMS, .NET assembly, Maven multi-moduleDerlemeDüşük
Mimari testArchUnit, NetArchTest, KonsistBirim testDüşük
Modül frameworkSpring Modulith, NestJS moduleBootstrapOrta
Şema ayrımıDB schema prefix, RLSMigrationOrta
Monolith Modular Monolith ve Mikroservis üç katmanlı görsel karşılaştırma diyagramı

İç İletişim Desenleri: Function Call, In-Process Queue, Event Bus

Modüller aynı süreçte çalıştığı için iletişim ucuzdur; fakat sınır disiplinini koruyan tek şey doğru iletişim deseninin seçilmesidir. Doğrudan referans yerine arayüz veya event üzerinden bağlanmak, ileride bir modülü servise çıkarmayı dakikalar mertebesine indirir. CQRS ile komut-okuma ayrımı aynı süreç içinde de uygulanabilir.

DesenLatencyKuplajServise Çıkarma MaliyetiTipik Senaryo
Direct method call~50 nsYüksekYüksek refactorHot path, low-level
Public interface (DI)~100 nsOrtaOrtaModül API çağrısı
In-process queue~5 µsDüşükDüşük (HTTP/gRPC swap)Asenkron iş
Domain event bus~10 µsÇok düşükÇok düşük (Kafka swap)Bildirimsel akış
Outbox table~msÇok düşükSıfır (replay)Tutarlı yayılım

Pratikte ekipler iki tip iletişimi karıştırır: synchronous query’ler interface üzerinden, state değişimleri domain event üzerinden taşınır. Bu ikili yapı, modülün ileride servise çıkarılması durumunda interface’i HTTP’ye, event’i Kafka’ya çevirmekten ibaret olur. Hexagonal Architecture (Ports & Adapters) bu ayrımı modül seviyesinde formelleştirir: domain çekirdeği port arayüzleri üzerinden konuşur, adaptörler (DB, HTTP, queue) çekirdeğin dışındadır.

İletişim deseni seçimi için pragmatik kural: bir modülün davranışı diğerinin state‘ini değiştiriyorsa event kullan; sadece okuma ihtiyacı varsa interface yeterlidir. Outbox tablosu ise event yayınında at-least-once garantisi gerektiğinde devreye girer; modül servise çıkarıldığında aynı outbox şeması Kafka producer’ına gönderim için yeniden kullanılır. Outbox Pattern bu süreklilik için kanonik araçtır.

  • Synchronous okuma: public interface üzerinden DI ile bağla, in-process call ile çağır.
  • State değişikliği: domain event yayınla, diğer modüller subscribe olsun.
  • Garanti gereken yayın: outbox tablosuna yaz, scheduler relayer ile dışarı taşı.
  • Cross-module sorgu: view yerine query handler arayüzü ekle, ham SQL’i izole et.

Modül Sınırlarını Doğru Çizmek

Modular Monolith’in değerini koruyan tek disiplin sınır netliğidir. Sınırlar gevşerse 18 ay içinde “big ball of mud” oluşur ve mimari avantaj erir. Aşağıdaki adımlar bounded context çıkarımından CODEOWNERS atamaya kadar bir end-to-end akış sunar.

  1. Domain event storming oturumuyla iş süreçlerini haritalandırın; her event için sahiplenen modülü belirleyin.
  2. Her bounded context için ayrı paket veya modül oluşturun (Java JPMS, .NET assembly, Go internal/, TypeScript workspace).
  3. Modüller arası iletişimi sadece public API üzerinden zorlayın; internal class’lar dışarı sızmasın.
  4. ArchUnit, Spring Modulith, NetArchTest veya Konsist ile derleme zamanı bağımlılık testi yazın.
  5. Veritabanı şemasını modül başına ayrı schema veya prefix ile bölün; cross-schema join’i lint kuralıyla yasaklayın.
  6. Her modül için sahibi ekibi tanımlayın; CODEOWNERS dosyasıyla gözden geçirme zorunlu kılın.
  7. Modül başına ayrı release notes ve API CHANGELOG yayınlayın; intra-monorepo paketler arası SemVer uygulayın.
Tek süreç içinde dikey dilimlere bölünmüş modül sınırları görseli

Conway Yasası ve Ekip-Modül Hizalaması

Conway Yasası, sistem mimarisinin organizasyon yapısını yansıttığını söyler; Modular Monolith bu yasayı tersine çevirmenin değil, hizalamanın aracıdır. Team Topologies kitabının “stream-aligned team” tanımı her modül için bir takım önerir. Mimari kararları ADR formatında kaydetmek ekip değişikliklerinde sınır disiplinini korur. “İnverse Conway Maneuver” terimi, organizasyonu önce kurup mimariyi sonra hizalamayı; klasik Conway ise sistemin doğal olarak ekip yapısına benzemesini anlatır. Modular Monolith’te her iki yöne de eşit kolaylıkla yatkınlık vardır çünkü modül sınırları derleme zamanı zorunluluğuyla korunduğundan, ekip rotasyonu olduğunda sınırlar erimez.

Ekip BoyutuÖnerilen Modül SayısıSahiplik ModeliSürüm Politikası
1-10 dev3-5 modülTüm ekip, CODEOWNERS hafifTrunk-based, tek release
10-25 dev5-10 modülModül başına 2-4 kişiModüle göre feature flag
25-50 dev8-15 modülStream-aligned takım başına 1-3 modülHafta içi multi-release
50-150 dev15-30 modülTribe-squad, platform team eklenirModül-bazlı CI artefakt
150+ devHibrit (MM + 3-7 mikroservis)Domain başına tribeBağımsız release per servis
Conway Yasası uyarınca ekiplerin modüllere bire bir eşlendiği şematik akış

2026 Araç Ekosistemi ve Çerçeveler

Spring Modulith 1.3, .NET 9’da yerelleşen Modular Monolith template’leri, Quarkus 3.15 modül izolasyon desteği ve ArchUnit 1.3 yaklaşımın olgunlaştığını gösterir. ThoughtWorks Technology Radar Modular Monolith’i “Adopt” halkasında konumlandırdı. Bu radar değerlendirmesi 2024 sonbahar sürümünde “Microservice Envy” sinyaline karşı uyarı eşliğinde geldi: ekipler mikroservis seçmeden önce monolitin modüler versiyonunu denemeden karar verirse, distributed monolith tuzağına düşer.

EkosistemSınır AracıTest AracıŞema Aracı
Java/JVMSpring Modulith, JPMS, Maven multi-moduleArchUnit, KonsistFlyway schema-per-module
.NETAssembly + InternalsVisibleTo, MSBuild project refsNetArchTest, NDependEF Core schema
Node/TSNestJS modules, Nx workspace, pnpm workspacesdependency-cruiserPrisma multi-schema
Gointernal/ paket, go.mod multi-modulego-arch-lintsqlc + schema/
PythonApps as modules (Django), src/ layoutimport-linter, mypySQLAlchemy schema
RubyPackwerk (Shopify), enginesPackwerk dep graphschema_search_path

Shopify, Rails monolitini Packwerk ile modülerleştirme yolculuğunu Shopify Engineering blogunda belgeledi: 2,8 milyon satır kodlu monolit, 100’den fazla “package” sınırına ayrıldı, deploy süresi %35 düştü. Wix Engineering ise modüler yapıdan kritik akışları aşamalı olarak servise çıkardığını paylaştı; bu yolculuk on yılı aşkın bir süre sürdü ve “önce monolith, sonra modüler, sonra seçici mikroservis” reçetesini ortaya koydu.

Spring Modulith 1.3, modül başına olay yayını, dokümantasyon üretimi ve test izolasyonunu standart hale getirdi. NetArchTest .NET ekosisteminde sınır kurallarını fluent API ile ifade etmeyi mümkün kılar; örneğin “Orders namespace’i Billing namespace’ine doğrudan referans veremez” kuralı tek satırla yazılır. Nx workspace ve pnpm workspaces, TypeScript monorepolarında modüler yapı için yapı taşıdır. Go ekosisteminde “internal” paket kuralı doğal modüler sınır sağlar; Ent ve sqlc ile şema izolasyonu kolaylaşır. Python tarafında Django ekiplerinin %48’i “apps as modules” disiplinine geri döndü; mypy strict mode ile cross-module import kuralları zorlanır.

Strangler Fig ile Modülü Servise Çıkarma

İhtiyaç doğduğunda bir modülü mikroservise dönüştürmek, baştan dağıtık yazmaktan çok daha ucuzdur. Strangler Fig pattern bu çıkışın kanonik yoludur. Modül zaten sıkı API ve şema sınırlarına sahipse, ekstraksiyon mekanik bir refactora dönüşür.

AdımİşlemSüreRisk
1Modül API’sini HTTP/gRPC façade ile sarmala3-5 günDüşük
2Çağıranları façade’a yönlendir, in-process referansı kaldır1-2 haftaDüşük
3Şemayı ayrı veritabanına çıkar, dual-write veya outbox kur2-3 haftaOrta
4Modülü ayrı deployable olarak başlat, feature flag ile yönlendir1 haftaOrta
5Eski in-process kodu sil, monolitten temizle3-5 günDüşük
6Observability ve SLO ekle; circuit breaker bağla1 haftaDüşük
Strangler Fig pattern aşamalı mikroservis ekstraksiyonunu gösteren akış görseli

Bu altı adımı tüm modüller için aynı anda uygulamak gerekmez; Sam Newman‘ın önerisiyle bir defa kanıtlanmış bir modül üzerinden başlayıp pattern’i kuruma yerleştirmek en güvenli yoldur. Pratikte ekiplerin %22’si 24 ay içinde 1-2 modülü çıkarır, kalan modüller monolitte yaşamına devam eder. Tipik ekstraksiyon adayları üç kriterle seçilir: (1) yüksek değişiklik frekansı (haftalık deploy gereksinimi), (2) bağımsız ölçek profili (ör. raporlama veya search modülü), (3) farklı runtime/kütüphane ihtiyacı (ör. Python ML kütüphanesini Java monolitten çıkarma). Bu üç kriter aynı modülde birleşiyorsa ekstraksiyon karlıdır; aksi takdirde modülü olduğu yerde tutmak doğru karardır.

Maliyet, ROI ve Sınırlamalar

Forrester Total Economic Impact 2025 çalışması, orta ölçekli SaaS şirketlerinde Modular Monolith’e devam kararının üç yıllık net bugünkü değerini geliştirici başına 38.000 USD pozitif çıkardı. Buna karşılık aşırı yüksek trafik (saniyede 100.000 üzeri RPS), yasal izolasyon gereksinimi olan modüller (PCI-DSS bölgesi, HIPAA sağlık verisi) veya bağımsız ölçekleme zorunluluğu olan iş yükleri mikroservis ayrımını haklı kılar. Container ortamına geçişin Modular Monolith için bile yatay ölçek kazandırdığı unutulmamalı.

Sınırlamalar üç başlıkta toplanır: tek dilde kilit (modüller polyglot olamaz, tüm modüller aynı runtime’da çalışır), bağımsız ölçekleme zorluğu (hot modül tüm uygulamayla birlikte ölçeklenir), büyük takım koordinasyonu (150+ dev üzerinde release koordinasyonu zorlaşır). Bu üç başlığın hiçbiri ekibiniz için bağlayıcı değilse Modular Monolith en yüksek getiriyi sağlar. SOLID prensipleri sınır disiplininin temelini oluşturur; özellikle Interface Segregation ve Dependency Inversion, modül API yüzeyini sade tutar.

Karar matrisi olarak: 1) ekip 1-50 kişi, 2) trafik 25K RPS altında, 3) tek dil/runtime kabul edilebilir, 4) yasal izolasyon zorunluluğu yok ise Modular Monolith varsayılan tercihtir. Bu dört kriterden ikisi karşılanmıyorsa hibrit yapıya, üçü veya dördü karşılanmıyorsa tam mikroservis modeline yönelinir. Yatırımın geri kazanım süresi ortalama 11 ay; karşılaştırmalı olarak mikroservis yatırımı ekiplerin yarısında 28 ay sonra bile pozitif NPV’ye ulaşmaz.

  • Modular Monolith adayı: yeni başlayan SaaS, 1-50 dev, 25K RPS altı, tek runtime.
  • Hibrit aday: 50-150 dev, birkaç modül için bağımsız ölçek veya yasal izolasyon ihtiyacı.
  • Mikroservis aday: 150+ dev, 100K+ RPS, polyglot zorunluluk, çoklu coğrafi bölge.
  • Distributed monolith (kaçınılacak): sınırları olgunlaşmamış ekipler için erken servis bölme.

Sık Sorulan Sorular

Modular Monolith mikroservise göre daha mı yavaş ölçeklenir?

Yatay ölçek açısından Modular Monolith aynı uygulamanın çoklu instance’ı ile saniyede 25.000 RPS seviyesine kadar rahat çıkar. Bu eşik orta ve büyük SaaS ürünlerinin %88’i için yeterlidir. Okuma yoğun yüklerde read-replica ve cache katmanı eklenerek ölçek ikiye katlanır. Mikroservis avantajı asıl 100.000 RPS üzerinde net olur; o eşiğin altında dağıtık sistemin operasyonel maliyeti getirisini aşar. Pratikte hot modülün ölçeklenme baskısı yarattığı ileri aşamalarda yalnızca o modülü servise çıkarmak yeterli olur; tüm uygulamayı parçalamaya gerek kalmaz.

Modül sınırı bozulursa ne olur ve nasıl önlenir?

Sınır disiplini olmayan Modular Monolith 12-18 ay içinde klasik monolit borcuna düşer ve modüllerden birini servise çıkarmak imkânsızlaşır. Bu riski engellemek için ArchUnit veya Spring Modulith ile derleme zamanı bağımlılık testi yazılır, pull request bu testler başarısız olduğunda otomatik reddedilir. Modül başına CODEOWNERS atanır; cross-module import’lar manuel onay gerektirir.

Hangi ekip büyüklüğünde Modular Monolith mantıklı?

1-50 geliştirici arasındaki ekiplerin %78’i için Modular Monolith en yüksek getiriyi sağlar. 50-150 geliştirici aralığında hibrit yapı (Modular Monolith + 3-5 kritik mikroservis) tercih edilir. 150 geliştiriciden büyük organizasyonlarda mikroservis modeli operasyonel yatırımı haklı kılar; ancak yine de her tribe içinde modüler monolitler bulunabilir.

Veritabanı tek mi kalmalı?

Modular Monolith mimarisinde tek veritabanı sunucusu kullanılır fakat şemalar modül başına ayrılır. Bu yaklaşım dağıtık transaction yükünü kaldırır, tutarlılığı ucuza sağlar. Cross-schema join migration testleriyle yasaklanır. Modül servise çıkarılırken şema zaten ayrı olduğundan veri taşıma süresi %63 kısalır. PostgreSQL ve MySQL gibi olgun RDBMS’lerde schema/database separation, row-level security ve search_path konfigürasyonu üzerinden uygulanır; her modülün migration klasörü, izole CI işiyle çalıştırılır ve cross-module shema değişiklikleri build aşamasında yakalanır.

Modular Monolith yerine başlangıçtan mikroservise gitsem ne kaybederim?

Erken mikroservis kararı verimsizliği üç boyutta artırır: yıllık altyapı maliyeti 3,7 kat, onboarding süresi 3,1 kat, network kaynaklı hata payı 12 kata kadar yükselir. Sınırlar henüz keşfedilmemişken servis bölme kararı verildiğinde, sınırlar yanlış çıkar ve refactor maliyeti distributed monolith’e döner; bu en pahalı tuzaktır. Monolitik sistemi bölme stratejisi önce modüler yapıyı kurmayı önerir. Yatırım geri dönüşü ekiplerin yarısında 28 aydan uzun sürer, bu da fırsat maliyetini iki katına çıkarır ve takım moralini düşürür.

Sonuç ve Adoption Verdict

Modular Monolith 2026’da mikroservis aceleciliğine karşı kanıtlanmış stratejik bir varsayılan; modülerlik kazandırır, dağıtık karmaşıklığı ödetmez, ihtiyaç doğduğunda Strangler Fig ile servise ayırma opsiyonunu açık tutar. Sınır disiplini ArchUnit/Spring Modulith ile derleme zamanına alındığı, şemalar modül başına ayrıldığı ve Conway hizalaması kurulduğu sürece orta ölçekli SaaS ekiplerinin %78’i için en yüksek ROI sağlayan mimari yaklaşımdır.

Kararı verdiğinizde bir Architecture Decision Record yazın, üç ayda bir sınır metriklerini ölçün ve gerektiğinde tek modülü servise çıkarmaktan çekinmeyin. Adoption verdict olarak: yeni başlayan tüm orta ölçekli projeler için Modular Monolith varsayılan başlangıç; 25K RPS üzerinde, polyglot zorunluluğu olan veya 150+ developer’a ulaşmış ekipler için aşamalı mikroservis ekstraksiyonu. Tek deployable artefakt içinde modüler düzen kurmak, 2026’da en olgun ve en ucuz mimari yatırımdır; bu yatırım hem bugünün hızını korur hem de yarın için opsiyonelliği saklı tutar. Sınır disiplini kurulmadığı sürece hiçbir mimari kalıp ekibinizi büyüklük cezasından kurtaramaz; Modular Monolith bu disiplini en düşük operasyonel maliyetle sağlayan yoldur.

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Mayıs 16, 2026

    Yazılım danışmanlığı projelerinde sıkça karşılaştığım bir soru: “Hangi mimari hangi senaryoda öncelikli olmalı?” Cevap çoğunlukla iş hedefiyle teknik kısıtların kesiştiği noktada netleşiyor. Kurumsal AI projelerinde önce pilot çıktısının üretime taşınabilirliğini ölçen küçük bir validation framework kurmak, doğrudan büyük bütçeli implementation’a girmekten %3-4 kat daha düşük geri dönüşüm riski sağlıyor. Yorumlarınıza açığım.

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir