---
title: "Merhaba Dünya: Backend Notları Yeniden Yayında"
url: https://emrecelen.dev/merhaba-dunya
author: "Emre Çelen"
published: 2026-10-20
---

# Merhaba Dünya: Backend Notları Yeniden Yayında

> 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 ↓](#olay-raporu-blog-neden-yillarca-sessiz-kaldi)
- **\[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](/hakkimda) 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.

> **Olay #001 · Blog kesintisi — Çözüldü**
>
> Süre: 4 yıl · Önem: SEV-3 · Etki: 0 yeni yazı. Notlar birikti, hiçbiri yayına çıkmadı.
>
> - 2021 — yayında: emrecelen.com.tr açıldı, ilk yazı
> - 2021 - 2022 — yayında: Öğrendikçe yazdığım dönem
> - 2022 — kesinti: Son yazı; sessizlik başlıyor
> - 2023 — kesinti: Garanti BBVA Teknoloji
> - 2024 — kesinti: Digitopia
> - 2025 — kesinti: Akbank mobil bankacılık
> - 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: herkes bilmiyormuş.)
- **İş 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.

1. **Nasıl yapılır** — Adım adım anlatımlar ve projeler
2. **Nerede kırıldı?** — Üretimdeki hata, yanlış varsayım
3. **Neden kırıldı?** — Kök neden ve onu besleyen koşullar
4. **Geriye kalan ders** — Bir 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

- [x] Yeni bir ev: emrecelen.dev
- [x] 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:

```diff title="blog.diff" noCopy
- 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:

**İçerik** (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)

**Derleme** (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

**Arayüz** (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)

**Kalite** (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ü

**Teslimat** (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'ı

**Gizlilik** (Ç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:

*İnteraktif demo: ses piyanosu (serbest çalma ve sitedeki arayüz sesleri) —* [sitede çalıştır](https://emrecelen.dev/merhaba-dunya)

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:

*İnteraktif demo: animasyon eğrisi stüdyosu (hazır eğriler, sürüklenebilir kontrol noktaları, kare kare oynatma) —* [sitede çalıştır](https://emrecelen.dev/merhaba-dunya)

İş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** (Ctrl K · ⌘ K · /): Herhangi bir sayfada kısayola bas; yazılar, kavramlar ve komutlar tek kutuda.
- **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** (Tercihler izniyle): Yarım bıraktığın yazıya döndüğünde ana sayfa seni kaldığın bölüme götürüyor.
- **Seç, 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.

- [Backend](https://emrecelen.dev/kategori/backend) (API ve servisler): HTTP sözleşmeleri, kuyruklar, thread modelleri.
- [Veritabanı](https://emrecelen.dev/kategori/veritabani) (Sorgu, index, veri modeli): Sorgu planları, index seçimi, MVCC ve migration.
- [Dağıtık Sistemler](https://emrecelen.dev/kategori/dagitik) (Mesaj, tutarlılık, dayanıklılık): Kafka, outbox, saga, circuit breaker.
- [DevOps](https://emrecelen.dev/kategori/devops) (Build, test, deploy, gözlem): CI süresi, sıfır kesintili deploy, gözlemlenebilirlik.
- [Mimari](https://emrecelen.dev/kategori/mimari) (Karar kayıtları): Modüler monolit, hexagonal, CQRS; her yazı bir karar kaydı.
- [Performans](https://emrecelen.dev/kategori/performans) (Ölç, düzelt, tekrar ölç): N+1, bağlantı havuzu, GC duraklamaları; her yazı bir önce/sonra ölçümü.
- [Günlük](https://emrecelen.dev/kategori/gunluk) (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](/rss.xml) adresini okuyucuna ekle; hesap ya da e-posta gerekmiyor, yeni yazılar kendiliğinden düşüyor.
- **Sırada:** Ana sayfadaki [Sırada](/#sirada) kutusunda üzerinde çalıştığım yazıları ve hangi aşamada olduklarını görebilirsin.
- **LinkedIn:** Her yeni yazıyı [LinkedIn](https://linkedin.com/in/emrecelen)'de de duyuruyorum.
- **İletişim:** Bir [konu önermek](/iletisim?konu=oneri), bir hatayı yakalamak ya da sadece merhaba demek istersen [iletişim sayfası](/iletisim) 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:

- [cat hakkimda.md](/hakkimda) kim olduğumun uzun hâli
- [ls kategori/backend](/kategori/backend) ilk raf
- [tail -f rss.xml](/rss.xml) yeni yazı düşünce haberin olsun
- [echo "konu önerim" > iletisim](/iletisim) aklındaki soruyu sor

Görüşmek üzere.
