Ana içeriğe atla

Devin ile Yazılım Geliştirme: Güvenlik, Dağıtım, Bakım (Bölüm 4)

Devin ile NextAuth kullanarak gerçek kullanıcı kimlik doğrulaması eklemeyi, Sentry ile hataları izlemeyi ve ön ucu önizleme URL’leriyle Vercel’e dağıtmayı öğrenin.
Güncel 3 Eki 2026  · 12 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Tekrar hoş geldiniz! Neredeyse bitti: Slack ötüyor, Jira’da işler var, testler yeşil ve CI, özensiz her PR’ı engelliyor. Dördüncü bölüm, fp-ts oyun alanını teoride kamuya açabileceğimiz bir şeye dönüştüreceğimiz son itiş.

Devin serisindeki tüm eğitimlere buradan erişebilirsiniz:

  1. Kurulum ve İlk Pull Request (Bölüm 1)
  2. Devin ile Dikey Dilim Gönderimi (Bölüm 2)
  3. Entegrasyonlar, Test ve CI/CD (Bölüm 3) 
  4. Güvenlik, Dağıtım, Bakım (Bölüm 4)

Dördüncü eğitim için planımız şöyle:

  • Kimlik doğrulama: Artık anonim UUID yok; NextAuth kimlik bilgilerini, JWT çerezlerini ve GqlAuthGuard ekleyip ilerlemeyi gerçek kullanıcılara bağlayacağız.
  • Prod’u izleme: Web uygulamasına bir satır Sentry, Nest API’ye bir satır ve her istisna panele düşecek.
  • Tek tuşla dağıtım: Ön uç Vercel’de canlı olacak ve her PR’da önizleme URL’leri çıkacak. (API şimdilik yerelde kalacak, prod’u Docker ile taklit edeceğiz.)

Ayrıca Devin ile eşli programlamaya da dönüp bakacağız: nerede parlıyor, nerede ise depoyu dünyaya açmadan önce bir insanın uçları bağlaması gerekiyor, göreceğiz. Son düzlüğe hazır mısınız?

Anonim UUID’den Gerçek Kullanıcılara

Devin’den ne istedim

Kısacası, Devin’den anonim UUID akışını sökmesini ve bana gerçek bir kimlik doğrulama yığını vermesini istedim:

  • apps/web içinde NextAuth v6 kimlik bilgileri sağlayıcısı
  • Argon2 hashing ve JWT çerezleri ile NestJS AuthModule
  • Bir User tablosu ekleyen ve Progress.sessionId → userId (null olamaz) olarak değiştiren Prisma migrasyonu
  • Mevcut UUID ilerleme satırlarını bir yer tutucu kullanıcıya kopyalayın ki öğrenenler rozetlerini korusun
  • Postgres’i SQLite ile değiştirmeyin

Gelen yanıt (çoğunlukla iyi)

Sonuçların özeti şöyle:

Katman

Devin’in Çıktısı

Veritabanı

Session tablosu kaldırıldı; email, hash, seri alanları ve zaman damgaları olan bir User modeli eklendi. Migrasyon betiği, eski her sessionId satırını legacy-<uuid>@anon.local adlı sözde bir kullanıcıya geri doldurdu.

Arka uç

AuthModule, AuthService, GraphQL AuthResolver, JwtStrategy ve bir GqlAuthGuard. Tamamen Nest’e uygun, %100 tipli.

Ön uç

AuthProvider React context, LoginForm, RegisterForm, korumalı rotalarda açılan bir modal ve gösterge paneli başlığında bir çıkış düğmesi.

Güvenlik

Argon2 (12 tur), class-validator ile DTO doğrulaması, JWT’ler localStorage’da saklanıyor, her ilerleme çözücüsünde korumalar var.

Testler

AuthService.register/login için birim testi ve token eksikliğini reddettiğini doğrulayan bir e2e mutasyon testi. (Testleri eklemesi için ikinci kez yönlendirdim)

