Slide 1

Slide 1 text

JS ve Go’nun BFF ilişkisi Bileşenlerin güçlü yanlarından iyi bir sentez oluşturmak Eser Özvataf Head of Engineering @ Teknasyon GDG DevFest İstanbul 09 / 11 / 2024 eser.live

Slide 2

Slide 2 text

➔ Teknasyon’da Head of Engineering olarak çalışıyorum. ➔ 1996 yılından bu yana yazılım geliştiriyor, sektörü takip ediyorum. ➔ Alaylı ve okulluyum. ➔ Profesyonel olarak yönetici pozisyonlarında 10 yıllık bir deneyimim var. ➔ Yazılım geliştirmeye, geliştirme araçlarını takip etmeye hiç ara vermedim. ➔ Birçok açık kaynak proje ve topluluğa destek verdim, katkı sağladım, liderlik ettim. ➔ Şubat 2023 Kahramanmaraş depreminde gönüllülerle birlikte oluşturduğumuz Açık Yazılım Ağı’nda aktif görev aldım. ➔ YouTube üzerinde yayınlar yapıyorum. Ben kimim…

Slide 3

Slide 3 text

➔ Her sene yıl sonu düzenlenen Devfest’lerde “web uygulamaları geliştirme” alanında nasıl bir yıl olduğunun geçmiş dönük değerlendirmesini yapıyorum: ◆ 2022: 5 yıl sonraki JavaScript'e bugünden bakış ◆ 2023: 2024'e Girerken JavaScript: Yeni JavaScript runtime’larıyla bir ekosistem örmek ◆ ve bu yıl, 2024: JavaScript ve Golang’in BFF ilişkisi ➔ Bu yılki konunun motivasyonu, bana gelen soruların büyük bir çoğunluğu: ◆ AI dönüşümüne karşı nasıl refleks göstermeliyiz? ◆ Frontend bitti mi, full-stack mi olmamız gerekiyor? ◆ Sektör daralıyor ne yapmalıyız? ➔ Hepsinin ortak yanıtı ”eldeki araçları daha iyi kullanıp daha verimli bir geliştirme çıktısı elde etmek gerekiyor”, peki bunu sağlamak için piyasada hem yönetici hem de developer olarak devam eden bir profesyonel olarak ben neler yapıyorum?... …ve ne anlatacağım

Slide 4

Slide 4 text

[[]]]] 01 Paradigma Değişimi 02 Sentez Gereksinimi 03 Benim Önerim 04 Demo

Slide 5

Slide 5 text

Paradigma Değişimi - 2010lar

Slide 6

Slide 6 text

Paradigma Değişimi - 2020ler ve Mikroservisler Kazançlar: - Otonom ekipler - Duru codebaseler, Az pattern - Taşınabilirlik - Polyglot dünya - Daha düzgün domain tasarımı

Slide 7

Slide 7 text

Paradigma Değişimi - 2020ler, BFF ve Mikroservisler Kazançlar: - API sürümleme - Güvenlik

Slide 8

Slide 8 text

Sonra bir gün…

Slide 9

Slide 9 text

Paradigma Değişimi - React Server Components/Actions Kazançlar: - Hız - Az karmaşa - İyi bir streaming yüklenme deneyimi Kayıplar: ???

Slide 10

Slide 10 text

Sentez Gereksinimi - JS ile sil baştan mantıklı mı? ➔ Bu paradigma değişiminde bir şeyleri kaybettik! Birçok kişi web development’ta olan bu paradigma değişimini PHP’e geri dönüş olarak adlandırdı… Peki web development’ın bugününe nasıl gelmiştik, neler kazanmıştık? Şimdi aniden 2010’a döndüğümüzde kazanımlarımıza ne oldu? ➔ Yıllarca JavaScript evangelisti olsam da, bir mühendislik problemi için her aracın “iyi” olduğu bir koşul var. JavaScript’in karmaşık bir web mimarisinde yanına arkadaşlarını alması bize daha akılcı bir yazılım çözümü oluşturmamızı sağlayacaktır. Mesela…

Slide 11

Slide 11 text

Sentez Gereksinimi - Her aracın kendi güçlü yanları Golang JavaScript Statik, sıkı, derlenebilir Dinamik, esnek, yorumlanır Network performansı çok iyi 🫠 Sistem işlerine daha yakın Yazılımcıyı yormamaya odaklı İşlem overhead’i daha az Fazla kaynak tüketir Daha mikro, portatif uygulamalar yapılabilir Uygulamaları paketleme ihtiyacı vardır 🫠 Kullanıcı arabirimleri oluşturmak için çok iyi

Slide 12

Slide 12 text

➔ React ekibinin bir önceki slide’daki reçetesi birçok hali hazırdaki proje için uygulanabilir olmaktan çok uzak. Refactor’ ü geçelim çok ciddi yeniden yazma gereksinimi oluşuyor. ➔ React’ın Server Component/Server Actions ile birlikte getirdiği mimari yaklaşımı kullanabileceğimiz Next.js dışında başka bir framework de elimizde yokken bu yaklaşıma bu kadar yatırım yapmak akılcı olmayabilir. Mevcut mimariyi dönüştürecek veya ileride olası sorunlara karşı riski dağıtmamızı sağlayacak bir orta yola ihtiyaç var. Sentez Gereksinimi - Bu uygulanabilir bir reçete mi?

Slide 13

Slide 13 text

Benim önerim…

Slide 14

Slide 14 text

Benim Önerim - Best of two worlds

Slide 15

Slide 15 text

➔ JavaScript ekosisteminin sunucu tarafına uzanışını yok saymamak gerekiyor. ➔ Projeleri kompakt hale getirmek. Servisleri birlikte aynı dosya yapısında tutmak, kod paylaşımı yaptırmak gerçekten çok değerli. Bu küçülme, AI-assisted kodlama için de bir şans. ➔ Bilhassa büyük yapılarda polyglot yapıdan ödün vermemek, her dilin kendine özel güçlerini kullanmak gerekiyor. ➔ Örnek codebase: https://github.com/eser/acik.io/tree/template Benim Önerim - Best of two worlds

Slide 16

Slide 16 text

Benim Önerim - Best of two worlds ➔ Örnek codebase: https://github.com/eser/acik.io/tree/template

Slide 17

Slide 17 text

Benim Önerim - Best of two worlds Bonus: gRPC

Slide 18

Slide 18 text

Benim Önerim - Best of two worlds HTTP gRPC Kolay kullanım Protokolün net tanımlanması gerekiyor Yaygınlık 🫠 Esneklik Sürümlenmesi gerekir ama daha güvenilir Tek yönlü tetikleyene göre tasarlanmış Çift yönlü çalışabilir Stream/akış desteği biraz karışık Akış desteği var Okuma/yazma overhead’i fazla Daha performanslı

Slide 19

Slide 19 text

Benim Önerim - Best of two worlds Saniye İstek Ortalama JS HTTP 20 36268 1813.189942/s Go HTTP 20 444956 22247.171517/s go gRPC 20 670514 33519.617865/s Yerel bilgisayarımda (M1 Max - 32GB RAM) yaptığım benchmark sonucudur. Grafana/K6 araç olarak kullanılmıştır. Kodlar repository üzerinde bulunmaktadır.

Slide 20

Slide 20 text

Ufak örnek proje…

Slide 21

Slide 21 text

Çalışmalarımı https://eser.live üzerinden takip edebilirsiniz. Eser Özvataf Head of Engineering @ Teknasyon eser.live GDG DevFest İstanbul 09 / 11 / 2024 Teşekkürler