<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ali şahin BALCIOĞLU</title>
    <description>The latest articles on DEV Community by Ali şahin BALCIOĞLU (@arndevelopment).</description>
    <link>https://dev.to/arndevelopment</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4122326%2F06fa729a-8744-40c5-9765-8f139ad1fc12.jpg</url>
      <title>DEV Community: Ali şahin BALCIOĞLU</title>
      <link>https://dev.to/arndevelopment</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arndevelopment"/>
    <language>en</language>
    <item>
      <title>Saha Operasyonunda Canlı Konum Takibi: Gerçek Zamanlı Görünürlük Nasıl Kurulur</title>
      <dc:creator>Ali şahin BALCIOĞLU</dc:creator>
      <pubDate>Thu, 01 Oct 2026 06:03:43 +0000</pubDate>
      <link>https://dev.to/arndevelopment/saha-operasyonunda-canli-konum-takibi-gercek-zamanli-gorunurluk-nasil-kurulur-8e4</link>
      <guid>https://dev.to/arndevelopment/saha-operasyonunda-canli-konum-takibi-gercek-zamanli-gorunurluk-nasil-kurulur-8e4</guid>
      <description>&lt;p&gt;Saha operasyonu yürüten firmalarla konuştuğumuzda hep aynı cümleyle başlıyor sohbet: "Şoförün nerede olduğunu bilmiyoruz." İlk bakışta küçük, günlük bir operasyonel rahatsızlık gibi görünüyor. Oysa bu tek cümlenin arkasında üç ayrı kör nokta birikiyor: görünürlük, hakediş ve denetim. Birini çözmeden diğer ikisi de çözülmüyor, çünkü üçü aynı veri eksikliğinden besleniyor.&lt;/p&gt;

&lt;p&gt;Bu yazıda bir personel servis yönetim sistemi üzerinde geliştirdiğimiz canlı konum takibi altyapısından yola çıkarak, saha operasyonunda gerçek zamanlı görünürlüğü nasıl kurduğumuzu anlatıyoruz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Görünürlük eksikliği aslında nerede başlıyor
&lt;/h2&gt;

&lt;p&gt;Çoğu firma personel taşımacılığı, saha ekibi sevkiyatı ya da kurumsal ulaşım gibi operasyonları hâlâ WhatsApp grupları ve elle tutulan Excel dosyalarıyla yönetiyor. Şoför bir gruba "yola çıktım" yazıyor, bir süre sonra "vardım" yazıyor. İkisi arasında geçen süre bir kara kutu. Sefer gecikti mi, nerede gecikti, kaç dakika durdu — bunların hiçbiri kayıt altında değil.&lt;/p&gt;

&lt;p&gt;Bu durumda üç şey aynı anda bozuluyor. Birincisi görünürlük: yöneticinin elinde o anki durumu gösteren bir ekran yok, sadece mesaj geçmişi var. İkincisi hakediş: acenteye ya da şoföre ne kadar ödeneceği, gerçekleşen sefere değil, beyan edilen sefere göre hesaplanıyor. Üçüncüsü denetim: bir ihlal (geç kalkış, güzergah dışına çıkma, durak atlama) yaşandığında bunu kanıtlayacak bir iz yok, sadece karşılıklı anlatılan hikâyeler var.&lt;/p&gt;

&lt;h2&gt;
  
  
  Canlı konum takibi aslında ne çözüyor
&lt;/h2&gt;

&lt;p&gt;Geliştirdiğimiz sistemde şoför mobil uygulaması konum verisini düzenli aralıklarla sunucuya gönderiyor, sunucu bu veriyi Socket.io üzerinden yönetim paneline ve ilgili acente paneline anlık olarak yayıyor. Burada teknik tercih önemli: anlık yayın için klasik istek-cevap (REST polling) yerine soket tabanlı bir bağlantı kullanmak gerekiyor, çünkü her birkaç saniyede bir "şimdi neredesin" diye sormak hem sunucuyu hem de mobil cihazın pil ömrünü gereksiz yere yoruyor.&lt;/p&gt;

&lt;p&gt;Konum verisinin kendisi kadar, bu veriyle ne yapıldığı da önemli. PostGIS kullanarak coğrafi sorguları veritabanı katmanında çalıştırıyoruz: bir aracın belirlenen güzergahtan ne kadar saptığı, bir durağa ne zaman yaklaştığı, bir bölgeye giriş-çıkış yaptığı gibi sorular, uygulama katmanında değil veritabanında cevaplanıyor. Bu, hem performans hem de doğruluk açısından fark yaratıyor — binlerce konum noktasını uygulama tarafında karşılaştırmak yerine, veritabanının bunun için tasarlanmış fonksiyonlarını kullanıyorsunuz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Çok kiracılı yapılarda görünürlük daha da karmaşıklaşıyor
&lt;/h2&gt;