Bir başka SQLite migrasyonu

Tahmin edin Devin’in küçük düşünme kutusunda yine ne belirdi.

Yerel geliştirme için PostgreSQL’den SQLite’a başarıyla geçirildi 🥳

Kendisine yapmamasını söylediğim şeyin ta kendisi. Prisma şeması SQLite için yeniden yazılmış, bağlantı dizeleri ve tipler (TIMESTAMP’tan DATETIME’a) değiştirilmişti. Oturum ortasında yakaladım:

  1. Oturumu durdurdum.
  2. git checkout main apps/api/prisma/schema.prisma (Postgres şemasını geri yükleyin).
  3. Yeni dev.db dosyasını sildim.
  4. npm run prisma:migrate --workspace=apps/api ile Postgres migrasyonlarını yeniden uyguladım.
  5. Devin’i sürdüm; geri almayı algıladı ve şikayet etmeden devam etti.

Zarar: 0,8 ACU ve yaklaşık on dakika.

Ekip arkadaşları için kırıcı değişiklik kontrol listesi

Devin’in PR’lara koyduğu talimatları gerçekten takdir ediyorum. Burada bize şunları söyledi:

# 1  Install new deps
npm install --workspaces

# 2  Run the Postgres migration
npm run prisma:migrate --workspace=apps/api

# 3  Restart everything
npm run dev:api   &   npm run dev:web

Mimari anlık görüntü

Wiki’de, yeni kimlik doğrulama sistemimizin bu faydalı diyagramını buldum:

Yeni kimlik doğrulama sistemimiz için Devin'in diyagramı

Gerçek kullanıcılar devrede ve veritabanı kararlılıkla Postgres’teyken, nihayet gerçek öğrenen ilerlemesini izlemeye, Vercel’e önizleme derlemeleri göndermeye ve Sentry ile çalışma zamanı hatalarını yakalamaya hazırız.

Ön Uç Vercel’de, Her PR’da Önizleme Bağlantıları

Güvenli oturum açmalar hazırken, sıradaki bariz dönüm noktası dünyaya tıklanabilir bir şey göstermekti. Şimdilik yalnızca Next.js ön ucunu dağıtmaya karar verdik. API ve Postgres, bütçeye uygun bir barındırıcı seçene kadar benim yerel makinemde kalacak.

Manuel hesap bağlantısı (0 ACU)

Devin’i yerel entegrasyonlarla kişisel Vercel hesabıma bağlamak henüz mümkün değil. Bu yüzden Vercel paneli üzerinden manuel yaptım:

  1. Vercel’e giriş yaptım ve “New Project → Import Git Repository”ye tıkladım.
  2. fp-ts-exercises reposunu seçtim, derleme komutunu npm run build --workspace apps/web olarak bıraktım ve Deploy’a bastım.
  3. Ortaya çıkan VERCEL_PROJECT_ID ve VERCEL_TOKEN değerlerini GitHub Secrets’a kopyaladım.

CI iş akışını Devin’e güncelletin (0,4 ACU)

Yönlendirmemi takip ederek, Devin mevcut iş akışının en altına tek bir iş ve oluşturulan URL’yi Slack’e curl’layan küçük bir kabuk adımı ekledi:

- name: Deploy to Vercel
  if: ${{ success() && github.event_name == 'pull_request' }}
  run: npx vercel deploy --prod --token ${{ secrets.VERCEL_TOKEN }}
  env:
    VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
    VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

Sonuç

Bir dalı it → CI yeşil → Slack uyarısı:

✅ Preview ready: https://fp-ts-exercises-git-my-branch.vercel.app

Bağlantıyı açmak bize oyun alanımızı, tam kimlik doğrulama akışını ve öğrenen panosunu gösterdi. Vercel tarafında henüz ortam yapılandırması gerekmedi; çünkü ön uç, yereldeki API ile http://localhost:4000 üzerinden konuşuyor.

Devin’in Gizli Anahtarlar Sistemine Yakından Bakış

