.NET Core 3.0 ile Katmanlı Mimari – Murat Demirci
Gönderi tarihi Temmuz 27, 2019 Temmuz 28, 2019 Murat Demirci tarafından
Bu uzun makalemde .NET Core 3.0 ile NextERP adlı bir mobil+web uygulamasının altyapısını hep birlikte hazırlayacağız. Öncelikle bilgisayarınıza aşağıdaki yazılımları yükleyiniz:
.NET Core 3.0 Preview 7+
Projemize öncelikle backendi hazırlayarak başlıyoruz. Backendi katmanlı mimari ile hazırlayacağız. Bunun için mimarisel paternlerden Onion Architecture’ı (Soğan Mimarisini) kullanacağız. Ancak Service katmanını CQRS ile hazırlayarak Web API’yi generic yapacağız, bunun getirdiği avantajları kodları görünce zaten anlayacaksınız diye tahmin ediyorum.
NextERP.Model (entity’ler ve enum’lar burada bulunur)
NextERP.Data (DbContext’imiz, model builder, generic repository ve unitofwork sınıflarımız burada bulunur)
NextERP.Service (command’lar, query’ler ve command handler’lar burada bulunur)
NextERP.Api (web apimiz burada bulunur; mobil uygulama ve web uygulaması bu katmanla iletişim kurar.)
NextERP.Mobile (ionic mobil uygulamamız burada bulunur)
NextERP.Web (angular web uygulamamız burada bulunur)
NextERP.Tests (unit testlerimiz burada bulunur, Selenium Web Driver’ı da bu katmanda kullanabiliriz.)
Autofac ve AutoMapper
Tüm katmanlarda dependecy injection için IoC container’ı kullanacağız. Backend’de Autofac IoC container’ını kullanacağız. Ayrıca entity’lerimizle command ve query’lerimiz arasında otomatik veri ataması için AutoMapper’ı kullanacağız.
Üyelik Sistemi için Microsoft ASP.NET Core Identity’yi kullanacağız. Böylece developerlarımız dahi müşterilerimizin şifrelerini bilemeyecek (yine de veri sorumlusunun dikkatli olması lazım 😉 ) .NET Core’daki Identity, IdentityServer4 paketleri ile SSO özelliği içeriyor ve Angular/Ionic uygulamaları JWT ile kolaylıkla güvenli hale getirilebiliyor.
Bu projede CosmosDB ve Firebase gibi sadece yurtdışı bulutlarında bulunan ve bundan dolayı KVKK’ya (GDPR) aykırılık oluşturan veritabanları yerine kendi sunucumuza yükleyebileceğimiz No-SQL veritabanlarından MongoDB kullanacağız.
Mail ve SMS Server
Üyelik sistemimizin göndereceği e-postalar ve sms’ler için KVKK gereği yurtiçi çözümler tercih edilmelidir. Bu nedenle SendGrid, Gmail, Office 365 gibi çözümlerden KVKK cezaları almamak için uzak durmak ve yurtiçi çözümleri tercih etmek gerekiyor.
Projemizin hostingi (barındırılması) için de KVKK gereği yurtiçi sunucuları tercih etmemiz gerekiyor. Kurumunuz bünyesinden yayın yapmak için duyduğum kadarıyla ruhsat gerektiğinden ülkemizdeki profesyonel hosting firmaları ile çalışmanız, yurtiçi bulutlardan sanal sunucu kiralamanızı tavsiye ederim. Sunucularınızın önünde IPS özellikli firewall olduğundan emin olunuz. Kritik önemde bir proje yapıyorsanız DDOS saldırılarını önleyen çözümler de kullanınız. Hosting firmanızla bilgisayarınız arasında iletişim için VPN kullanınız, VPN kullanmadan uzak masaüstü erişimi açmayınız.
Kullanıcıların kişisel verilerini korumak için API katmanımızın forward secrecy güvenliği yapılmış SSL sertifikasını kullanarak HTTPS üzerinden yayın yapması ve Web katmanındaki Angular projemizin de HTTPS üzerinden yayın yapması kritik önemdedir. Bu arada TLS 1.3 kullananlara 0-RTT özelliğinin Web API’lerde replay saldırısına yol açabildiğini hatırlatmak istiyorum. Bu nedenle TLS 1.3 kullanacaksanız 0-RTT’yi kapalı tutmanızda fayda var.
CDN (Content Delivery Network) Kullanmıyoruz
CDN’lerin güvenlik zayıflığı oluşturduğunu hatırlatalım. Uygulamamızın yurtdışına bağımlılığını azaltmak için CDN kullanmak yerine kütüphaneleri projemize dahil edip o şekilde kullanmayı tercih edeceğiz.
Yedekleme ve Kaynak Denetimi
Veritabanı yedeklemesinin otomatik yapılması için başından yurtiçinde güvenli bir storage’a yedekleme sistemi kurmanızı öneririm. Kaynak denetimi için biz şimdilik GitHub kullanacağız, fakat size kurumunuz bünyesinde TFS (Team Foundation Server) gibi yerel bir Git çözümü kullanmanızı öneririm; böylece kodlar her zaman elinizin altında olur. TFS’in çökme ihtimaline karşı çalışmalarınızı güvenli bir ortamda yedeklemeyi ihmal etmeyiniz.
Cache için Redis
Daha önce Redis kullanmadım ama bu projede Redis’i deneyimlemek için bir örnek kullanım eklemek istiyorum. Net Core’un içindeki In-Memory cache özelliğinden farklı olarak Redis bize cluster ortamlarında da paylaşımlı yüksek performans cache imkanı sağlıyor diye biliyorum. Bu nedenle piyasada yaygın olarak kullanılıyor, biz de kullanmayı deneyeceğiz.
KVKK ve Audit Logging
KVKK gereği Data katmanımıza Audit Logging ekleyeceğiz. Hataları loglamak için yine yurtdışı bulut çözümleri yerine KVKK nedeniyle kendi MongoDB veritabanımızı tercih edeceğiz. Audit loglarının raporlanabilmesini de sağlamamız gerekiyor. KVKK aslında sadece değişikliklerin değil kişisel verilere yapılan okuma işlemlerinin de loglanmasını gerektiriyor, hatta belki de bunu veritabanı seviyesinde yapmak bile gerekebilir ki böylece müşterilerimizin kişisel verilerine kimler tarafından, ne zaman, ne amaçla erişim sağlandığının raporunu verebilelim.
Çalışma Ortamı Güvenliği
Hacker’lara ve yapay zekalara karşı önlem almak amacıyla çalışma ortamınızı da güvenli hale getirmelisiniz. Şirketinizin IPS özellikli kaliteli bir firewall kullanması, Wi-Fi yerine kablolu networkü tercih etmek veya Wi-Fi’lerde mac adresi filtrelemesi yapmak, sunucularda, bilgisayarlarda ve telefonlarda ücretli ve kaliteli antivirüs yazılımları kullanmak, şifrelerin güvenliğine dikkat etmek, çalışmalarınızı şirket içinde (ve felâket planlaması gereği bir kopyasını da şirket dışında) güvenli bir storage’a düzenli olarak yedeklemek gibi alınabilecek çeşitli güvenlik önlemleri var, bunları ihmal etmeyiniz. Felâket planlaması gereği production’daki uygulamanızı ve veritabanınızı da yurtiçinde farklı bir şehirde güvenli bir lokasyona düzenli olarak yedeklenmesi oldukça önemlidir. Yedeklere erişimler de güvenli olmalı ve yedekleme güvenli bir ağ (VPN veya doğrudan bağlantı) üzerinden yapılmalıdır.
Makalemiz devam edecek…