&lt;p&gt;Tek bir şoförün konumunu göstermek nispeten kolay bir problem. Gerçek zorluk, aynı sistemde birden fazla tarafın aynı anda, ama birbirinin verisini görmeden çalışması gerektiğinde ortaya çıkıyor. Geliştirdiğimiz sistemde 13 farklı taşıma acentesi aynı platformu kullanıyor; her acente kendi şoförlerini, kendi seferlerini ve kendi hakedişini görüyor, ama başka bir acentenin verisine erişemiyor.&lt;/p&gt;

&lt;p&gt;Bu izolasyonu arayüzde bir filtre olarak değil, backend katmanında bir kural olarak kurmak gerekiyor. Aksi halde bir gün bir sorgu parametresi değişir, bir acente başka bir acentenin konum verisini görür ve bu basit bir arayüz hatası değil, ciddi bir veri sızıntısı olur. Multi-tenant bir yapıda görünürlük sağlarken asıl mesele "veriyi nasıl gösteririz" değil, "veriyi kime göstermemiz gerektiğini nasıl garanti ederiz" sorusu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Görünürlük, hakediş ve denetimi otomatikleştiriyor
&lt;/h2&gt;

&lt;p&gt;Konum ve sefer verisi gerçek zamanlı ve güvenilir şekilde toplandığında, bunun üzerine iki şey doğal olarak oturuyor. Birincisi otomatik hakediş hesaplama: acente ya da şoför ödemesi, elle girilen bir rakama değil, gerçekleşen sefer verisine dayanıyor. Excel'e veri aktarma, ay sonunda uzlaşma toplantısı yapma ihtiyacı ortadan kalkıyor.&lt;/p&gt;

&lt;p&gt;İkincisi ihlal yönetimi. Bir sefer güzergahtan saptığında ya da bir durak atlandığında bu sistemde otomatik olarak işaretleniyor ve iz bırakıyor. Bu, "o gün öyle olmadı" tartışmalarını büyük ölçüde ortadan kaldırıyor; çünkü artık karşılıklı anlatıya değil, kayıtlı veriye bakılıyor.&lt;/p&gt;

&lt;p&gt;Bunların ikisi de aslında aynı temel fikrin uzantısı: operasyonu gözlemlenebilir hale getirdiğinizde, üzerine kurduğunuz her süreç daha az tartışmalı, daha az manuel hale geliyor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Görünürlük güvenlikten ayrı düşünülemez
&lt;/h2&gt;

&lt;p&gt;Konum verisi hassas bir veridir — bir kişinin nerede olduğunu gösterir. Bu yüzden canlı konum takibi kurarken görünürlüğü artırmakla veriyi korumak arasında bir denge kurmak gerekiyor. Sistemde OTP ile giriş, JWT token rotasyonu ve loglarda kişisel verilerin maskelenmesi gibi önlemler bu dengenin parçası. Görünürlüğü artırmak, herkesin her şeyi görmesi anlamına gelmemeli; kimin neyi ne zaman gördüğü de denetim altında olmalı.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aynı sorun, daha büyük ölçekte
&lt;/h2&gt;

&lt;p&gt;Kurumsal ölçekli ulaşım operasyonlarında bu sorun küçülmüyor, büyüyor. Araç sayısı arttıkça, güzergah çeşitliliği arttıkça, manuel takibin kırılma noktası daha hızlı geliyor. Bu tür operasyonları dijitalleştirirken kurduğumuz web ve mobil bileşenlerin ortak paydası yine aynı: operasyonun o anki durumunu, geçmişe bakmadan, canlı olarak görebilmek.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sonuç olarak
&lt;/h2&gt;

