Nx ile Monolitik Microservices: Dosya Yapısı Nasıl Kurulur?
Nx workspace, büyük projeleri yönetmek için güçlü bir araç. Özellikle monolitik microservices mimarisi kurarken, doğru dosya yapısı başarının anahtarı oluyor. Peki bunu nasıl düzgün organize edebilirsin?
Öncelikle Nx'in temel konsepti anlamak gerekiyor. Nx, birden fazla uygulamayı ve kütüphaneleri tek bir repository içinde yönetmene izin veriyor. Monolitik microservices yaklaşımında da aynı prensip geçerli: her servis ayrı bir uygulama veya kütüphane olarak yapılandırılır, ancak hepsi aynı monorepo içinde yaşar.
Dosya yapısında temel bölümler şöyle oluşturulabilir: `apps/` klasörü altında her microservice için ayrı bir Next.js uygulaması (örneğin `apps/auth-service`, `apps/user-service`, `apps/product-service`), `libs/` klasörü altında ise paylaşılan kütüphaneler ve utility'ler (örneğin `libs/shared/utils`, `libs/shared/types`, `libs/auth/core`). Her servisin kendi domain logic'i ve API endpoint'leri olur, ancak ortak kod parçaları kütüphaneler aracılığıyla paylaşılır.
Praktik bir örnek vermek gerekirse, `libs/` içinde `shared` klasörü altında TypeScript type'larını, `utils` klasörü altında yardımcı fonksiyonları, `api-client` klasörü altında ise servisler arası iletişim için client'ları tutabilirsin. Her `apps/` uygulaması bu kütüphaneleri import edip kullanabilir. Bu yapı, kod tekrarını azaltır ve bakım kolaylaştırır.
Nx komutları da süreci hızlandırır. `nx generate @nx/next:app service-name` ile yeni bir Next.js uygulaması, `nx generate @nx/js:lib shared/utils` ile yeni bir kütüphane oluşturabilirsin. Dependency graph'ı görüntülemek için `nx graph` komutunu kullanarak hangi servisin hangi kütüphaneyi kullandığını takip edebilirsin.
Bir uyarı: monolitik yapı, başlangıçta hızlı olsa da, servisler büyüdükçe bağımlılıklar karmaşıklaşabilir. Kütüphaneleri mantıklı sınırlarla ayırmanız ve circular dependency'lerden kaçınmanız gerekiyor. Nx'in linting araçları bunu kontrol etmene yardımcı olur., Nx ile monolitik microservices yapısı kurduğunda, baştan disiplini sağlamak zaman kazandırır. Paylaşılan kodu kütüphanelerde tut, her servisin sorumluluğunu net tanımla ve dependency graph'ı düzenli kontrol et.
0 yorum