
Hemen hemen hepimiz uzun olmasa bile mutlaka yolculuklar yapmışızdır. Bazı yolculuklarımızı çok kolay planlıyorken bazıları için ise çok uzun ve detaylı planlar yapmak gerekebilir. Örneğin daha önce gitmediğiniz bir ülkeye gidecekseniz hakkında düşünmeniz gereken birçok konu olacaktır. Vize, ulaşım, kalınacak noktalar, gezilip görülecek yerler vs gibi.
Peki eğer siz bir kod parçası olsaydınız. Nasıl bir yolculuğunuz olurdu hiç merak ettiniz mi? Gelin birlikte bir yolculuğa çıkalım..

Yazılımcılar olarak çok farklı alanlarda çalışan uygulamalar geliştirebiliyoruz. Şüphesiz ki bunların içinden en yoğun olarak kullanılanları web siteleri için geliştirilen web projeleridir. Bugünkü yazımızda bir web projesi için geliştirilmiş kodun, bilgisayarımızdan çıkıp sunucularda yayınlana kadar geçirdiği yolculuğu konuşacağız.
Öncelikle web projelerinin nasıl çalıştığını anlamak için Client-Server mimarisine aşina olmak gerekiyor. Sunucularımız, bizim bir web projemizi barındırıp bunu bir “httpserver” uygulaması aracılığı ile belli protokolleri kullanarak kendisine istek yapan (client) kişilere sunar. Bu protokoller çoğunlukla HTTP (HyperText Transfer Protocol) kullanılarak internet tarayıcıları üzerinden yapılıyor. Client tarayıcı üzerinden bir websitesini görüntülemek için “http” protokolü üzerinden bir istek yapar, sunucu çıktıyı oluşturur ve client tarayıcısı üzerinden bu çıktıyı görür. Web projesi sunucuda çalışır ve isteği yapan kişiye sadece ulaşmak istediği isteğe ait çıktı üretilerek servis edilir. (WebAssembly gibi teknolojiler bir miktar farklı çalışır)
ASP.NET ile bir web projesi geliştirdiğimizi düşünelim. C# dilini kullanarak istediğimiz birkaç IDE (Integrated Development Environment) den birisi üzerinde bir kod geliştiriyoruz. Eğer Assembly dediğimiz düşük seviyeli kodlar geliştirmiyorsanız bu IDE’ler üzerinde yazmış olduğumuz kodlar üst seviye kodlar olarak adlandırılır. Üst seviye olması yazılım geliştirme aşamasında bize birçok avantaj sağlar. (Zaman, okunabilirlik, vs.)
Ancak bu üst seviye kodlarımızın da bilgisayarların anlayabileceği Assembly kodlarına dönüştürülmesi gerekir ki genelde derleme dediğimiz süreç ile birlikte bu işlem çok kısa sürelerde tamamlanır. Peki o zaman ilk adımımızı tamamladık. Bir web projesi geliştirdik artık bu projenin ikinci adımına geçmemiz gerekiyor.

Kalite kontrol ve projeyi yayınlama adımı bu aşamadaki en önemli adımlardan birisidir. Hem kodumuzun çalışabilirliği ve kalitesini ölçtüğümüz hem de kodumuzu kendisini barındıracak sunucuya ilettiğimiz aşamadır. Peki kod çalışabilirliği veya kalitesi nasıl ölçülür?
Çok fazla detaya girmemekle birlikte kod çalışırlığı için derleme, kalitesi için ise “Test” kavramları giriyor hayatımıza. Kodumuzda bir yazım(Syntax) yanlışı varsa zaten derleme işlemi tamamlanamamış olacaktır. Test konusu ise biraz daha çetrefilli. Zira kendisinin birçok çeşiti bulunmaktadır. (Unit Test, Integration Test, End-to-End test, Full Test gibi)
Peki diyelim kodumuzun çalıştığından ve testlerin de başarılı bir şekilde tamamlandığından emin olduk. Şimdi bu kodu nasıl sunucumuza taşıyacağız. Bu konuda sunucumuzun çeşidi ve sunucumuzda çalışan “httpserver” uygulamasının çeşidi önem kazanıyor. Örnek veriyorum Windows sunucu üzerinde IIS (Intenet Information Services). Windows sunucumuz IIS ise “httpserver” uygulamamız olacaktır. Bu uygulama üzerinde barındırılan web uygulamasının dış dünyaya nasıl servis edileceğine karar verir ve çok gelişmiş konfigurasyonlara sahiptir. Aynı şekilde Linux bir işletim sisteminde “nginx” gibi bir “httpserver” da kullanılabilir. Projemizi derlediğimizde ortaya çıkan ve sunucularda çalışması planlanan kod dosyalarına “artifact” diyoruz. Bu çıktının sunuculardaki IIS ve Nginx gibi uygulamaların erişebileceği bir noktaya taşınması ve buna göre konfigure edilmesi gerekmektedir.
Bu arada bu derleme, test ve oluşan çıktının sunuculara kopyalanması gibi süreçler günümüzde CI/CD (Continuous Integration/Continuous Delivery) süreçleri tarafından kolayca yapılabilmektedir.

Artık yazdığımız kodlarımız bilgisayarımızdan çıktı, kalite kontrolden geçirildi ve artık sunucularda çalışmaya hazır hale geldi. İstediğimize ulaştık mı?
Hem evet hem hayır. Eğer isteğimiz sadece sunucuda bu uygulamayı çalışır hale getirebilmekse evet istediğimizi aldık ancak genelde bu sorunun cevabı hayır olur. Sebebi ise şudur; Her ne kadar kodumuzun çalışıyor olması için testlerden geçirsek de sunucularda çalışan kodumuzun gerçek hayatta problemler yaşayabileceği gerçeğini anlamak gerekiyor. Bu yüzden de bu kodun canlı ortam dediğimiz son kullanıcıya servis edildiği noktada da izlenmesi gerekiyor. İyi bir “monitoring” (izleme) aracı ile kodumuzun davranışlarını, varsa hatalarını bulabilmek, bulmuşsak da hızlıca nereye müdehale edebileceğimizi anlayabilmek yine önemli adımlardan birisidir.
Özetlemek gerekirse;
Kodumuzun derlenmesi, kalite kontrolden geçirilmesi ve testlerinin yapılması, oluşan çıktının sunucuya taşınması, erişim ile ilgili ayarlarının yapılması ve en sonunda kodumuzun çalışmasının izlenmesi aşamaları yazmış olduğumuz kodumuzun genel anlamda yolculuğudur.
Herkese iyi yolculuklar…