&lt;p&gt;Canlı konum takibi tek başına bir özellik değil, saha operasyonunu yöneten her sürecin üzerine oturduğu bir temel. Görünürlük olmadan hakediş tartışmalı kalıyor, denetim kanıtsız kalıyor, yönetici de operasyonu değil operasyonun anlatısını yönetmiş oluyor. Bizim bu konudaki yaklaşımımız şu: önce veriyi doğru ve güvenli şekilde gerçek zamanlı hale getirin, geri kalan süreçler — hakediş, denetim, raporlama — bu temel üzerine çok daha az sürtünmeyle oturur.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gerçek zamanlı veri için soket tabanlı bağlantı, polling'e tercih edilmeli.&lt;/li&gt;
&lt;li&gt;Coğrafi sorgular uygulama katmanında değil veritabanı katmanında (PostGIS gibi) çalıştırılmalı.&lt;/li&gt;
&lt;li&gt;Çok kiracılı yapılarda veri izolasyonu backend kuralı olmalı, arayüz filtresi değil.&lt;/li&gt;
&lt;li&gt;Görünürlük artarken veri güvenliği (OTP, token rotasyonu, PII maskeleme) aynı özenle kurulmalı.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>softwaredevelopment</category>
      <category>webdev</category>
      <category>saas</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Tek Sistemde Onlarca Acente: Multi-Tenant Mimarinin Sahadaki Karşılığı</title>
      <dc:creator>Ali şahin BALCIOĞLU</dc:creator>
      <pubDate>Tue, 15 Sep 2026 09:06:46 +0000</pubDate>
      <link>https://dev.to/arndevelopment/tek-sistemde-onlarca-acente-multi-tenant-mimarinin-sahadaki-karsiligi-1k7c</link>
      <guid>https://dev.to/arndevelopment/tek-sistemde-onlarca-acente-multi-tenant-mimarinin-sahadaki-karsiligi-1k7c</guid>
      <description>&lt;h2&gt;
  
  
  Problem: Aynı sistem, birbirinden habersiz onlarca işletme
&lt;/h2&gt;

&lt;p&gt;Personel servis taşımacılığı yürüten kurumsal operasyonlarda genellikle tek bir şirket değil, birden fazla taşıma acentesi aynı anda çalışır. Her acentenin kendi araç filosu, kendi şoförleri, kendi hakediş hesabı vardır. Bu tabloyu tek bir yazılımda birleştirmek istediğinizde karşınıza çıkan asıl soru arayüz değil şudur: acente A'nın verisi, hiçbir şekilde acente B'nin ekranına sızmamalı, ama sistem yöneticisi tüm acenteleri tek yerden görebilmeli.&lt;/p&gt;

&lt;p&gt;Bizim geliştirdiğimiz personel servis yönetim sisteminde bu senaryoyu birebir yaşadık. Sistem, 13 farklı taşıma acentesini tek platformda barındırıyor; her biri kendi paneline giriyor, kendi sefer ve şoför verisini yönetiyor, ama hiçbiri diğerinin verisine erişemiyor. Bunu arayüzde bir filtre olarak değil, backend katmanında bir izolasyon kuralı olarak kurduk. Çünkü arayüz seviyesinde yapılan bir "gösterme" işlemi, bir API isteğiyle kolayca aşılabilir; asıl güvenlik sorgunun kendisinde, veritabanı erişim katmanında sağlanmalı.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-tenant mimari neden tek çözüm gibi görünür ama değildir
&lt;/h2&gt;

&lt;p&gt;Çoğu ekip "multi-tenant" dediğinde aklına gelen ilk çözüm, her müşteriye ayrı bir veritabanı açmaktır. Bu yaklaşım küçük ölçekte işe yarar ama acente sayısı arttıkça bakım yükü katlanarak büyür: her yeni acente için ayrı şema, ayrı migration, ayrı yedekleme süreci. Bizim tercih ettiğimiz yöntem, tek bir veritabanı üzerinde acente kimliğini her sorgunun zorunlu bir parçası haline getirmekti. Yani bir şoförün konum kaydını çekerken de, bir hakediş raporunu oluştururken de, sorgunun içinde "hangi acente" bilgisi her zaman var ve bu bilgi kullanıcı girdisinden değil, oturum bilgisinden geliyor.&lt;/p&gt;

&lt;p&gt;Bu tasarımın getirdiği asıl kazanım, yeni bir acenteyi sisteme eklemenin bir altyapı işi değil, bir kayıt işi haline gelmesidir. Ölçeklenebilirlik burada teknik bir slogan değil, operasyonel bir gerçek: 13. acenteyi eklemek, 1. acenteyi eklemekten yapısal olarak farklı değil.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roller: Görünürlük herkese aynı şekilde açılmaz
&lt;/h2&gt;

&lt;p&gt;Multi-tenant bir sistemde izolasyon kadar önemli olan ikinci konu, kimin neyi görebileceğidir. Bizim kurduğumuz yapıda beş farklı rol var: süper admin, admin, acente yöneticisi, şoför ve personel. Süper admin tüm acenteleri görür ve sistem genelinde denetim yapar; acente yöneticisi yalnızca kendi filosunu ve kendi hakedişini görür; şoför yalnızca kendi seferini; personel yalnızca kendi servis kaydını. Bu ayrım basit görünse de sahada en çok tartışılan konulardan biridir, çünkü her acente "biraz daha fazla görmek" ister, sistemin bütünlüğü ise net sınırlar gerektirir.&lt;/p&gt;

