Staj sürecinde geliştirdiğim SecureWatch AI, farklı alanlarda öğrendiğim bilgileri tek bir proje içinde kullanmamı sağladı. Projede veri analizi, makine öğrenmesi, backend, veritabanı, frontend, güvenlik ve Docker teknolojileri birbiriyle bağlantılı şekilde çalışıyordu. Bu nedenle her aşamada yeni bir şey öğrenirken farklı sorunlarla da karşılaştım.

Kullandığım Teknolojiler

Backend tarafında FastAPI, SQLAlchemy, Alembic ve PostgreSQL kullandım. Kimlik doğrulama işlemlerini JWT ile, parolaların güvenli şekilde saklanmasını bcrypt ile gerçekleştirdim. ADMIN ve ANALYST rollerini ayırarak kullanıcıların yalnızca yetkili oldukları işlemleri yapmasını sağladım.

Makine öğrenmesi bölümünde CIC-IDS2017 veri setiyle çalıştım. DummyClassifier, Logistic Regression ve farklı Random Forest yapılandırmalarını karşılaştırdım. Modelleri yalnızca accuracy değerine göre değerlendirmek yerine precision, recall, F1, ROC-AUC, PR-AUC ve yanlış pozitif oranı gibi farklı ölçümleri de inceledim.

Frontend tarafında React, TypeScript, Vite ve Tailwind CSS kullandım. Giriş, CSV yükleme, analiz listesi, tespit sonuçları, olay yönetimi ve dashboard ekranlarını geliştirdim. Uygulamanın PostgreSQL, backend ve frontend servislerini Docker Compose ile birlikte çalıştırdım.

Büyük Veri Setiyle Çalışmak

İlk önemli zorluk, sekiz CSV dosyasında bulunan 2.830.743 kaydı kontrollü şekilde incelemekti. Tüm veriyi tek seferde belleğe yüklemek yerine dosyaları parçalar hâlinde okuyan bir analiz betiği hazırladım. Eksik ve sonsuz değerleri yönettim, tekrar eden kayıtları temizledim ve etiketleri ortak bir yapıya dönüştürdüm.

Ön işleme sırasında veri sızıntısını önlemek de önemliydi. Ölçekleme gibi işlemleri yalnızca eğitim verisi üzerinde öğrendim ve test verisine aynı dönüşümleri uyguladım. Böylece model değerlendirme sonuçlarının daha güvenilir olmasını sağladım.

Karşılaştığım Hatalar ve Çözümler

CSV yükleme özelliğinde yalnızca dosya uzantısını kontrol etmenin yeterli olmadığını öğrendim. Dosya boyutu sınırı, güvenli dosya adı, SHA-256 özeti, tekrar yükleme kontrolü ve path traversal koruması ekledim. Bir hata oluştuğunda yarım kalan geçici dosyaların temizlenmesini de sağladım.

Frontend ve backend entegrasyonunda korumalı bir sayfaya doğrudan gidildiğinde giriş ekranına yönlendirilme sorunuyla karşılaştım. Bunun bazen geçersiz analiz kimliği, bazen eksik oturum bilgisi, bazen de route korumasından kaynaklanabileceğini gördüm. Backend yanıtlarını, tarayıcı yönlendirmesini ve kimlik doğrulama durumunu ayrı ayrı kontrol ederek sorunun kaynağını daralttım.

Arayüzü geliştirirken masaüstünde düzgün görünen bazı bölümlerin dar ekranlarda taşabildiğini de fark ettim. Sayfaları farklı ekran genişliklerinde kontrol ederek kartları, tabloları ve formları responsive hâle getirdim. Klavye ile gezinme sırasını ve hata mesajlarının görünürlüğünü test ettim. Bu çalışma bana iyi bir arayüzün yalnızca güzel görünmesinin yeterli olmadığını; farklı cihazlarda anlaşılır ve kullanılabilir olması gerektiğini gösterdi.

Bu kontrol yaklaşımını sonraki ekranlarda da sürdürdüm.

Final Docker kontrolünde kod ve testler başarılı olmasına rağmen Docker Engine kapalı olduğu için servisler çalışmadı. Docker Desktop’ı başlattıktan sonra kontrolleri yeniden uyguladım. PostgreSQL, backend ve frontend servisleri healthy duruma geldi; frontend ile API sağlık uçları HTTP 200 döndürdü.

Teknik Olarak Bana Kazandırdıkları

Final doğrulamada 499 backend testi ve 791 frontend testi başarıyla geçti. TypeScript, ESLint, production build ve güvenlik kontrolleri de tamamlandı. Bu süreç bana bir hata gördüğümde hemen kod değiştirmek yerine önce problemin hangi katmanda olduğunu belirlemeyi öğretti.

Staj sonunda yalnızca kullandığım teknolojilerde gelişmedim; güvenli kod yazma, test sonucu yorumlama, log inceleme ve teknik borçları dürüstçe kaydetme konularında da önemli deneyim kazandım.