Konsol Uygulamaları (Console App)

Yalnızca CLI (Nedir?) üzerinden kullanılabilen uygulamalardır. Genellikle kullanıcı arayüzüne (UI) / grafiksel bir arayüze sahip olmazlar. Dışarıdan önceden belirlenmiş parametreler alarak, aldığı parametrelere göre farklı işlemler yapan ve genellikle bilgi niteliğinde çıktılar sunan uygulamalardır.

Konsol uygulamaları gelişmiş kullanıcılar ya da sistem ihtiyaçları için hazırlanırlar. Sadece şu amaçla kullanılır gibi bir kısıtlama söz konusu olamaz, her türlü gereksinimi karşılamak için hazırlanabilirler.

Konsol uygulamaları hakkında fikir sahibi olduğumuza göre şimdi nerelerde, nasıl kullanabiliriz ile ilgili bir kaç örnek üzerinden ilerleyelim.

Senaryo #1: Döviz Kurları Güncelleme (cRON)

Döviz kurlarını belirlediğimiz bir siteden alıp veritabanımız kaydetme işlemini sitemizde talep üzerine (on demand) {ziyaretçilerden istek geldikçe} güncellemek iyi bir fikir değildir. Bunun yerine bir konsol uygulaması hazırlayıp, bu konsol uygulamasını zamanlanmış görev yöneticileri (Örn: Cron) ile dilediğimiz zaman aralıklarında ya da dilediğimizde elle çalıştırabiliriz. Bu sayede ziyaretçilerimizi döviz kurlarını güncelleme işlemlerimizi beklemek zorunda bırakmayız ve olması gerektiği gibi hızlı bir gezinme fırsatı sunarız. Bunun yanında birden fazla ziyaretçinin aynı işi yapan botlarımızı çalıştırması (olası concurrency) problemi ile karşılaşmayız.

Senaryo #2: E-Posta/Bildirim Gönderimi (Asenkron İşlemler)

Bir kaynaktan (bu bir internet sitesi, dosya ya da veritabanı vs. olabilir) veri okuyup sonucunda bazı işler yapmak istiyor olabiliriz. Bu senaryo üzerinden ilerleyecek olursak; 1milyon kullanıcımız var ve onlara bir ileti göndermemiz gerektiğini düşünelim. Bu durumda kullanıcılara ileti gönderen kısım için bir arayüze ihtiyaç yoktur. Hedef oldukça açıktır; kullanıcının e-postasını al, iletiyi hazırla ve gönder. Konsol uygulaması hazırlayarak veri kaynağından kullanıcılarımızın e-posta adreslerini alıp belirlenen iletiyi hedefe göndeririz.

Senaryo #3: Teknik Araçlar için Kullanım (Komut Dosyaları)

Sürekli teslim (Continuous Delivery [CI]) için ihtiyacımız olan bir uygulamada kullanıcı arayüzüne gerek yoktur. Verdiğimiz parametrelerle işini yapması ve sonucunda bize çıktılar vermesi yeterlidir. CI için hazırlayacağımız konsol uygulamamız versiyon kontrol sistemimizden parametre ile belirlediğimiz sürümü çekmesini, derlemesini (build) ve ilgili sunuculara dağıtmasını (publish) sağlayabiliriz. Bunları yaparken CLI’da bize şu anda hangi işlemi yaptığı vs. bilgisini iletmesi yeterlidir. Grafiksel bir arayüze ihtiyaç yoktur.

Senaryolardan da anlayacağınız üzere konsol uygulamalarını genellikle grafiksel bir arayüze ihtiyaç duymadığımız, çoğunlukla asenkron olarak yürütmek istediğimiz ihtiyaçlarımızı karşılamak ya da sürekli tekrar eden işleri komut dosyaları ile yapabilmek için kullanırız. Makalenin başında da belirttiğim üzere konsol uygulamaları sadece şu amaçla kullanılabilir gibi bir durum söz konusu olamaz.

Önemli olan tek şey konsol uygulaması yaparsak bir kullanıcı arayüzü (grafiksel arayüz diyebiliriz) olmayacağını bilmektir. Eğer ihtiyacınızı karşılamanız için zaten bir kullanıcı arayüzüne ihtiyacınız yoksa o zaman bu işi bir konsol uygulaması ile yapabilirsiniz demektir.

Bir işlemi senkron olarak yürütmek istersek istemcinin tarayıcısını açık ve bağlantısını stabil tutması vs. sorunlarla karşılaşırız. Kullanıcıdan yalnızca göreve dair bilgileri alırız ve sonra ona şayet gerekiyorsa takip edeceği bir referans kod iletiriz. İstemciyi bloklamayız ve bu esnada arka tarafta cronlar ya da queue araçları ile işleri yürütürüz. Bu bize hem istemciyi bloklamadığımızdan zaman kazancı hemde dilediğimiz gibi yönetip ölçeklendirme imkanı sunmaktadır.

Bu makaleyi referans gösteren örnek uygulamalar hazırlayıp paylaşıyor ve bu makale içerisinde atıfta bulunuyor olacağım, esen kalın…