Spring Boot Geliştirme Desenleri
Ölçeklenebilir, üretim seviyesi servisler için Spring Boot mimari ve API desenleri.
Ne Zaman Aktif Edilir
- Spring MVC veya WebFlux ile REST API'leri oluşturma
- Controller → service → repository katmanlarını yapılandırma
- Spring Data JPA, caching veya async processing'i yapılandırma
- Validation, exception handling veya sayfalama ekleme
- Dev/staging/production ortamları için profiller kurma
- Spring Events veya Kafka ile event-driven desenler uygulama
REST API Yapısı
Repository Deseni (Spring Data JPA)
Transaction'lı Service Katmanı
DTO'lar ve Validation
Exception Handling
Caching
Bir configuration sınıfında @EnableCaching gerektirir.
Async Processing
Bir configuration sınıfında @EnableAsync gerektirir.
Loglama (SLF4J)
Middleware / Filter'lar
Sayfalama ve Sıralama
Hata-Dayanıklı Harici Çağrılar
Rate Limiting (Filter + Bucket4j)
Güvenlik Notu: X-Forwarded-For başlığı varsayılan olarak güvenilmezdir çünkü istemciler onu taklit edebilir.
Forwarded başlıkları sadece şu durumlarda kullanın:
- Uygulamanız güvenilir bir reverse proxy'nin arkasında (nginx, AWS ALB, vb.)
ForwardedHeaderFilter'ı bean olarak kaydetmişsiniz- application properties'de
server.forward-headers-strategy=NATIVEveyaFRAMEWORKyapılandırmışsınız - Proxy'niz
X-Forwarded-Forbaşlığını üzerine yazmak için yapılandırılmış (eklememek için değil)
ForwardedHeaderFilter düzgün yapılandırıldığında, request.getRemoteAddr() otomatik olarak
forwarded başlıklardan doğru istemci IP'sini döndürür. Bu yapılandırma olmadan, request.getRemoteAddr() doğrudan kullanın—anlık bağlantı IP'sini döndürür, bu güvenilir tek değerdir.
Arka Plan Job'ları
Spring'in @Scheduled'ını kullanın veya kuyruklar ile entegre olun (örn. Kafka, SQS, RabbitMQ). Handler'ları idempotent ve gözlemlenebilir tutun.
Gözlemlenebilirlik
- Logback encoder ile yapılandırılmış loglama (JSON)
- Metrikler: Micrometer + Prometheus/OTel
- Tracing: OpenTelemetry veya Brave backend ile Micrometer Tracing
Production Varsayılanları
- Constructor injection'ı tercih edin, field injection'dan kaçının
- RFC 7807 hataları için
spring.mvc.problemdetails.enabled=trueetkinleştirin (Spring Boot 3+) - İş yükü için HikariCP pool boyutlarını yapılandırın, timeout'ları ayarlayın
- Sorgular için
@Transactional(readOnly = true)kullanın @NonNullve uygun yerlerdeOptionalile null-safety zorlayın
Unutmayın: Controller'ları ince, servisleri odaklı, repository'leri basit ve hataları merkezi olarak işlenmiş tutun. Bakım yapılabilirlik ve test edilebilirlik için optimize edin.


