Merhaba Dünya: Backend Notları Yeniden Yayında
Ben Emre Çelen, Java ve Spring Boot ile çalışan bir backend developer'ım. Yıllar sonra yeniden yazmaya başlıyorum; bu blogda seni neler bekliyor, anlatayım.

KISACA
Emre Çelen; bankacılık ve mikroservis projelerinde Java, Kotlin ve Spring Boot ile çalışan bir backend developer. Backend Notları, emrecelen.com.tr'deki ilk blogundan yıllar sonra açtığı; backend, veritabanı ve dağıtık sistemler üzerine üretimde öğrendiklerini sade bir Türkçeyle anlattığı blog.
Her yazılımcının ilk programı bir Merhaba Dünya'dır. Benimki iki kez oldu: ilki 2021'de emrecelen.com.tr'de, ikincisi şimdi, tam burada.
Ben Emre Çelen. 4 yıldır Java, Kotlin ve Spring Boot ile backend tarafında çalışıyorum; son yıllarım çoğunlukla bankacılık projelerinde geçti. Bu blog, yani Backend Notları, üretimde öğrendiklerimi sade bir Türkçeyle yazacağım yer.
Kahveni al ☕, uzun bir aradan sonra sunucuyu birlikte ayağa kaldıralım:
systemctl start backend-notlari
- [ OK ]emrecelen.com.tr arşive alındı (2021 - 2022 · 87 yazı)
- [ OK ]Garanti BBVA, Digitopia ve Akbank deneyimi yüklendi
- [ OK ]Java · Kotlin · Spring Boot · PostgreSQL · Kafka bağlandı
- [ WARN ]Uptime kesintisi: 5 yıl. Olay raporuna git ↓
- [ OK ]Ses efektleri hazır (varsayılan: kapalı)
- [ OK ]Animasyonlar ısındı
- [ OK ]backend-notlari.service başladı · emrecelen.dev
- Here we go.
#Önce tanışalım
Kariyerimin büyük kısmı, küçük bir hatanın bile pahalıya patladığı yerlerde geçti:
- Garanti BBVA Teknoloji: Rol ve yetkilendirme sistemlerinin modernizasyonunda çalıştım.
- Digitopia: Kotlin ve Spring Boot ile gRPC, WebSocket ve olay güdümlü servisler geliştirdim.
- OBSS Technology · Akbank: Bugün mobil bankacılık ekibinde Sigorta ve Ticari Kredi domainlerinde mikroservisler ve BFF katmanları yazıyorum.
İşin en sevdiğim tarafı hep aynıydı: karmaşık görünen bir problemi, bir kahve molasında anlatılabilecek kadar sadeleştirmek. Burada yapmaya çalışacağım şey de bu.
Uzun hâli, kullandığım teknolojiler ve kariyer çizelgesi Hakkımda sayfasında.
#Olay raporu: Blog neden yıllarca sessiz kaldı?
Backend'de bir şey ters gittiğinde suçlu aramayız; oturup bir postmortem yazarız. Ne oldu, neden oldu, bir daha olmasın diye ne yapıyoruz? Blogumun uzun sessizliğini de aynı şekilde raporlamak istedim. Biraz daha az ciddiyetle, söz.
- Süre
- 4 yıl
- Önem
- SEV-3
- Etki
- 0 yeni yazı. Notlar birikti, hiçbiri yayına çıkmadı.
2026 · yayında · Backend Notları yayında
#Özet
2021 ile 2022 arasında emrecelen.com.tr'de 87 yazı yazdım. Çoğu, o gün yeni öğrendiğim bir şeyin heyecanla tutulmuş notuydu: JavaFX Maven Projesi Nasıl Oluşturulur? Sonra bir gün yazmayı bıraktım. Site açık kaldı ama servis, tabiri caizse, sessizce durmuştu.
#Kök neden
Tek bir suçlu yok; birbirini besleyen üç sebep var:
- Öğrenme hızı yazma hızını geçti. Bir konuyu yazmaya oturduğumda ben çoktan bir sonrakine geçmiş oluyordum.
- Bunu zaten herkes biliyor hissi. Yeni öğrendiğim bir şeyi anlatmak her ay biraz daha gereksiz geldi. (Spoiler: )
- İş yoğunluğu. Kariyerimin ilk yılları biraz koşturmacalı geçti; bir yandan yeni sorumluluklara adapte olmaya çalışırken bir yandan da yüksek lisans süreci başladı. İş, okul ve öğrenme arasında yazmak çoğu zaman listenin en altına kaldı. 🥺
#Ne öğrendik?
İlk yazılarım başlangıç seviyesindeydi ve bu gayet normaldi. Aradan geçen yıllarda ise üretimde yaşanan hatalar, yanlış varsayımlar, gerçek trafik altında ortaya çıkan problemler ve farklı projeler çok daha fazla şey öğretti. Bunların bir kısmı dokümantasyonda bulunuyor, bir kısmıysa ancak deneyerek ve bazen yanılarak öğreniliyor.
#Ne yazacağım?
Ben de burada hem nasıl yapılır içeriklerini ve projeleri, hem de işlerin nerede kırıldığını, neden kırıldığını ve geriye hangi derslerin kaldığını not edeceğim.
- 01NASILNasıl yapılırAdım adım anlatımlar ve projeler
- 02NEREDENerede kırıldı?Üretimdeki hata, yanlış varsayım
- 03NEDENNeden kırıldı?Kök neden ve onu besleyen koşullar
- 04DERSGeriye kalan dersBir dahaki sefere farklı yapacağımız şey
#Neden şimdi?
Sanırım yazmayı değil, yazmanın bende bıraktığı hissi özledim. Yeni bir şey öğrenip onu kendi cümlelerimle anlatmayı; belki hiç tanımadığım birinin aynı probleme takıldığında buradaki birkaç satır sayesinde yoluna devam edebilmesini… Bunun gerçekten birine faydası olup olmadığını çoğu zaman bilmeyeceğim. Ama ihtimali bile güzel. Bazen insanın yeniden başlaması için bundan fazlasına ihtiyacı olmuyor.
#Aksiyonlar
- Yeni bir ev: emrecelen.dev
- Notları ölçerek ve gerçek örneklerle anlatmak
- Düzenli yayın ritmi: ayda iki yazı
- Eski alan adını buraya yönlendirmek
#v1 → v2: Ne değişti?
Eski yazıları buraya taşımıyorum. Utandığımdan değil; o blog başka bir dönemin günlüğüydü ve öyle kalması daha güzel. Aradaki farkı en iyi bir diff anlatır:
- alan adı : emrecelen.com.tr
+ alan adı : emrecelen.dev
- örnek : "Java Interface Nedir?"
+ örnek : "Transactional outbox ile çift yazma probleminden çıkış"
- soru : "Bugün ne öğrendim?"
+ soru : "Üretimde ne kırıldı, nasıl düzelttik?"
- altyapı : WordPress
+ altyapı : sıfırdan yazılmış, statik bir site
dil : Türkçe (değişmedi)#Bu blog nasıl çalışıyor?
Bir backend'ci blog kurunca altyapıya biraz fazla kafa yoruyor, kabul. Kısaca: veritabanı yok, sunucuda çalışan kod yok. Her yazı git'te duran bir MDX dosyası. Site her yayında baştan derlenip düz HTML dosyalarına dönüşüyor. Sen bir sayfa açtığında hazır bir dosyayı okuyorsun; tarayıcına yalnızca etkileşimli parçaların JavaScript'i gidiyor.
Katmanlara tek tek bakmak istersen birine dokun:
- MDX
- git
- zod
Yazılar bir veritabanında değil, git deposunda MDX dosyaları olarak duruyor. Her dosyanın başındaki bilgiler (başlık, tarih, kategori) zod şemalarıyla doğrulanıyor. Eksik ya da hatalı bir alan varsa build, Türkçe bir hata mesajıyla duruyor.
☕ Spring karşılığı: src/main/resources altındaki dosyalar + Bean Validation (@NotBlank, @Size)
- Next.js 16
- React 19
- Shiki
Next.js her sayfayı build anında statik HTML'e çeviriyor. Kod blokları da o sırada renkleniyor; tarayıcına renklendirme kütüphanesi hiç gitmiyor. Sosyal medyada paylaşılınca görünen kapak görselleri bile build'de üretiliyor.
☕ Spring karşılığı: Thymeleaf şablonlarını build sırasında çalıştırıp hazır HTML dosyaları üretmek
- Linaria
- Motion
- WebAudio
Stiller Linaria ile yazılıyor ve build'de düz bir CSS dosyasına dönüşüyor; çalışma anında stil üreten JavaScript yok. Animasyonlar Motion ile, sesler ise WebAudio ile o anda üretiliyor: sitede tek bir ses dosyası bile yok.
☕ Spring karşılığı: Çalışma anında reflection yerine derleme anında kod üreten bir annotation processor (MapStruct gibi)
- TypeScript 7
- Vitest
- Playwright
- axe
Her push'ta tip denetimi ve birim testleri çalışıyor; içerik denetimi de kırık bir iç bağlantıyı yayına çıkmadan yakalıyor. Gerçek tarayıcıdaki uçtan uca testler ve axe ile erişilebilirlik kontrolü büyük değişikliklerden önce çalışıyor.
☕ Spring karşılığı: JUnit + Selenium + Checkstyle üçlüsü
- GitHub Actions
- Cloudflare Pages
git push yetiyor: GitHub Actions siteyi derleyip yayınlıyor. Yeni adresler de arama motorlarına anında bildiriliyor.
☕ Spring karşılığı: Jenkins pipeline'ı
- Çerezsiz istatistik
- Kendi fontları
Reklam yok, seni takip eden çerez yok. Ziyaret istatistiği yalnızca sen izin verirsen ve çerezsiz olarak tutuluyor. Fontlar bile başka bir sunucudan değil, doğrudan bu siteden geliyor.
☕ Spring karşılığı: @ConditionalOnProperty: izin yoksa analitik bean'i hiç oluşmaz
#Seni neler bekliyor?
Bu siteyi yaparken en çok önemsediğim şey okumanın keyifli olmasıydı. Birkaç küçük sürpriz hazırladım; hepsi isteğe bağlı, hiçbiri yoluna çıkmıyor.
#Kulağına küçük notlar
Bir düğmeye bastığında, bir menü açtığında ya da bir şeyi kopyaladığında çok kısa sesler duyabilirsin. Varsayılan olarak kapalılar; açmak sana kalmış. İşin güzel tarafı ortada tek bir ses dosyası olmaması: her ses, tarayıcının WebAudio arayüzüyle o anda birkaç notadan üretiliyor.
Hepsini bu küçük piyanoda topladım. Piyano serbest çalma modunda açılıyor: tuşlar gerçek notalar, dokunabilir ya da klavyeden A'dan J'ye çalabilirsin. "Site sesleri"ne geçersen her tuş bu sitede duyduğun bir sesi çalıyor:
0 KB ses dosyası · WebAudio ile anında üretiliyor
Beğendiysen üst menüdeki küçük ekolayzır düğmesiyle sesleri açık bırakabilirsin.
#Gözüne yol gösteren animasyonlar
Animasyonlar burada süs değil, yol gösterici: açılan bir panel nereden geldiğini, kapanan bir menü nereye gittiğini anlatıyor. Neredeyse hepsinde aynı eğriyi kullanıyorum: hızlı başlayıp yumuşakça oturan bir yay. Sitenin imza eğrisi cubic-bezier(.16, 1, .3, 1); sürenin ilk %30'unda yolun yaklaşık %88'ini tamamlıyor, kalan zamanı yerine oturmaya harcıyor.
Aşağıdaki stüdyoda bir eğri seçip oynat, zaman çizelgesini sürükleyip hareketi kare kare izle ya da tutamakları çekip kendi eğrini çiz:
Hızlı çıkar, yumuşakça oturur. Burada her yerde bu var.
Sürenin ilk %30’unda tamamlanan yol: %88
cubic-bezier(.16, 1, .3, 1)İşletim sisteminde "hareketi azalt" ayarı açıksa site bunu fark edip animasyonları kendiliğinden sadeleştiriyor. Bu yazının başındaki açılış sekansı bile o durumda tek seferde görünüyor.
#Parmaklarının ucundaki kolaylıklar
Okumayı kolaylaştıran beş küçük özellik var: hızlı arama, açık ya da koyu tema, okuma listesi, kaldığın yerden devam ve seç-alıntıla araç çubuğu. Hiçbiri hesap istemiyor.
Hızlı arama
Herhangi bir sayfada kısayola bas; yazılar, kavramlar ve komutlar tek kutuda.CtrlK·⌘K·/Açık ya da koyu
Gözün hangisini seviyorsa. Seçmezsen site işletim sisteminin temasını izliyor.Okuma listesi
Bir yazıyı sonraya bırakmak için "Kaydet"e bas. Liste yalnızca senin tarayıcında tutuluyor.Kaldığın yerden devam
Yarım bıraktığın yazıya döndüğünde ana sayfa seni kaldığın bölüme götürüyor.Tercihler izniyleSeç, alıntıla
Bir cümleyi seçince küçük bir araç çubuğu çıkıyor: kopyala, bağlantısını al, paylaş ya da sitede ara. Hadi, bu cümleyi seçip dene.
#Backend Notları'nda hangi konular var?
Backend Notları'ndaki yazılar yedi kategoride toplanıyor: Backend, Veritabanı, Dağıtık Sistemler, DevOps, Mimari, Performans ve Günlük. Her kategorinin kendine özgü bir görünümü var: Backend bir API'nin rota tablosu, Veritabanı bir sorgu sonucu, Dağıtık Sistemler de Kafka partition'larına dağılmış mesajlar gibi listeleniyor.
- Rota tablosu
Backend
API ve servislerHTTP sözleşmeleri, kuyruklar, thread modelleri. - Sorgu sonucu
Veritabanı
Sorgu, index, veri modeliSorgu planları, index seçimi, MVCC ve migration. - Partition akışı
Dağıtık Sistemler
Mesaj, tutarlılık, dayanıklılıkKafka, outbox, saga, circuit breaker. - Pipeline
DevOps
Build, test, deploy, gözlemCI süresi, sıfır kesintili deploy, gözlemlenebilirlik. - Karar kayıtları
Mimari
Karar kayıtlarıModüler monolit, hexagonal, CQRS; her yazı bir karar kaydı. - Benchmark
Performans
Ölç, düzelt, tekrar ölçN+1, bağlantı havuzu, GC duraklamaları; her yazı bir önce/sonra ölçümü. - Günlük akışı
Günlük
Duyuru, çekiliş, geliştirme notlarıBlogun kendisiyle ilgili duyurular ve geliştirme notları. Bu yazı da onlardan biri.
Bunların yanında iki küçük bölüm var. Nedir? sözlüğünde cache stampede, idempotency, N+1 gibi kavramlar adım adım anlatılıyor. İpucu sayfasında da gündelik işte zaman kazandıran tek satırlık komutlar var.
#Nasıl takip edilir?
Yeni yazılardan haberdar olmanın ve bana ulaşmanın en kısa yolları:
- RSS: En kolay yol. rss.xml adresini okuyucuna ekle; hesap ya da e-posta gerekmiyor, yeni yazılar kendiliğinden düşüyor.
- Sırada: Ana sayfadaki Sırada kutusunda üzerinde çalıştığım yazıları ve hangi aşamada olduklarını görebilirsin.
- LinkedIn: Her yeni yazıyı LinkedIn (yeni sekmede açılır)'de de duyuruyorum.
- İletişim: Bir konu önermek, bir hatayı yakalamak ya da sadece merhaba demek istersen iletişim sayfası her zaman açık. Her mesajı okuyorum.
Kesinti uzun sürdü ama veri kaybı yok: notlar birikti, sadece yayına alınmadı. Şimdi sıra onlarda. Terminal senin:
help
- cat hakkimda.md kim olduğumun uzun hâli
- ls kategori/backend ilk raf
- tail -f rss.xml yeni yazı düşünce haberin olsun
- echo "konu önerim" > iletisim aklındaki soruyu sor
Görüşmek üzere.
Sık sorulanlar
Bankacılık ve mikroservis projelerinde Java, Kotlin ve Spring Boot ile çalışan bir backend developer. Bugün OBSS Technology'de, Akbank'ın mobil bankacılık ekibinde Sigorta ve Ticari Kredi domainlerinde çalışıyor.
Backend ve API tasarımı, veritabanı, dağıtık sistemler, DevOps, mimari ve performans. Yazıların yanında kısa kavram tanımları (Nedir?) ve tek satırlık terminal ipuçları da yayınlanıyor.
O blog, öğrenme dönemimin başlangıç seviyesindeki notlarıydı; bu yüzden yazılar yeni siteye taşınmadı. Yeni yazılar yalnızca emrecelen.dev'de yayınlanıyor.
Site Next.js 16 ile statik olarak üretiliyor. Yazılar git'teki MDX dosyalarında duruyor, stiller Linaria ile build anında düz CSS'e dönüşüyor. Veritabanı ve sunucuda çalışan kod yok; her sayfa hazır bir HTML dosyası.
Sesler varsayılan olarak kapalı. Üst menüdeki küçük ekolayzır düğmesiyle açıp kapatabilirsin; tercihini hatırlamamızı istersen çerez bandında "Tercihler"e izin ver.
RSS akışını (emrecelen.dev/rss.xml) okuyucuna ekleyebilir ya da ana sayfadaki "Sırada" kutusundan üzerinde çalıştığım yazıları takip edebilirsin.