Sentry entegrasyonundan önce, kullanmalı mıyım anlamak için Devin’in gizli anahtarlar sistemine baktım. Devin, ajanı API anahtarları, DB URL’leri veya OAuth token’larıyla besleyebilmeniz için yerleşik bir “Secrets” kasası sunuyor; böylece onları Git’e işlemeden ve sohbette ifşa etmeden kullanabiliyorsunuz. Bunu, GitHub Actions secrets veya Vercel Environment Variables’ın hafif bir karşılığı gibi düşünün; ancak Devin’in kendi bulut çalışma alanlarına kapsamlı.

Özellik

Nasıl çalışır

Notlar

Kapsam

Gizli anahtarlar üç kapsamda bulunur: organizasyon, repo ve oturum. 

Gizli anahtarları organizasyon düzeyinde, tüm oturumlarınızda kullanılabilir kılabilirsiniz. 

Yalnızca tek bir repo için eklemek isterseniz, repoyu kurarken belirtebilirsiniz.Gizli anahtarların oturuma özel olmasını isterseniz, oturum ayarlarında sağlayabilirsiniz. 

Şifreleme

Sunucu tarafında AES-256 ile saklanır ve aktarım sırasında TLS 1.3+ kullanılır

Tüm müşteri verileri, AWS tarafından yönetilen özel bir KMS anahtarı (Key Management Service) ile şifrelenir.

ACU maliyeti yok

Bir gizli anahtar eklemek, düzenlemek veya silmek kontrol düzlemi eylemidir: 0 ACU. Yalnızca gizli anahtarı kullanan görevler hesaplama kredisi tüketir.

Uzun ömürlü token’ları saklamak için iyi bir yer.

Yönlendirmelerde erişim

$.<NAME> ifadesini yönlendirmede veya bir komutta kullanın. Devin, kabuğu çalıştırmadan önce bunu çözümler.

Örnek: DATABASE_URL=$.POSTGRES_URL

Boyut sınırları

Anahtar başına 4 KB, Core katmanında takım başına 100 anahtar.

PEM sertifikaları veya özel anahtarlar için yeterli.

Bir gizli anahtar ekleme

Bir gizli anahtar eklemek için izlemeniz gereken adımlar:

  1. Team → Secrets bölümünü Devin panelinde açın.
  2. “Add Secret”’a tıklayın ve bir ad (SENTRY_DSN_WEB) ve değerini girin.
  3. Devin saklamayı onaylar; anahtar artık $.SENTRY_DSN_WEB olarak kullanılabilir.

devin'de yeni bir gizli anahtar saklayın

Bir görevde gizli anahtar kullanma

Görev: API Sentry başlatımını güncelle; DSN’i $SECRET.SENTRY_DSN_API olarak ayarla

Devin, main.ts’i yazarken değeri ikame eder. Kabuk sekmesinde gerçek DSN’i görürsünüz, ancak sohbet günlüğü bunu maskeler.

Artılar ve eksiler

Artılar:

  • Anahtarların PR’lara veya Timelapse günlüklerine sızma riski yok.
  • Organizasyon kapsamlı gizli anahtarlar oturumlar arasında çalışır: bir yükleme, çoklu kullanım.
  • Saklama veya getirmede sıfır kredi maliyeti.

Eksiler:

  • Anahtarlar yerelde .env’e kopyalamadıkça mevcut değil. Devin dışında yapılan test çalıştırmaları manuel kurulum gerektirir.
  • Ortam başına kapsam yok (ör. “yalnızca prod’da”). Tüm oturumlar tüm gizli anahtarlara erişir.

Ne zaman kullanılmalı

Anahtara bizzat Devin’in ihtiyaç duyduğu durumlarda (ör. Vercel’e itme, özel bir kayıt defterine erişme veya derleme sırasında Sentry’yi bağlama) Devin’in kasasını kullanmayı daha kolay buluyorum. Yerel geliştirme kabuğunuzda veya CI koşucularında da çalışan her şey için .env / GitHub Actions gizlilerini kullanmaya devam ederdim.