&lt;p&gt;Rol tasarımını yaparken şunu öğrendik: yetkilendirmeyi sonradan yamamak yerine, veri modelinin en başından itibaren rol bazlı düşünmek gerekiyor. Aksi halde her yeni özellik, "bunu kim görebilir" sorusunu tekrar tekrar açar ve sistem zamanla tutarsız yetki kurallarının birikimi haline gelir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Otomatik hakediş: Excel'in bittiği yer
&lt;/h2&gt;

&lt;p&gt;Çok acenteli operasyonlarda en büyük operasyonel sürtünme noktalarından biri hakediş hesabıdır. Geleneksel yöntemde her acente kendi seferlerini sayar, bir excel dosyası hazırlar, bu dosya yönetim tarafından tek tek kontrol edilir. Bu süreç hem yavaştır hem de hataya açıktır; sefer sayısı arttıkça elle kontrol imkansızlaşır.&lt;/p&gt;

&lt;p&gt;Bizim sistemimizde hakediş hesabı, sefer verisinin kendisinden otomatik olarak türetiliyor. Bir sefer tamamlandığında, o seferin hangi acenteye ait olduğu, hangi şoför tarafından yapıldığı ve hangi durumda sonuçlandığı sistemde zaten kayıtlı; hakediş bu kayıtlardan hesaplanıyor, ayrıca bir excel dosyasına ihtiyaç duyulmuyor. Bu, sadece zaman kazandırmıyor; acente ile yönetim arasındaki "kaç sefer yapıldı" tartışmasını da ortadan kaldırıyor, çünkü herkes aynı kayda bakıyor.&lt;/p&gt;

&lt;h2&gt;
  
  
  İhlal yönetimi ve denetlenebilirlik
&lt;/h2&gt;

&lt;p&gt;Manuel yürütülen servis operasyonlarında bir sefer ihlali (gecikme, güzergah dışına çıkma, eksik personel taşıma gibi durumlar) genellikle sözlü bir şikayetten öteye gitmez; kayıt altına alınmaz, tekrarı takip edilmez. Bizim sistemimizde ihlaller ayrı bir kayıt olarak tutuluyor ve iz bırakıyor. Bu, tek bir olayı cezalandırmak için değil, zaman içindeki örüntüyü görebilmek için önemli: bir acentenin belirli bir şoförü sürekli aynı ihlali yapıyorsa, bu bilgi ancak kayıt sistematik tutulduğunda ortaya çıkar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Güvenlik: Çok acenteli bir sistemde güven tek noktadan kurulur
&lt;/h2&gt;

&lt;p&gt;Onlarca acentenin ve yüzlerce şoförün/personelin aynı sistemi kullandığı bir yapıda kimlik doğrulama tek bir zayıf noktaya indirgenemez. Bizim yaklaşımımızda giriş OTP ile doğrulanıyor, oturum token'ları JWT rotasyonuyla yönetiliyor, yani bir token çalınsa bile ömrü sınırlı ve yenilenme mekanizması var. Loglarda ise kişisel verileri maskeliyoruz; bir hata ayıklama sürecinde bile geliştirici ekranında ham telefon numarası ya da kimlik bilgisi görünmüyor. Çok kiracılı bir sistemde bu tür önlemler lüks değil, sistemin güvenilirliğinin ön koşulu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sahadan çıkan ders
&lt;/h2&gt;

&lt;p&gt;Multi-tenant mimari kurmanın zorluğu kodda değil, kararlarda. Hangi veri paylaşılır, hangi veri asla paylaşılmaz, yeni bir acente eklendiğinde sistemin hangi varsayımları bozulur — bu sorulara baştan net cevap vermeyen bir mimari, acente sayısı arttıkça kırılganlaşır. Biz bu projede izolasyonu backend'de, yetkilendirmeyi rol modelinde, denetimi de kayıt bütünlüğünde kurduğumuz için sistem büyüdükçe karmaşıklaşmadı, sadece genişledi.&lt;/p&gt;

&lt;p&gt;Benzer bir çok paydaşlı operasyonu tek sistemde toplamayı düşünüyorsanız, bu deneyimi konuşmaktan memnuniyet duyarız.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>webdev</category>
      <category>saas</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
