Bu proje, modern bir Event-Driven Mimariyi (Olay Odaklı Mimari) kullanarak kullanıcı kayıt süreçlerini yöneten iki kritik mikroservisten oluşmaktadır. Amaç, kullanıcı kaydının hemen ardından e-posta onay sürecini asenkron ve güvenli bir şekilde başlatmaktır.
Proje, dağıtık sistemler ve güncel backend geliştirme pratiklerindeki uzmanlığımı göstermektedir:
- Mimari: Dağıtık sistemler için Event-Driven (Olay Odaklı) mikroservis tasarımı.
- Asenkron İletişim: Yüksek verimli mesajlaşma için Redis Pub/Sub kullanımı.
- Güvenlik: Spring Security entegrasyonu ve JWT/BCrypt tabanlı kimlik doğrulama altyapısı.
- Altyapı Yönetimi: Geliştirme ortamı için Docker ve Docker Compose kullanımı.
| Kategori | Teknoloji | Amaç |
|---|---|---|
| Backend | Java 17+, Spring Boot 3+ | Servis geliştirme ve hızlı uygulama çatısı. |
| Veritabanı (Kalıcılık) | PostgreSQL, Spring Data JPA | Kullanıcı ve Token bilgilerinin güvenilir saklanması. |
| Mesajlaşma | Redis (Pub/Sub) | Servisler arası hızlı ve asenkron olay iletişimi. |
| Güvenlik | Spring Security, JWT, BCrypt | Kimlik doğrulama ve şifre güvenliği. |
| Altyapı & Konteyner | Docker, Docker Compose | Altyapı servislerini (DB, Redis) taşınabilir ve hızlıca ayağa kaldırma. |
| Test ve Geliştirme | IntelliJ IDEA, Postman, Mailtrap | IDE, API testi ve e-posta test aracı. |
Proje, Auth Service (Yayıncı) ve Notification Service (Dinleyici) olmak üzere iki ana servisten oluşur.
- Kayıt İsteği: Kullanıcı,
Auth Service'e kayıt isteği gönderir. - Olay Yayınlama:
Auth Service, kullanıcıyı kaydettikten hemen sonraUserRegisteredEventolayını Redis kanalına asenkron olarak yayınlar. - Olay Dinleme:
Notification Service, Redis kanalını dinler ve olayı yakalar. - Token ve Kayıt:
Notification Service, PostgreSQL'e onay token'ı oluşturur ve kaydeder. - E-posta Gönderimi:
Notification Service, Mailtrap üzerinden onay linkini kullanıcıya iletir.
Bu proje, PostgreSQL ve Redis servislerini Docker üzerinden yönetmektedir. Docker'ı kullanarak altyapı servislerini başlatın:
docker compose up -dHassas verilerin (veritabanı şifreleri, Mailtrap kimlik bilgileri) doğrudan kodda veya genel konfigürasyon dosyasında tutulmasını önlemek amacıyla, bu değerler ortam değişkenleri üzerinden alınmalıdır.
IntelliJ IDEA Adımları:
- Proje penceresinde, çalıştırmak istediğiniz servisin (örn.
AuthServiceApplication) yanındaki Run/Debug Configurations menüsünü açın. - "Edit Configurations..." seçeneğine tıklayın.
- Sağ taraftaki panelde "Environment variables" (Ortam değişkenleri) alanını bulun ve yanındaki "..." (üç nokta) simgesine tıklayın.
- Aşağıdaki tablodaki tüm değişken adlarını ve kendi yerel değerlerinizi girin.
| Servis | Amaç | Değişken Adı | Örnek Değer (Lokal) |
|---|---|---|---|
| Auth Service | PostgreSQL Bağlantısı | AUTH_DB_PASSWORD |
default_dev_pass |
| Notification Service | PostgreSQL Bağlantısı | NOTIF_DB_PASSWORD |
default_dev_pass |
| Notification Service | Mailtrap Şifresi | MAILTRAP_PASSWORD |
default_mailtrap_pass |
Bu değişkenler, uygulama konfigürasyonunda (örneğin auth-service/application.yml'da) şu şekilde çağrılmaktadır:
spring:
datasource:
password: ${AUTH_DB_PASSWORD:default_dev_pass} # Ortamdan alınırÖnce NotificationServiceApplication'ı (Port: 8081), ardından AuthServiceApplication'ı (Port: 8080) başlatın.
[Terminal: NotificationServiceApplication - BAŞARILI BAŞLATMA]
Kullanıcı kayıt akışını test etmek için:
- Metot:
POST - URL:
http://localhost:8080/api/v1/auth/register
Konsolda, her iki servisten de gelen başarılı çıktılar.
Mailtrap gelen kutusunda, beklenen gönderen ve onay linki ile e-postanın geldiğini çıktı.
En kritik izleme bilgisi olan health kontrolü çalışmaktadır. Bu, PostgreSQL ve Redis bağlantılarının durumunu doğrular.
- Endpoint:
http://localhost:8080/actuator/healthvehttp://localhost:8081/actuator/health
- Actuator Endpoint Kapsamı: Konfigürasyon doğru olmasına rağmen, şu anki kurulumda Actuator sadece
/healthendpoint'ini göstermektedir. Diğer izleme yolları (/metrics,/info,/env) 404/403 hatası vermektedir. - Token Doğrulama Mantığı: Projenin bir sonraki aşamasında, Auth Service'teki token doğrulama mantığı (
/confirm?token=...) tamamlanacak ve kullanıcı aktivasyonu gerçekleştirilecektir. - İlkel Tip İletişimi: Redis üzerinden JSON String yerine, tip güvenliğini artırmak için ayrı bir
core-eventsMaven modülünde POJO'lar kullanılması planlanmaktadır.