Devin’in Sentry ile Entegrasyonu

Kullandığım yönlendirme şöyleydi: Her iki uygulamaya da Sentry ekleyin ki her istisna panomda görünsün. .env içindeki ortam değişkenlerini kullanın. Başka davranış değişikliği yok.

Devin’in çalışması (0,6 ACU, tek oturum)

Sonucun özeti şöyle:

Yığın

Dokunulan Dosyalar

Önemli Kod

Next.js (web)

apps/web/sentry.client.config.tsx apps/web/sentry.server.config.ts ve app/layout.tsx içine bir import

ts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });

NestJS (API)

apps/api/src/sentry.ts ve main.ts içinde iki satır

ts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());

Env iskeleti

.env.example’a yer tutucular eklendi

SENTRY_DSN_WEB=   SENTRY_DSN_API=

Testler

Sentry.captureException’ın zorlanmış bir hata üzerinde çağrıldığını doğrulamak için bir Jest spy eklendi.

 

Manuel adımlarım

Şu adımları izledim:

  1. Sentry projemden DSN’leri .env dosyasına kopyaladım.
  2. Her iki geliştirme sunucusunu da yeniden başlattım.
  3. http://localhost:4000/graphql adresine bilerek hatalı bir sorgu attım ve çalıştığını kontrol ettim. Saniyeler içinde Sentry’de bir sorun belirdi.

Devin’in gizli anahtarlar özelliğini neden atladım

Devin’in gizli anahtarlar özelliğini atlamamın nedenleri:

  • Daha basit zihinsel model: her yerde aynı .env dosyası.
  • Vercel’de önizleme derlemelerini çalıştırmak daha kolay (o ortam değişkenleri zaten orada ayarlı).
  • Gizli depo işlemleri için ACU tüketimi yok.

Değerlendirme: Devin Nerede Parlıyor, Nerede Tökezliyor

Dört bölüm önce bu repo, tozlu bir fp-ts egzersiz yığınıydı—şimdi ise şunlara sahip:

  • Modernize edilmiş kod tabanı: En güncel bağımlılıklar, katı TS yapılandırması, lint & Prettier kuralları (Bölüm 1).
  • Tarayıcı tabanlı oyun alanı: Canlı Vitest geri bildirimiyle Next.js 14 + Sandpack editörü (Bölüm 2).
  • NestJS + Postgres arka uç: GraphQL API, Prisma migrasyonları, anonim → JWT ilerleme takibi (Bölüm 2 & 4).
  • Yeşil ışıklı hat: Lint, tür kontrolü, Jest & Playwright çalıştıran ve hatalı her PR’ı engelleyen CI iş akışı (Bölüm 3).
  • Ekip entegrasyonları: Slack durum bildirimleri, Jira etiket analizi ve her dalda önizleme URL’leri (Bölüm 3).
  • Üretim gözlemlenebilirliği: Web ve API’ye bağlanan Sentry, her istisnayı yakalıyor (Bölüm 4).
  • Önizleme dağıtımları: Vercel, her pull request için paylaşılabilir bir URL döndürüyor (Bölüm 4).

≈ 70 ACU harcadık (Core planında yaklaşık $157) ve yaklaşık iki iş günü kadar birebir inceleme yaptık.

Devin’in şaşırtıcı derecede iyi yaptığı şeyler

Devin’in çok iyi olduğunu düşündüğüm alanlar:

Alan

Neden etkilendim

Şablon altyapı

AuthModule iskeletleri, Dockerfile’lar, YAML iş akışları: dakikalar içinde, hatasız üretildi.

Çerçeveye uygun kod

NestJS dekoratörleri, NextAuth yapılandırması, Prisma migrasyonları resmi dokümanlarla uyumluydu.

Test iskeletleri

Birim ve Playwright paketleri baştan derlenip çalıştı—uç durum iskeletleri eksik değildi.

Ajanı hâlâ insanın geçtiği yerler

Devin’in hâlâ geliştirilmesi gerektiğini düşündüğüm noktalar:

Ağrı noktası

Örnek

Katmanlar arası özellik cilası

Sandpack editörü, sahte testlere sabit kodlanmıştı; SandpackTests bileşen adını kavrayamadı.

Yapılandırma kalıcılığı

Açıkça “Postgres’te kalmalı” dememe rağmen 5 kez tekrar SQLite’a döndü.

Adlandırma / temizlik

PR başlıkları sapabiliyor, Devin’e silmesini söylemezseniz bayat dosyalar kalabiliyor.

Zevk & UX

Gösterge paneli idare eder görünüyordu, ama boşluklar, metin ve renkler hâlâ el ayarı istedi.

Görüşüm

Devin’in kendi dokümanları hiçbir zaman bir ürün oluşturucusu vaat etmedi. Çok daha dar bir tatlı noktayı tarif ediyorlar ve geriye dönüp bakınca, o sınır içinde kalmalıymışım. Resmî “Devin’in güçlü yanları nelerdir?” sayfası dört başlık kullanım listeliyor:

devin güçlü yönler

Dokümanlar, UI, API ve veri akışlarını kapsayan özellik geliştirmelerini “deneysel” olarak nitelendiriyor. Bunlar, ajanın “önemli ölçüde insan incelemesi ve yineleme” gerektirebileceği, büyük ve ucu açık görevler olarak tanımlanıyor. Sandpack’in testleri sabit kodladığında veya gösterge paneli iyi görünse de verileri gerçekten hesaplamadığında gördüğümüz tam olarak buydu.

Dolayısıyla, bir kural olarak:

Kıdemli bir geliştiricinin bir betikle otomatikleştirebileceği her şey için Devin’i kullanın; ürün sezgisi gerektiren görevlerde direksiyonu sizde tutun.

Sonuç

Dört bölümlük eğitimimizin sonuna geldik:

  1. Kurulum ve İlk Pull Request (Bölüm 1)
  2. Devin ile Dikey Dilim Gönderimi (Bölüm 2) 
  3. Entegrasyonlar, Test ve CI/CD (Bölüm 3) 
  4. Güvenlik, Dağıtım, Bakım (Bölüm 4)

Buradan atabileceğimiz birkaç sonraki adım:

  1. API’yi barındırın ki önizleme derlemeleri (ve gelecekteki kullanıcılar) gerçek bir arka uca vursun.
  2. Çekirdek işlevselliğin çalıştığından emin olun ve içinde olduğunu bildiğim 30 hatayı düzeltin
  3. UI’ı cilalayın
  4. Daha fazla içerik ve egzersiz ekleyin
  5. Kullanıma açın!

Aynı yolu izlerseniz, unutmayın: ajan betonu dökebilir, ama evi tasarlamak hâlâ size kalmış. İyi kodlamalar!


Marie Fayard's photo
Author
Marie Fayard

İlk prototipten ürün-pazar uyumuna ve ötesine kadar erken aşama girişimleri büyütme konusunda uzmanlaşmış, ürün odaklı bir teknik liderim. İnsanların teknolojiyi nasıl kullandığına dair bitmeyen bir merakım var ve kurucularla ile disiplinler arası ekiplerle yakın çalışarak cesur fikirleri hayata geçirmeyi seviyorum. Ürün inşa etmediğim zamanlarda ya dünyanın yeni köşelerinde ilham peşinde koşuyor ya da yoga stüdyosunda stres atıyorum.

Konular
Yapay Zekâ Aracıları
Yapay Zeka

Bu kurslarla yapay zeka ajanları geliştirin:

Kurs

AI Agent'lere Giriş

1 sa 30 dk
142.5K
AI ajanlarının temellerini, bileşenlerini ve gerçek hayattaki kullanımlarını öğrenin — kodlama gerekmez.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör