{"id":32089,"date":"2025-10-17T16:02:13","date_gmt":"2025-10-17T13:02:13","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/"},"modified":"2025-10-17T16:02:13","modified_gmt":"2025-10-17T13:02:13","slug":"ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/","title":{"rendered":"CI\/CD&#8217;de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131"},"content":{"rendered":"<style>\n  body {\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    line-height: 1.6;\n    color: #333;\n    max-width: 1000px;\n    margin: 0 auto;\n    padding: 20px;\n    background-color: #f9f9f9;\n  }\n  h2, h3 {\n    color: #2c3e50;\n    margin-top: 30px;\n    margin-bottom: 15px;\n  }\n  h2 {\n    border-bottom: 2px solid #3498db;\n    padding-bottom: 10px;\n  }\n  h3 {\n    color: #34495e;\n  }\n  p {\n    margin-bottom: 15px;\n    text-align: justify;\n  }\n  ul, ol {\n    margin-bottom: 15px;\n    padding-left: 25px;\n  }\n  li {\n    margin-bottom: 8px;\n  }\n  pre {\n    background-color: #ecf0f1;\n    border: 1px solid #bdc3c7;\n    padding: 15px;\n    border-radius: 5px;\n    overflow-x: auto;\n    margin-bottom: 20px;\n  }\n  code {\n    font-family: 'Consolas', 'Monaco', monospace;\n    color: #c0392b; \/* Inline code color *\/\n    background-color: #e0e6eb;\n    padding: 2px 4px;\n    border-radius: 3px;\n  }\n  pre code {\n    color: #2c3e50; \/* Block code color *\/\n    background-color: transparent;\n    padding: 0;\n  }\n  .uzman-ipucu {\n    background-color: #d9edf7;\n    border-left: 5px solid #3498db;\n    padding: 15px;\n    margin: 20px 0;\n    border-radius: 4px;\n    color: #31708f;\n    font-weight: bold;\n  }\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 20px;\n  }\n  th, td {\n    border: 1px solid #ddd;\n    padding: 10px;\n    text-align: left;\n  }\n  th {\n    background-color: #f2f2f2;\n    font-weight: bold;\n  }\n  .highlight {\n      background-color: #fff9c4;\n      padding: 2px 4px;\n      border-radius: 3px;\n  }\n  \/* Responsive design for smaller screens *\/\n  @media (max-width: 768px) {\n    body {\n      padding: 15px;\n    }\n    h2 {\n      font-size: 1.8em;\n    }\n    h3 {\n      font-size: 1.4em;\n    }\n    table, pre {\n      overflow-x: auto;\n      display: block;\n      width: 100%;\n    }\n    table thead, table tbody, table tr, table th, table td {\n      display: block;\n    }\n    table tr {\n      margin-bottom: 10px;\n      border: 1px solid #ddd;\n    }\n    table td {\n      text-align: right;\n      padding-left: 50%;\n      position: relative;\n    }\n    table td::before {\n      content: attr(data-label);\n      position: absolute;\n      left: 6px;\n      width: 45%;\n      padding-right: 10px;\n      white-space: nowrap;\n      text-align: left;\n      font-weight: bold;\n    }\n  }\n<\/style>\n<p><body><\/p>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan \u00e7ok \u00f6nce nas\u0131l garanti alt\u0131na al\u0131nabilir? Bu makale, &#8220;Shift-Left&#8221; felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline&#8217;\u0131n\u0131za entegre ederek sorunlar\u0131 ba\u015ftan engellemenizi sa\u011flayacak ad\u0131mlar\u0131 detayland\u0131r\u0131yor.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, i\u015fletmelerin hayatta kalmas\u0131 ve rekabet avantaj\u0131 sa\u011flamas\u0131 i\u00e7in g\u00fcvenilir verilere eri\u015fimi \u015fartt\u0131r. Veri, uygulamalar\u0131n, kararlar\u0131n ve hatta m\u00fc\u015fteri deneyiminin temelini olu\u015fturur. Ancak \u00e7o\u011fu zaman, veri kalitesi sorunlar\u0131, \u00fcretim ortam\u0131nda veya entegrasyon a\u015famalar\u0131nda ortaya \u00e7\u0131kar ve bu da ciddi maliyetlere, itibar kayb\u0131na ve operasyonel aksakl\u0131klara yol a\u00e7abilir. \u00d6rne\u011fin, bir e-ticaret platformunda \u00fcr\u00fcn fiyatlar\u0131n\u0131n hatal\u0131 formatta girilmesi, stok bilgilerinin yanl\u0131\u015f yans\u0131t\u0131lmas\u0131 veya m\u00fc\u015fteri adreslerinin tutars\u0131z olmas\u0131, do\u011frudan sat\u0131\u015f kayb\u0131 ve m\u00fc\u015fteri memnuniyetsizli\u011fi demektir. Geleneksel yakla\u015f\u0131mlar genellikle bu t\u00fcr sorunlar\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn sonlar\u0131nda, yani test veya da\u011f\u0131t\u0131m a\u015famalar\u0131nda tespit etmeye \u00e7al\u0131\u015f\u0131r. Bu ge\u00e7 tespitler, d\u00fczeltme \u00e7abalar\u0131n\u0131n \u00e7ok daha pahal\u0131 ve zaman al\u0131c\u0131 olmas\u0131na neden olur. Bir hatay\u0131 geli\u015ftirme a\u015famas\u0131nda d\u00fczeltmek, \u00fcretimde d\u00fczeltmekten katbekat daha ucuzdur; bu oran\u0131n 1:100 veya 1:1000&#8217;e kadar \u00e7\u0131kabildi\u011fi tahmin edilmektedir. \u0130\u015fte tam da bu noktada <span class=\"highlight\">&#8220;Shift-Left&#8221; yakla\u015f\u0131m\u0131<\/span> devreye girer.<\/p>\n<p>&#8220;Shift-Left&#8221; prensibi, kalite g\u00fcvence ve test s\u00fcre\u00e7lerini yaz\u0131l\u0131m geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn (SDLC) m\u00fcmk\u00fcn olan en erken a\u015famalar\u0131na ta\u015f\u0131may\u0131 savunur. Yani, sorunlar\u0131 olu\u015fmadan \u00f6nce, hen\u00fcz geli\u015ftirme a\u015famas\u0131nda tespit edip \u00e7\u00f6zmeyi hedefler. Bu felsefe, yaln\u0131zca kod kalitesi i\u00e7in de\u011fil, ayn\u0131 zamanda veri kalitesi ve entegrasyon tutarl\u0131l\u0131\u011f\u0131 i\u00e7in de ge\u00e7erlidir. Veri s\u00f6zle\u015fmelerinin CI\/CD pipeline&#8217;\u0131na entegrasyonu, bu Shift-Left prensibinin veri d\u00fcnyas\u0131na uygulanmas\u0131n\u0131n en g\u00fc\u00e7l\u00fc yollar\u0131ndan biridir. Bu sayede, veri \u00fcreten veya t\u00fcketen servisler aras\u0131ndaki uyumsuzluklar, daha kod yaz\u0131l\u0131rken veya en az\u0131ndan CI\/CD s\u00fcrecinin ilk ad\u0131mlar\u0131nda tespit edilir. B\u00f6ylelikle, entegrasyon hatalar\u0131, yanl\u0131\u015f veri tipleri, eksik alanlar veya beklenmedik de\u011ferler gibi sorunlar, \u00fcretim ortam\u0131na ula\u015fmadan \u00e7ok \u00f6nce yakalan\u0131r ve d\u00fczeltilir. Bu makalede, veri s\u00f6zle\u015fmelerinin ne oldu\u011funu, Shift-Left felsefesiyle nas\u0131l birle\u015fti\u011fini ve bu g\u00fc\u00e7l\u00fc ikiliyi CI\/CD pipeline&#8217;\u0131n\u0131za ad\u0131m ad\u0131m nas\u0131l entegre edebilece\u011finizi ayr\u0131nt\u0131l\u0131 olarak inceleyece\u011fiz. Amac\u0131m\u0131z, veri kalitesini sadece bir &#8220;temenni&#8221; olmaktan \u00e7\u0131kar\u0131p, otomatik ve zorunlu bir s\u00fcre\u00e7 haline getirmektir.<\/p>\n<h2 id=\"veri-sozlesmeleri-ve-shift-left-temel-taslar-nelerdir\">Veri S\u00f6zle\u015fmeleri ve Shift-Left: Temel Ta\u015flar Nelerdir?<\/h2>\n<p>Konunun derinliklerine inmeden \u00f6nce, temel kavramlar\u0131 netle\u015ftirmek \u00f6nemlidir. Bu b\u00f6l\u00fcmde, veri s\u00f6zle\u015fmelerinin ne anlama geldi\u011fini, Shift-Left felsefesinin \u00f6z\u00fcn\u00fc ve bu iki kavram\u0131n bir araya geldi\u011finde nas\u0131l bir sinerji yaratt\u0131\u011f\u0131n\u0131 a\u00e7\u0131klayaca\u011f\u0131z. Veri kalitesini garanti alt\u0131na alman\u0131n yol haritas\u0131 bu temel kavramlar\u0131n sa\u011flam bir \u015fekilde anla\u015f\u0131lmas\u0131yla ba\u015flar.<\/p>\n<h3 id=\"veri-sozlesmesi-nedir-ve-ne-ise-yarar\">Veri S\u00f6zle\u015fmesi Nedir ve Ne \u0130\u015fe Yarar?<\/h3>\n<p>Veri s\u00f6zle\u015fmesi (Data Contract), iki veya daha fazla sistem aras\u0131nda de\u011fi\u015f toku\u015f edilecek verinin yap\u0131s\u0131n\u0131, format\u0131n\u0131 ve beklentilerini tan\u0131mlayan a\u00e7\u0131k, \u00fczerinde anla\u015f\u0131lm\u0131\u015f ve genellikle makine taraf\u0131ndan okunabilir bir belgedir. T\u0131pk\u0131 bir API&#8217;nin hangi girdileri bekledi\u011fini ve hangi \u00e7\u0131kt\u0131lar\u0131 verece\u011fini belirten bir <codetag>OpenAPI<\/codetag> (Swagger) dok\u00fcman\u0131 gibi, veri s\u00f6zle\u015fmeleri de veri setleri veya veri ak\u0131\u015flar\u0131 i\u00e7in benzer bir &#8220;anla\u015fma&#8221; g\u00f6revi g\u00f6r\u00fcr. \u00d6rne\u011fin, bir mikroservis mimarisinde, sipari\u015f servisi m\u00fc\u015fteri servisine bir <codetag>m\u00fc\u015fteriID<\/codetag> g\u00f6nderdi\u011finde, bu <codetag>m\u00fc\u015fteriID<\/codetag>&#8216;nin bir say\u0131sal de\u011fer olaca\u011f\u0131, belirli bir aral\u0131kta bulunaca\u011f\u0131 veya belirli bir regex format\u0131na uygun olmas\u0131 gerekti\u011fi veri s\u00f6zle\u015fmesinde belirtilir.<\/p>\n<p>Veri s\u00f6zle\u015fmeleri genellikle \u015fu bilgileri i\u00e7erir:<\/p>\n<ul>\n<li><strong>Veri Alanlar\u0131 (Fields):<\/strong> Hangi alanlar\u0131n var olmas\u0131 gerekti\u011fi.<\/li>\n<li><strong>Veri Tipleri (Data Types):<\/strong> Her alan\u0131n hangi tipte veri i\u00e7ermesi gerekti\u011fi (string, integer, boolean, array vb.).<\/li>\n<li><strong>K\u0131s\u0131tlamalar (Constraints):<\/strong> Alanlar\u0131n alabilece\u011fi minimum\/maksimum de\u011ferler, uzunluklar, regex desenleri, zorunluluk (nullable\/non-nullable) gibi kurallar.<\/li>\n<li><strong>Meta Veriler (Metadata):<\/strong> Alan\u0131n a\u00e7\u0131klamas\u0131, k\u00f6keni, hassasiyeti (PII olup olmad\u0131\u011f\u0131) gibi ek bilgiler.<\/li>\n<\/ul>\n<p>Bu s\u00f6zle\u015fmeler, genellikle <codetag>JSON Schema<\/codetag>, <codetag>Apache Avro<\/codetag> veya <codetag>Google Protobuf<\/codetag> gibi standart formatlarda yaz\u0131l\u0131r. Amac\u0131, veri \u00fcreten (producer) ve veri t\u00fcketen (consumer) taraflar aras\u0131nda net bir beklenti olu\u015fturmak, ileti\u015fimsizlikten kaynaklanan entegrasyon hatalar\u0131n\u0131 \u00f6nlemek ve veri yap\u0131s\u0131ndaki de\u011fi\u015fikliklerin etkilerini y\u00f6netmektir. Bir veri s\u00f6zle\u015fmesi olmadan, her iki taraf da veriyi farkl\u0131 yorumlayabilir, bu da tutars\u0131zl\u0131klara ve sistem hatalar\u0131na yol a\u00e7ar. K\u0131sacas\u0131, veri s\u00f6zle\u015fmeleri, da\u011f\u0131t\u0131k sistemlerde veri ak\u0131\u015f\u0131n\u0131n g\u00fcvenilirli\u011fini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini sa\u011flaman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h3 id=\"shift-left-felsefesi-neyi-amaclar\">Shift-Left Felsefesi Neyi Ama\u00e7lar?<\/h3>\n<p>&#8220;Shift-Left&#8221; felsefesi, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, test etme, kalite g\u00fcvence ve g\u00fcvenlik gibi faaliyetleri geli\u015ftirme s\u00fcrecinin zaman \u00e7izelgesinde &#8220;sola&#8221; kayd\u0131rmay\u0131, yani daha erken a\u015famalara \u00e7ekmeyi ifade eder. Geleneksel waterfall modelinde, test ve kalite kontrolleri genellikle geli\u015ftirme bittikten sonra, yani projenin sonlar\u0131na do\u011fru yap\u0131l\u0131rd\u0131. Bu durum, hatalar\u0131n ge\u00e7 ke\u015ffedilmesine ve d\u00fczeltme maliyetlerinin katlanarak artmas\u0131na neden oluyordu. Agile ve DevOps metodolojilerinin yayg\u0131nla\u015fmas\u0131yla birlikte, Shift-Left yakla\u015f\u0131m\u0131 daha da \u00f6nem kazand\u0131.<\/p>\n<p>Bu felsefenin temel ama\u00e7lar\u0131 \u015funlard\u0131r:<\/p>\n<ol>\n<li><strong>Hatalar\u0131 Erken Yakalama:<\/strong> Sorunlar\u0131 geli\u015ftirme a\u015famas\u0131nda, hatta tasar\u0131m a\u015famas\u0131nda tespit etmek.<\/li>\n<li><strong>Maliyetleri Azaltma:<\/strong> Hatalar\u0131 erken d\u00fczeltmek, ge\u00e7 d\u00fczeltmekten \u00e7ok daha ucuzdur.<\/li>\n<li><strong>Kaliteyi Art\u0131rma:<\/strong> S\u00fcrekli test ve geri bildirim d\u00f6ng\u00fcleri sayesinde daha y\u00fcksek kaliteli \u00fcr\u00fcnler ortaya \u00e7\u0131karmak.<\/li>\n<li><strong>Geli\u015ftirme H\u0131z\u0131n\u0131 Art\u0131rma:<\/strong> Geriye d\u00f6n\u00fck d\u00fczeltmelerle kaybedilen zaman\u0131 minimize ederek geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131rmak.<\/li>\n<li><strong>\u0130\u015fbirli\u011fini Geli\u015ftirme:<\/strong> Farkl\u0131 ekiplerin (geli\u015ftirici, test m\u00fchendisi, operasyon) geli\u015ftirme s\u00fcrecinin ba\u015f\u0131ndan itibaren birlikte \u00e7al\u0131\u015fmas\u0131n\u0131 te\u015fvik etmek.<\/li>\n<\/ol>\n<p>Veri s\u00f6zle\u015fmelerinin Shift-Left prensibiyle birle\u015fmesi, geli\u015ftiricilerin kod yazarken veri beklentilerini ve k\u0131s\u0131tlamalar\u0131n\u0131 dikkate almas\u0131n\u0131 sa\u011flar. Bu, yaln\u0131zca kodun de\u011fil, ayn\u0131 zamanda i\u015flenecek verinin de ba\u015ftan do\u011fru ve tutarl\u0131 olmas\u0131n\u0131 garantiler. Dolay\u0131s\u0131yla, veri kalitesi sorunlar\u0131, \u00fcretim ortam\u0131na ula\u015fmadan \u00e7ok \u00f6nce, birim testleri veya CI\/CD pipeline&#8217;\u0131ndaki otomatik kontroller arac\u0131l\u0131\u011f\u0131yla tespit edilebilir.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Shift-Left yakla\u015f\u0131m\u0131 sadece hata bulma de\u011fil, ayn\u0131 zamanda risk y\u00f6netimi felsefesidir. Ne kadar erken m\u00fcdahale edilirse, potansiyel riskler o kadar d\u00fc\u015f\u00fck maliyetle bertaraf edilir.\n<\/div>\n<h2 id=\"geleneksel-yaklasimlar-neden-yetersiz-kaliyor\">Geleneksel Yakla\u015f\u0131mlar Neden Yetersiz Kal\u0131yor?<\/h2>\n<p>Modern da\u011f\u0131t\u0131k sistemler ve mikroservis mimarileri, veri ak\u0131\u015flar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rm\u0131\u015ft\u0131r. Geleneksel veri y\u00f6netim yakla\u015f\u0131mlar\u0131, bu karma\u015f\u0131kl\u0131\u011f\u0131n getirdi\u011fi zorluklarla ba\u015fa \u00e7\u0131kmakta yetersiz kalmaktad\u0131r. Veri s\u00f6zle\u015fmeleri ve Shift-Left felsefesi olmadan kar\u015f\u0131la\u015f\u0131lan yayg\u0131n sorunlar\u0131 anlamak, yeni yakla\u015f\u0131m\u0131n neden bu kadar kritik oldu\u011funu kavramam\u0131z\u0131 sa\u011flar.<\/p>\n<h3 id=\"gec-tespit-edilen-hatalarin-yuksek-maliyeti\">Ge\u00e7 Tespit Edilen Hatalar\u0131n Y\u00fcksek Maliyeti<\/h3>\n<p>Geleneksel olarak, veri entegrasyon hatalar\u0131 genellikle entegrasyon testleri, sistem testleri veya en k\u00f6t\u00fcs\u00fc, \u00fcretim ortam\u0131nda canl\u0131ya ge\u00e7tikten sonra tespit edilir. Bu ge\u00e7 tespitlerin beraberinde getirdi\u011fi maliyetler olduk\u00e7a y\u00fcksektir. Bir hatan\u0131n d\u00fczeltilme maliyeti, ke\u015ffedildi\u011fi a\u015famaya g\u00f6re katlanarak artar. \u00d6rne\u011fin, bir tasar\u0131m hatas\u0131n\u0131 d\u00fczeltmek birka\u00e7 saat alabilirken, ayn\u0131 hatan\u0131n canl\u0131 sistemde ke\u015ffedilmesi ve d\u00fczeltilmesi g\u00fcnlerce, hatta haftalarca s\u00fcrebilir. Bu durum, sadece m\u00fchendislik \u00e7abas\u0131n\u0131 art\u0131rmakla kalmaz, ayn\u0131 zamanda i\u015f s\u00fcre\u00e7lerini aksat\u0131r, m\u00fc\u015fteri memnuniyetsizli\u011fine yol a\u00e7ar ve \u015firketin itibar\u0131na zarar verir. Finansal verilerde bir tutars\u0131zl\u0131k, raporlamada hatalara ve yanl\u0131\u015f i\u015f kararlar\u0131na neden olabilir. Bir bankac\u0131l\u0131k sisteminde, m\u00fc\u015fteri bakiyelerinde yap\u0131lan hatal\u0131 bir g\u00fcncelleme, yasal sorunlara ve b\u00fcy\u00fck para cezalar\u0131na yol a\u00e7abilir. Dolay\u0131s\u0131yla, hatalar\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn en ba\u015f\u0131nda yakalamak, hem zaman hem de para a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck bir tasarruf sa\u011flar. Ne yaz\u0131k ki, \u00e7o\u011fu kurulu\u015f hala bu t\u00fcr sorunlar\u0131 &#8220;son dakikada&#8221; \u00e7\u00f6zmeye \u00e7al\u0131\u015fmaktad\u0131r, bu da teknik borcun birikmesine ve s\u00fcrekli bir &#8220;yang\u0131n s\u00f6nd\u00fcrme&#8221; k\u00fclt\u00fcr\u00fcn\u00fcn olu\u015fmas\u0131na zemin haz\u0131rlar.<\/p>\n<h3 id=\"veri-tutarsizliginin-is-sureclerine-etkileri\">Veri Tutars\u0131zl\u0131\u011f\u0131n\u0131n \u0130\u015f S\u00fcre\u00e7lerine Etkileri<\/h3>\n<p>Veri tutars\u0131zl\u0131\u011f\u0131, farkl\u0131 sistemlerde ayn\u0131 verinin farkl\u0131 \u015fekillerde saklanmas\u0131 veya i\u015flenmesi durumudur. Veri s\u00f6zle\u015fmeleri olmad\u0131\u011f\u0131nda, veri \u00fcreten ve t\u00fcketen sistemler aras\u0131nda yaz\u0131l\u0131 olmayan varsay\u0131mlar olu\u015fur. \u00d6rne\u011fin, bir mikroservis bir <codetag>telefon_numaras\u0131<\/codetag> alan\u0131n\u0131 <codetag>string<\/codetag> olarak beklerken, ba\u015fka bir servis bu alan\u0131 uluslararas\u0131 formatta veya bo\u015fluklarla g\u00f6nderebilir. Veya bir alan\u0131n zorunlu olup olmad\u0131\u011f\u0131 konusunda bir anla\u015fma yoksa, eksik veri g\u00f6nderilmesi di\u011fer sistemde hatalara neden olabilir. Bu t\u00fcr tutars\u0131zl\u0131klar, \u00f6zellikle karma\u015f\u0131k ve da\u011f\u0131t\u0131k mimarilerde, veri entegrasyon katman\u0131nda s\u00fcrekli sorunlara yol a\u00e7ar. \u0130\u015f s\u00fcre\u00e7leri, g\u00fcvenilir olmayan verilere dayand\u0131\u011f\u0131nda aksar. Bir CRM sistemindeki eksik m\u00fc\u015fteri bilgileri, sat\u0131\u015f ekibinin do\u011fru hedef kitleye ula\u015fmas\u0131n\u0131 engeller. Bir tedarik zinciri y\u00f6netim sistemindeki hatal\u0131 stok verileri, \u00fcretim planlamas\u0131n\u0131 bozabilir ve m\u00fc\u015fteri sipari\u015flerinin gecikmesine neden olabilir. Bu durumlar, sadece teknik bir sorun olmaktan \u00e7\u0131kar, do\u011frudan i\u015f operasyonlar\u0131n\u0131 ve \u015firketin gelirini etkileyen stratejik bir problem haline gelir. Veri s\u00f6zle\u015fmeleri, bu varsay\u0131mlar\u0131 ortadan kald\u0131rarak ve veri ak\u0131\u015f\u0131 i\u00e7in a\u00e7\u0131k, makine taraf\u0131ndan okunabilir kurallar tan\u0131mlayarak bu tutars\u0131zl\u0131klar\u0131 k\u00f6k\u00fcnden \u00e7\u00f6zer. Bu sayede, ekipler farkl\u0131 zaman dilimlerinde veya farkl\u0131 co\u011frafyalarda \u00e7al\u0131\u015fsa bile, ayn\u0131 veri dilini konu\u015farak ortak bir anlay\u0131\u015fa sahip olurlar.<\/p>\n<h2 id=\"ci-cd-pipeline-iniza-veri-sozlesmelerini-nasil-entegre-edersiniz\">CI\/CD Pipeline&#8217;\u0131n\u0131za Veri S\u00f6zle\u015fmelerini Nas\u0131l Entegre Edersiniz?<\/h2>\n<p>Veri s\u00f6zle\u015fmelerini CI\/CD pipeline&#8217;\u0131n\u0131za dahil etmek, Shift-Left felsefesini hayata ge\u00e7irmenin en etkili yollar\u0131ndan biridir. Bu entegrasyon, veri kalitesini otomatikle\u015ftirilmi\u015f ve s\u00fcrekli bir s\u00fcre\u00e7 haline getirerek, hatalar\u0131n \u00e7ok erken a\u015famalarda tespit edilmesini sa\u011flar. \u0130\u015fte ad\u0131m ad\u0131m nas\u0131l yapabilece\u011finiz:<\/p>\n<h3 id=\"adim-1-sozlesme-tanimlamasi-ve-format-secimi-json-schema-protobuf-openapi\">Ad\u0131m 1: S\u00f6zle\u015fme Tan\u0131mlamas\u0131 ve Format Se\u00e7imi (JSON Schema, Protobuf, OpenAPI)<\/h3>\n<p>\u0130lk ad\u0131m, \u00fczerinde anla\u015fmaya var\u0131lan veri yap\u0131s\u0131n\u0131 tan\u0131mlayan bir s\u00f6zle\u015fme olu\u015fturmakt\u0131r. Bu s\u00f6zle\u015fmelerin makine taraf\u0131ndan okunabilir ve do\u011frulanabilir olmas\u0131 gerekir. En yayg\u0131n kullan\u0131lan formatlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>JSON Schema:<\/strong> <codetag>JSON<\/codetag> verilerinin yap\u0131s\u0131n\u0131 ve k\u0131s\u0131tlamalar\u0131n\u0131 tan\u0131mlamak i\u00e7in standart bir yoldur. Esnektir ve web servislerinde s\u0131kl\u0131kla kullan\u0131l\u0131r. RESTful API&#8217;ler veya olay tabanl\u0131 mimariler i\u00e7in idealdir.<\/li>\n<li><strong>Apache Avro:<\/strong> \u00d6zellikle Apache Kafka gibi b\u00fcy\u00fck veri ekosistemlerinde yayg\u0131n olarak kullan\u0131l\u0131r. Schema ID&#8217;lerini kullanarak \u015fema evrimini (schema evolution) kolayla\u015ft\u0131r\u0131r ve veri s\u0131k\u0131\u015ft\u0131rma yetenekleri sunar.<\/li>\n<li><strong>Google Protobuf (Protocol Buffers):<\/strong> Dil ba\u011f\u0131ms\u0131z, platform ba\u011f\u0131ms\u0131z, geni\u015fletilebilir mekanizmalard\u0131r. \u00d6zellikle y\u00fcksek performansl\u0131 mikroservis ileti\u015fiminde tercih edilir ve daha kompakt bir format sunar.<\/li>\n<li><strong>OpenAPI (Swagger):<\/strong> \u00d6zellikle API s\u00f6zle\u015fmeleri i\u00e7in kullan\u0131l\u0131r. JSON veya YAML format\u0131nda API&#8217;lerin yeteneklerini, girdi\/\u00e7\u0131kt\u0131 parametrelerini ve veri modellerini tan\u0131mlar.<\/li>\n<\/ul>\n<p>Se\u00e7ilen format, projenizin ihtiya\u00e7lar\u0131na, mevcut teknoloji y\u0131\u011f\u0131n\u0131na ve veri ak\u0131\u015f\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131na ba\u011fl\u0131 olacakt\u0131r. S\u00f6zle\u015fmeler, genellikle kod repolar\u0131nda veya ayr\u0131 bir <codetag>schema-registry<\/codetag> gibi merkezi bir yerde saklan\u0131r. \u00d6rne\u011fin, bir m\u00fc\u015fteri verisi i\u00e7in <codetag>JSON Schema<\/codetag> \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code>\n{\n  \"$schema\": \"http:\/\/json-schema.org\/draft-07\/schema#\",\n  \"title\": \"M\u00fc\u015fteri Bilgileri S\u00f6zle\u015fmesi\",\n  \"description\": \"Sistemler aras\u0131 m\u00fc\u015fteri bilgilerini tan\u0131mlar.\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"musteriId\": {\n      \"type\": \"string\",\n      \"pattern\": \"^CUST-[0-9]{5}$\",\n      \"description\": \"Benzersiz m\u00fc\u015fteri kimli\u011fi\"\n    },\n    \"ad\": {\n      \"type\": \"string\",\n      \"minLength\": 2,\n      \"maxLength\": 50,\n      \"description\": \"M\u00fc\u015fterinin ad\u0131\"\n    },\n    \"soyad\": {\n      \"type\": \"string\",\n      \"minLength\": 2,\n      \"maxLength\": 50,\n      \"description\": \"M\u00fc\u015fterinin soyad\u0131\"\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"format\": \"email\",\n      \"description\": \"M\u00fc\u015fterinin e-posta adresi\"\n    },\n    \"dogumTarihi\": {\n      \"type\": \"string\",\n      \"format\": \"date\",\n      \"description\": \"M\u00fc\u015fterinin do\u011fum tarihi (YYYY-MM-DD)\"\n    },\n    \"adres\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"sokak\": { \"type\": \"string\" },\n        \"sehir\": { \"type\": \"string\" },\n        \"postaKodu\": { \"type\": \"string\", \"pattern\": \"^[0-9]{5}$\" }\n      },\n      \"required\": [\"sokak\", \"sehir\", \"postaKodu\"]\n    }\n  },\n  \"required\": [\"musteriId\", \"ad\", \"soyad\", \"email\"]\n}\n<\/pre>\n<p><\/code><\/p>\n<h3 id=\"adim-2-gelistirme-ortaminda-dogrulama-pre-commit-hook-unit-test\">Ad\u0131m 2: Geli\u015ftirme Ortam\u0131nda Do\u011frulama (Pre-Commit Hook, Unit Test)<\/h3>\n<p>Shift-Left'in ruhuna uygun olarak, veri s\u00f6zle\u015fmesi do\u011frulamay\u0131 geli\u015ftiricinin yerel ortam\u0131na getirin. Bu, hatalar\u0131 m\u00fcmk\u00fcn olan en erken noktada yakalaman\u0131n en iyi yoludur. \u0130ki ana y\u00f6ntem kullan\u0131labilir:<\/p>\n<ol>\n<li><strong>Pre-Commit Hook'lar:<\/strong> Git gibi versiyon kontrol sistemlerinde <codetag>pre-commit hook<\/codetag>'lar, kod commit edilmeden \u00f6nce belirli komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmaya izin verir. Geli\u015ftiriciler, kodlar\u0131 veri s\u00f6zle\u015fmesine uygun veri \u00fcretiyorsa veya t\u00fcketiyorsa, bu hook'lar arac\u0131l\u0131\u011f\u0131yla otomatik bir do\u011frulama tetikleyebilirler. \u00d6rne\u011fin, bir <codetag>Python<\/codetag> projesinde, <codetag>pre-commit<\/codetag> k\u00fct\u00fcphanesini kullanarak <codetag>JSON Schema<\/codetag> do\u011frulamas\u0131n\u0131 entegre edebilirsiniz. Bu sayede, hatal\u0131 veri yap\u0131s\u0131na sahip bir kodun repoya girmesi engellenir.<\/li>\n<li><strong>Unit Testleri (Birim Testleri):<\/strong> Geli\u015ftiriciler, yazd\u0131klar\u0131 kodun \u00fcretti\u011fi veya t\u00fcketti\u011fi verinin s\u00f6zle\u015fmeye uygunlu\u011funu kontrol eden birim testleri yazabilirler. Bu testler, uygulaman\u0131n veri i\u015fleme mant\u0131\u011f\u0131n\u0131n beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olur ve s\u00f6zle\u015fmeyle uyumsuzluklar\u0131 an\u0131nda yakalar. Herhangi bir veri d\u00f6n\u00fc\u015f\u00fcm\u00fc veya veri modeli g\u00fcncellemesi yap\u0131ld\u0131\u011f\u0131nda bu testlerin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131, olas\u0131 regresyonlar\u0131 \u00f6nler.<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar, geli\u015ftiricinin sorumlulu\u011funu art\u0131r\u0131r ve veri kalitesini geli\u015ftirme s\u00fcrecinin ayr\u0131lmaz bir par\u00e7as\u0131 haline getirir.<\/p>\n<h3 id=\"adim-3-ci-cd-pipeline-da-otomatik-dogrulama-ve-test\">Ad\u0131m 3: CI\/CD Pipeline'da Otomatik Do\u011frulama ve Test<\/h3>\n<p>Geli\u015ftirme ortam\u0131ndaki kontroller, birincil savunma hatt\u0131 olsa da, CI\/CD pipeline'\u0131 ikinci ve en kritik do\u011frulama a\u015famas\u0131n\u0131 sunar. Her kod de\u011fi\u015fikli\u011fi push edildi\u011finde, otomatik bir s\u00fcre\u00e7 veri s\u00f6zle\u015fmelerini do\u011frulayarak sistemin tutarl\u0131l\u0131\u011f\u0131n\u0131 garantiler.<\/p>\n<ol>\n<li><strong>Schema Do\u011frulama Ad\u0131m\u0131:<\/strong> Pipeline'\u0131n erken a\u015famalar\u0131na, \u00f6rne\u011fin derleme veya test a\u015famas\u0131ndan hemen sonra, veri s\u00f6zle\u015fmelerini do\u011frulamak i\u00e7in bir ad\u0131m ekleyin. Bu ad\u0131m, \u00fcretilen veya t\u00fcketilen verilerin (\u00f6rne\u011fin API yan\u0131tlar\u0131, mesaj kuyru\u011fu y\u00fckleri) tan\u0131mlanm\u0131\u015f <codetag>JSON Schema<\/codetag>, <codetag>Avro Schema<\/codetag> veya <codetag>Protobuf<\/codetag> dosyalar\u0131yla uyumlu olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Python i\u00e7in <codetag>jsonschema<\/codetag> k\u00fct\u00fcphanesi veya Node.js i\u00e7in <codetag>ajv<\/codetag> gibi ara\u00e7lar kullan\u0131labilir. Uyumsuzluk durumunda pipeline ba\u015far\u0131s\u0131z olur ve geli\u015ftiriciye geri bildirim sa\u011flan\u0131r.<\/li>\n<li><strong>Entegrasyon Testleri:<\/strong> Sistemdeki farkl\u0131 servislerin birbiriyle nas\u0131l etkile\u015fim kurdu\u011funu test eden entegrasyon testlerinde de veri s\u00f6zle\u015fmesi do\u011frulamalar\u0131 yap\u0131lmal\u0131d\u0131r. Bu testler, ger\u00e7ek veri ak\u0131\u015flar\u0131n\u0131 sim\u00fcle ederek veya ger\u00e7ek ortamda \u00e7al\u0131\u015farak servisler aras\u0131 veri al\u0131\u015fveri\u015finin beklenen format ve yap\u0131da olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. \u00d6rne\u011fin, bir sipari\u015f servisinin \u00fcretti\u011fi verinin, envanter servisinin t\u00fcketti\u011fi s\u00f6zle\u015fmeye uygun olup olmad\u0131\u011f\u0131 bu a\u015famada do\u011frulan\u0131r.<\/li>\n<li><strong>Uyumluluk Testleri (Contract Testing):<\/strong> \u00d6zellikle mikroservis mimarilerinde kritik bir ad\u0131md\u0131r. T\u00fcketici Taraf\u0131 S\u00f6zle\u015fme Testleri (Consumer-Driven Contract Testing) ile, veri t\u00fcketicisi (consumer) kendi beklentilerini tan\u0131mlar ve bu beklentilerin veri \u00fcreticisi (producer) taraf\u0131ndan kar\u015f\u0131land\u0131\u011f\u0131n\u0131 test eder. <codetag>Pact<\/codetag> gibi ara\u00e7lar bu konuda olduk\u00e7a etkilidir. Bu yakla\u015f\u0131m, servisler aras\u0131nda ba\u011f\u0131ms\u0131z geli\u015ftirme imkan\u0131 sunarken, entegrasyon uyumsuzluk riskini minimize eder.<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar\u0131n her biri, veri kalitesini ve sistem g\u00fcvenilirli\u011fini art\u0131rmak i\u00e7in katmanl\u0131 bir savunma mekanizmas\u0131 olu\u015fturur.<\/p>\n<h3 id=\"adim-4-surumleme-ve-uyumluluk-yonetimi\">Ad\u0131m 4: S\u00fcr\u00fcmleme ve Uyumluluk Y\u00f6netimi<\/h3>\n<p>Veri s\u00f6zle\u015fmeleri, zamanla de\u011fi\u015febilir ve bu de\u011fi\u015fikliklerin y\u00f6netilmesi kritik \u00f6neme sahiptir. S\u00f6zle\u015fmelerin s\u00fcr\u00fcmlemesi, geriye d\u00f6n\u00fck uyumlulu\u011fun (backward compatibility) korunmas\u0131n\u0131 sa\u011flar. Veri s\u00f6zle\u015fmeleri genellikle semantik s\u00fcr\u00fcmleme (<codetag>SemVer<\/codetag>) kurallar\u0131na g\u00f6re s\u00fcr\u00fcm numaralar\u0131 al\u0131r (\u00f6rne\u011fin, <codetag>v1.0.0<\/codetag>, <codetag>v1.1.0<\/codetag>, <codetag>v2.0.0<\/codetag>).<\/p>\n<ul>\n<li><strong>Geriye D\u00f6n\u00fck Uyumlu De\u011fi\u015fiklikler (Minor\/Patch):<\/strong> Mevcut t\u00fcketicileri etkilemeyen de\u011fi\u015fikliklerdir (\u00f6rn. yeni, iste\u011fe ba\u011fl\u0131 bir alan eklemek). Bu t\u00fcr de\u011fi\u015fiklikler k\u00fc\u00e7\u00fck s\u00fcr\u00fcm art\u0131\u015flar\u0131yla y\u00f6netilebilir.<\/li>\n<li><strong>Geriye D\u00f6n\u00fck Uyumsuz De\u011fi\u015fiklikler (Major):<\/strong> Mevcut t\u00fcketicilerin kodlar\u0131n\u0131 g\u00fcncellemesini gerektiren de\u011fi\u015fikliklerdir (\u00f6rn. zorunlu bir alan\u0131n kald\u0131r\u0131lmas\u0131, alan ad\u0131n\u0131n de\u011fi\u015ftirilmesi). Bu durumda yeni bir ana s\u00fcr\u00fcm (<codetag>v2.0.0<\/codetag>) yay\u0131nlan\u0131r ve eski s\u00fcr\u00fcm belirli bir s\u00fcre desteklenir, t\u00fcketicilere ge\u00e7i\u015f i\u00e7in zaman tan\u0131n\u0131r.<\/li>\n<\/ul>\n<p>CI\/CD pipeline, yeni bir s\u00f6zle\u015fme s\u00fcr\u00fcm\u00fc yay\u0131nland\u0131\u011f\u0131nda otomatik olarak uyumluluk kontrollerini \u00e7al\u0131\u015ft\u0131rabilir. \u00d6rne\u011fin, yeni bir \u015feman\u0131n, eski \u015femay\u0131 t\u00fcketen sistemler i\u00e7in geriye d\u00f6n\u00fck uyumlu olup olmad\u0131\u011f\u0131n\u0131 kontrol eden bir ad\u0131m eklenebilir. Bu y\u00f6netim, b\u00fcy\u00fck ve karma\u015f\u0131k sistemlerde veri ak\u0131\u015f\u0131n\u0131n kesintisizli\u011fini sa\u011flamak i\u00e7in hayati bir ad\u0131md\u0131r.<\/p>\n<h2 id=\"vaka-analizi-buyuk-bir-veri-platformunda-veri-sozlesmelerinin-basarisi\">Vaka Analizi: B\u00fcy\u00fck Bir Veri Platformunda Veri S\u00f6zle\u015fmelerinin Ba\u015far\u0131s\u0131<\/h2>\n<p>B\u00fcy\u00fck \u00f6l\u00e7ekli bir teknoloji \u015firketi olan \"Global Veri \u00c7\u00f6z\u00fcmleri A.\u015e.\", bir\u00e7ok farkl\u0131 i\u015f biriminden gelen veriyi bir araya getiren ve bu verileri \u00e7e\u015fitli analitik ve operasyonel sistemlere da\u011f\u0131tan karma\u015f\u0131k bir veri platformuna sahipti. Bu platform, mikroservis mimarisiyle in\u015fa edilmi\u015f olup, <codetag>Apache Kafka<\/codetag> \u00fczerinden olay tabanl\u0131 veri ak\u0131\u015f\u0131n\u0131 kullan\u0131yordu. Ba\u015flang\u0131\u00e7ta, veri yap\u0131lar\u0131nda tutarl\u0131l\u0131k sa\u011flamak i\u00e7in sadece dok\u00fcmantasyon ve \"en iyi niyet\" prensipleriyle hareket ediliyordu. Ancak bu durum, zamanla ciddi sorunlara yol a\u00e7maya ba\u015flad\u0131.<\/p>\n<p>\u015eirketin ya\u015fad\u0131\u011f\u0131 temel sorunlar \u015funlard\u0131:<\/p>\n<ul>\n<li><strong>S\u00fcrekli Entegrasyon Hatalar\u0131:<\/strong> Bir servisin veri yap\u0131s\u0131n\u0131 de\u011fi\u015ftirmesi, di\u011fer servislerin beklentilerini bozuyor ve \u00fcretimde beklenmedik hatalara neden oluyordu. \u00d6rne\u011fin, bir \u00fcr\u00fcn servisi, \u00fcr\u00fcn <codetag>SKU<\/codetag> kodunu <codetag>string<\/codetag> yerine <codetag>integer<\/codetag> olarak g\u00f6ndermeye ba\u015flad\u0131\u011f\u0131nda, bu veriyi t\u00fcketen envanter y\u00f6netimi ve sipari\u015f i\u015fleme servisleri an\u0131nda \u00e7\u00f6kmeye ba\u015fl\u0131yordu. Bu t\u00fcr hatalar, her hafta birka\u00e7 kez ya\u015fan\u0131yor ve ekiplerin zaman\u0131n\u0131n \u00f6nemli bir k\u0131sm\u0131n\u0131 \"yang\u0131n s\u00f6nd\u00fcrme\" ile ge\u00e7irmesine neden oluyordu.<\/li>\n<li><strong>G\u00fcven Sorunu:<\/strong> Veri platformuna olan g\u00fcven azal\u0131yordu. Analistler ve i\u015f birimleri, verilerin do\u011frulu\u011fundan emin olam\u0131yor, bu da yanl\u0131\u015f i\u015f kararlar\u0131 al\u0131nmas\u0131na yol a\u00e7\u0131yordu. Raporlama sistemleri s\u00fcrekli olarak farkl\u0131 sonu\u00e7lar \u00fcretiyor, bu da veri mutabakat\u0131 i\u00e7in ek i\u015f y\u00fck\u00fc yarat\u0131yordu.<\/li>\n<li><strong>Yava\u015f Geli\u015ftirme H\u0131z\u0131:<\/strong> Yeni bir \u00f6zellik geli\u015ftirilirken, veri yap\u0131lar\u0131n\u0131n manuel olarak kontrol edilmesi ve entegrasyon testlerinin uzun s\u00fcrmesi nedeniyle geli\u015ftirme d\u00f6ng\u00fcleri uzuyordu. Ekipler, ba\u011f\u0131ml\u0131l\u0131klar\u0131 nedeniyle paralel \u00e7al\u0131\u015fmakta zorlan\u0131yordu.<\/li>\n<\/ul>\n<p>Bu sorunlarla ba\u015fa \u00e7\u0131kmak i\u00e7in Global Veri \u00c7\u00f6z\u00fcmleri A.\u015e., \"Shift-Left\" felsefesiyle veri s\u00f6zle\u015fmelerini benimsemeye karar verdi. Proje ekibi, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izledi:<\/p>\n<ol>\n<li><strong>Standardizasyon:<\/strong> T\u00fcm veri ak\u0131\u015flar\u0131 i\u00e7in <codetag>Apache Avro<\/codetag> ve merkezi bir <codetag>Schema Registry<\/codetag> kullan\u0131lmas\u0131na karar verildi. Her veri ak\u0131\u015f\u0131 (\u00f6rne\u011fin, \"\u00fcr\u00fcn g\u00fcncellendi\", \"m\u00fc\u015fteri olu\u015fturuldu\" olaylar\u0131) i\u00e7in detayl\u0131 Avro \u015femalar\u0131 tan\u0131mland\u0131.<\/li>\n<li><strong>Geli\u015ftirme Ortam\u0131nda Entegrasyon:<\/strong> Geli\u015ftiricilerin kulland\u0131\u011f\u0131 IDE'lere (\u00f6rn. <codetag>IntelliJ IDEA<\/codetag>, <codetag>VS Code<\/codetag>) <codetag>Avro Schema<\/codetag> eklentileri y\u00fcklendi. B\u00f6ylece geli\u015ftiriciler, kod yazarken veri yap\u0131lar\u0131n\u0131n \u015femaya uygunlu\u011funu an\u0131nda g\u00f6rebildiler. Ayr\u0131ca, <codetag>Maven<\/codetag> ve <codetag>Gradle<\/codetag> build s\u00fcre\u00e7lerine \u015fema do\u011frulama ad\u0131mlar\u0131 eklendi, b\u00f6ylece hatal\u0131 \u015femalar compile edilmeden yakalanabildi.<\/li>\n<li><strong>CI\/CD Pipeline Entegrasyonu:<\/strong> \u015eirketin <codetag>Jenkins<\/codetag> ve <codetag>GitLab CI<\/codetag> kullanan CI\/CD pipeline'lar\u0131na yeni ad\u0131mlar eklendi. Her <codetag>commit<\/codetag> ve <codetag>merge request<\/codetag> i\u00e7in, \u00fcretilen verinin (mock veya ger\u00e7ek) ilgili Avro \u015femas\u0131na uygunlu\u011fu otomatik olarak kontrol edildi. Ayr\u0131ca, <codetag>Pact<\/codetag> k\u00fct\u00fcphanesi kullan\u0131larak t\u00fcketici odakl\u0131 s\u00f6zle\u015fme testleri uyguland\u0131. Bu testler, her mikroservisin veri \u00fcretme ve t\u00fcketme davran\u0131\u015flar\u0131n\u0131n tan\u0131mlanan s\u00f6zle\u015fmelere uygun oldu\u011funu garanti etti. Bir servis, s\u00f6zle\u015fmeyi bozacak bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131nda, pipeline an\u0131nda ba\u015far\u0131s\u0131z oldu.<\/li>\n<li><strong>Geriye Uyumluluk Mekanizmalar\u0131:<\/strong> <codetag>Schema Registry<\/codetag>, \u015fema de\u011fi\u015fikliklerinin geriye d\u00f6n\u00fck uyumlulu\u011funu zorunlu k\u0131lacak \u015fekilde yap\u0131land\u0131r\u0131ld\u0131. Bu sayede, yeni bir \u015fema s\u00fcr\u00fcm\u00fc, mevcut t\u00fcketicileri bozacak de\u011fi\u015fiklikler i\u00e7eriyorsa, kayd\u0131 engellendi ve geli\u015ftiriciye geri bildirim verildi. B\u00fcy\u00fck de\u011fi\u015fiklikler i\u00e7in ayr\u0131 <codetag>major<\/codetag> s\u00fcr\u00fcmler olu\u015fturuldu ve t\u00fcketicilerin ge\u00e7i\u015fi i\u00e7in detayl\u0131 rehberler sa\u011fland\u0131.<\/li>\n<\/ol>\n<p>Bu entegrasyonun sonu\u00e7lar\u0131 \u00e7arp\u0131c\u0131yd\u0131:<\/p>\n<ul>\n<li><strong>Hata Azalmas\u0131:<\/strong> \u00dcretim ortam\u0131ndaki veri entegrasyon hatalar\u0131 %80 oran\u0131nda azald\u0131. Ekiplerin \"yang\u0131n s\u00f6nd\u00fcrme\" s\u00fcresi dramatik bir \u015fekilde d\u00fc\u015ft\u00fc.<\/li>\n<li><strong>Geli\u015ftirme H\u0131z\u0131nda Art\u0131\u015f:<\/strong> Geli\u015ftiriciler, veri yap\u0131lar\u0131n\u0131n tutarl\u0131l\u0131\u011f\u0131 konusunda endi\u015felenmeden daha h\u0131zl\u0131 kod yazabildiler. Yeni \u00f6zelliklerin canl\u0131ya al\u0131nma s\u00fcresi k\u0131sald\u0131.<\/li>\n<li><strong>G\u00fcvenilirlik ve G\u00fcven:<\/strong> Veri platformuna olan g\u00fcven geri geldi. \u0130\u015f birimleri ve analistler, verilere daha fazla g\u00fcvendi ve daha do\u011fru kararlar alabildi.<\/li>\n<li><strong>Ekipler Aras\u0131 \u0130\u015fbirli\u011fi:<\/strong> Veri s\u00f6zle\u015fmeleri, farkl\u0131 ekipler aras\u0131nda net bir ileti\u015fim arac\u0131 haline geldi. Bir servisin nas\u0131l veri \u00fcretti\u011fi veya bekledi\u011fi konusunda yanl\u0131\u015f anla\u015f\u0131lmalar azald\u0131.<\/li>\n<\/ul>\n<p>Global Veri \u00c7\u00f6z\u00fcmleri A.\u015e.'nin deneyimi, veri s\u00f6zle\u015fmelerinin Shift-Left prensibiyle birlikte CI\/CD pipeline'\u0131na entegre edilmesinin, veri kalitesini art\u0131rmak ve b\u00fcy\u00fck \u00f6l\u00e7ekli sistemlerde operasyonel verimlili\u011fi sa\u011flamak i\u00e7in ne kadar kritik oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermi\u015ftir.<\/p>\n<h2 id=\"teknik-derinlik-kod-ve-yapilandirma-ornekleri\">Teknik Derinlik: Kod ve Yap\u0131land\u0131rma \u00d6rnekleri<\/h2>\n<p>Veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre etmenin teorik ad\u0131mlar\u0131n\u0131 ele ald\u0131k. \u015eimdi ise, bu s\u00fcreci somutla\u015ft\u0131ran baz\u0131 kod ve yap\u0131land\u0131rma \u00f6rneklerine g\u00f6z atal\u0131m. Bu \u00f6rnekler, <codetag>JSON Schema<\/codetag> kullanarak bir veri s\u00f6zle\u015fmesi tan\u0131mlamay\u0131 ve <codetag>Python<\/codetag> ile bu s\u00f6zle\u015fmeye uygunlu\u011fu CI\/CD s\u00fcrecinde nas\u0131l do\u011frulayaca\u011f\u0131n\u0131z\u0131 g\u00f6sterecek.<\/p>\n<h3 id=\"json-schema-ile-veri-sozlesmesi-tanimlama\">JSON Schema ile Veri S\u00f6zle\u015fmesi Tan\u0131mlama<\/h3>\n<p>\u00d6rnek bir <codetag>\u00fcr\u00fcn<\/codetag> verisi i\u00e7in <codetag>JSON Schema<\/codetag> tan\u0131mlayal\u0131m. Bu \u015fema, \u00fcr\u00fcn\u00fcn <codetag>id<\/codetag>, <codetag>ad\u0131<\/codetag>, <codetag>fiyat\u0131<\/codetag> ve <codetag>stok durumu<\/codetag> gibi temel \u00f6zelliklerini i\u00e7erecek ve baz\u0131 k\u0131s\u0131tlamalar uygulayacakt\u0131r.<\/p>\n<pre><code>\n<codetag>\n  \/\/ schemas\/product_v1.json\n  {\n    \"$schema\": \"http:\/\/json-schema.org\/draft-07\/schema#\",\n    \"title\": \"\u00dcr\u00fcn Bilgileri S\u00f6zle\u015fmesi v1\",\n    \"description\": \"Bir \u00fcr\u00fcn\u00fcn temel bilgilerini tan\u0131mlar.\",\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": {\n        \"type\": \"string\",\n        \"pattern\": \"^PROD-[0-9]{4}$\",\n        \"description\": \"Benzersiz \u00fcr\u00fcn kimli\u011fi\"\n      },\n      \"ad\": {\n        \"type\": \"string\",\n        \"minLength\": 3,\n        \"maxLength\": 100,\n        \"description\": \"\u00dcr\u00fcn\u00fcn ad\u0131\"\n      },\n      \"fiyat\": {\n        \"type\": \"number\",\n        \"minimum\": 0.01,\n        \"description\": \"\u00dcr\u00fcn\u00fcn birim fiyat\u0131\"\n      },\n      \"stokMiktari\": {\n        \"type\": \"integer\",\n        \"minimum\": 0,\n        \"description\": \"\u00dcr\u00fcn\u00fcn mevcut stok miktar\u0131\"\n      },\n      \"kategori\": {\n        \"type\": \"string\",\n        \"enum\": [\"Elektronik\", \"Giyim\", \"Ev Aletleri\", \"Kitap\"],\n        \"description\": \"\u00dcr\u00fcn\u00fcn kategorisi\"\n      }\n    },\n    \"required\": [\"id\", \"ad\", \"fiyat\", \"stokMiktari\", \"kategori\"]\n  }\n<\/codetag>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u015fema, <codetag>id<\/codetag> i\u00e7in bir regex deseni, <codetag>ad<\/codetag> i\u00e7in minimum\/maksimum uzunluk, <codetag>fiyat<\/codetag> ve <codetag>stokMiktari<\/codetag> i\u00e7in minimum de\u011ferler ve <codetag>kategori<\/codetag> i\u00e7in belirli bir de\u011fer listesi (<codetag>enum<\/codetag>) tan\u0131mlar. Ayr\u0131ca, t\u00fcm bu alanlar\u0131n zorunlu oldu\u011funu belirtir.<\/p>\n<h3 id=\"python-ile-ci-cd-adiminda-dogrulama\">Python ile CI\/CD Ad\u0131m\u0131nda Do\u011frulama<\/h3>\n<p>\u015eimdi, bu \u015femay\u0131 kullanarak bir <codetag>Python<\/codetag> script'i arac\u0131l\u0131\u011f\u0131yla gelen veriyi nas\u0131l do\u011frulayaca\u011f\u0131m\u0131z\u0131 g\u00f6relim. Bu script, CI\/CD pipeline'\u0131n\u0131z\u0131n bir ad\u0131m\u0131 olarak \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n<pre><code>\n<codetag>\n  # validate_product_data.py\n  import json\n  from jsonschema import validate, ValidationError\n\n  def load_schema(schema_path):\n      with open(schema_path, 'r', encoding='utf-8') as f:\n          return json.load(f)\n\n  def validate_data(data, schema):\n      try:\n          validate(instance=data, schema=schema)\n          print(\"Veri s\u00f6zle\u015fmesine uygun. Do\u011frulama ba\u015far\u0131l\u0131.\")\n          return True\n      except ValidationError as e:\n          print(f\"Veri s\u00f6zle\u015fmesine uymuyor: {e.message}\")\n          print(f\"Yol: {'.'.join(str(p) for p in e.path)}\")\n          return False\n      except Exception as e:\n          print(f\"Beklenmeyen bir hata olu\u015ftu: {e}\")\n          return False\n\n  if __name__ == \"__main__\":\n      # Y\u00fcklenecek \u015fema dosyas\u0131 yolu\n      schema_file = \"schemas\/product_v1.json\"\n      product_schema = load_schema(schema_file)\n\n      # Ge\u00e7erli bir veri \u00f6rne\u011fi\n      valid_product_data = {\n          \"id\": \"PROD-1234\",\n          \"ad\": \"Ak\u0131ll\u0131 Telefon Model X\",\n          \"fiyat\": 999.99,\n          \"stokMiktari\": 50,\n          \"kategori\": \"Elektronik\"\n      }\n\n      # Ge\u00e7ersiz bir veri \u00f6rne\u011fi (fiyat negatif, id format\u0131 yanl\u0131\u015f, kategori ge\u00e7ersiz)\n      invalid_product_data = {\n          \"id\": \"PR-123\", # Hatal\u0131 ID format\u0131\n          \"ad\": \"K\u0131sa Ad\",\n          \"fiyat\": -10.00, # Ge\u00e7ersiz fiyat\n          \"stokMiktari\": 5,\n          \"kategori\": \"Yanl\u0131\u015f Kategori\" # Ge\u00e7ersiz kategori\n      }\n\n      print(\"\\n--- Ge\u00e7erli Veri Do\u011frulamas\u0131 ---\")\n      if not validate_data(valid_product_data, product_schema):\n          exit(1) # Hata durumunda CI\/CD pipeline'\u0131n\u0131 durdur\n\n      print(\"\\n--- Ge\u00e7ersiz Veri Do\u011frulamas\u0131 ---\")\n      if not validate_data(invalid_product_data, product_schema):\n          print(\"Beklendi\u011fi gibi, ge\u00e7ersiz veri hatas\u0131 yakaland\u0131.\")\n          # Normalde burada exit(1) olurdu, ama \u00f6rnekte hatay\u0131 g\u00f6stermek i\u00e7in devam ediyoruz.\n      else:\n          exit(1) # Ge\u00e7ersiz veri ge\u00e7tiyse bu da bir hatad\u0131r\n<\/codetag>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu <codetag>Python<\/codetag> kodu, <codetag>jsonschema<\/codetag> k\u00fct\u00fcphanesini kullanarak bir JSON verisinin, tan\u0131mlanm\u0131\u015f \u015femaya uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. CI\/CD pipeline'\u0131nda bu script'i \u00e7al\u0131\u015ft\u0131rarak, bir servisin \u00fcretti\u011fi mock verinin veya test verilerinin \u015femaya uyup uymad\u0131\u011f\u0131n\u0131 otomatik olarak kontrol edebilirsiniz. <codetag>exit(1)<\/codetag> \u00e7a\u011fr\u0131s\u0131, do\u011frulama ba\u015far\u0131s\u0131z oldu\u011funda pipeline'\u0131n hata vermesini sa\u011flar.<\/p>\n<h3 id=\"git-hooks-ile-gelistirme-ortaminda-erken-uyari\">Git Hooks ile Geli\u015ftirme Ortam\u0131nda Erken Uyar\u0131<\/h3>\n<p>Daha da erken uyar\u0131 i\u00e7in, geli\u015ftiricinin makinesinde <codetag>Git pre-commit hook<\/codetag> kullanabiliriz. <codetag>pre-commit<\/codetag> arac\u0131, bu t\u00fcr hook'lar\u0131 y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r. \u00d6ncelikle <codetag>pre-commit<\/codetag> paketini kurman\u0131z gerekir (<codetag>pip install pre-commit<\/codetag>).<\/p>\n<p>Projenizin k\u00f6k dizininde bir <codetag>.pre-commit-config.yaml<\/codetag> dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code>\n<codetag>\n  # .pre-commit-config.yaml\n  - repo: local\n    hooks:\n      - id: validate-product-json\n        name: Validate product JSON against schema\n        entry: python validate_product_data.py # Yukar\u0131daki Python script'i\n        language: system\n        files: '\\.json$' # Sadece JSON dosyalar\u0131n\u0131 kontrol et\n        pass_filenames: false # Script'in t\u00fcm dosyalar\u0131 kontrol etmesini sa\u011flar\n<\/codetag>\n<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, <codetag>git init<\/codetag> edilmi\u015f bir repoda <codetag>pre-commit install<\/codetag> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n. Bu sayede, her <codetag>git commit<\/codetag> \u00f6ncesinde <codetag>validate_product_data.py<\/codetag> script'iniz \u00e7al\u0131\u015facak ve herhangi bir <codetag>.json<\/codetag> dosyas\u0131ndaki veri, tan\u0131mlanan \u015femaya g\u00f6re otomatik olarak do\u011frulanacakt\u0131r. E\u011fer do\u011frulama ba\u015far\u0131s\u0131z olursa, commit i\u015flemi engellenecektir. Bu, geli\u015ftiricinin hatay\u0131 kendi ortam\u0131nda an\u0131nda g\u00f6rmesini sa\u011flar ve Shift-Left felsefesini en u\u00e7 noktaya ta\u015f\u0131r.<\/p>\n<h2 id=\"ileri-duzey-uygulamalar-ve-en-iyi-pratikler-nelerdir\">\u0130leri D\u00fczey Uygulamalar ve En \u0130yi Pratikler Nelerdir?<\/h2>\n<p>Veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre etmek sadece bir ba\u015flang\u0131\u00e7t\u0131r. Sistemleriniz b\u00fcy\u00fcd\u00fck\u00e7e ve karma\u015f\u0131kla\u015ft\u0131k\u00e7a, bu yakla\u015f\u0131m\u0131 daha da sa\u011flamla\u015ft\u0131rmak i\u00e7in ileri d\u00fczey tekniklere ve en iyi pratiklere ihtiyac\u0131n\u0131z olacakt\u0131r.<\/p>\n<h3 id=\"sozlesme-evrimi-ve-geriye-uyumluluk\">S\u00f6zle\u015fme Evrimi ve Geriye Uyumluluk<\/h3>\n<p>Veri s\u00f6zle\u015fmeleri, yaz\u0131l\u0131m\u0131n canl\u0131 bir par\u00e7as\u0131d\u0131r ve zamanla de\u011fi\u015fmeleri ka\u00e7\u0131n\u0131lmazd\u0131r. Bu de\u011fi\u015fiklikleri y\u00f6netmek, geriye d\u00f6n\u00fck uyumlulu\u011fu (backward compatibility) sa\u011flamak, sistemlerin istikrarl\u0131 \u00e7al\u0131\u015fmaya devam etmesi i\u00e7in kritiktir. Aksi takdirde, k\u00fc\u00e7\u00fck bir s\u00f6zle\u015fme de\u011fi\u015fikli\u011fi, y\u00fczlerce t\u00fcketicinin uygulamas\u0131n\u0131n bozulmas\u0131na neden olabilir.<\/p>\n<ul>\n<li><strong>S\u00fcr\u00fcmleme Stratejileri:<\/strong> Semantik s\u00fcr\u00fcmleme (<codetag>MAJOR.MINOR.PATCH<\/codetag>) en yayg\u0131n yakla\u015f\u0131md\u0131r.\n<ul>\n<li><codetag>PATCH<\/codetag> versiyonlar\u0131: Mevcut \u015femay\u0131 bozmayan, k\u00fc\u00e7\u00fck d\u00fczeltmeler (\u00f6rn. a\u00e7\u0131klama eklemek).<\/li>\n<li><codetag>MINOR<\/codetag> versiyonlar\u0131: Geriye d\u00f6n\u00fck uyumlu yeni \u00f6zellikler (\u00f6rn. iste\u011fe ba\u011fl\u0131, yeni bir alan eklemek).<\/li>\n<li><codetag>MAJOR<\/codetag> versiyonlar\u0131: Geriye d\u00f6n\u00fck uyumsuz de\u011fi\u015fiklikler (\u00f6rn. zorunlu bir alan silmek, bir alan\u0131n tipini de\u011fi\u015ftirmek). Bu durumda yeni bir s\u00f6zle\u015fme s\u00fcr\u00fcm\u00fc yay\u0131nlan\u0131r ve t\u00fcketicilerin eski s\u00fcr\u00fcmden yenisine ge\u00e7i\u015f i\u00e7in zaman tan\u0131n\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Schema Registry Kullan\u0131m\u0131:<\/strong> Apache Kafka i\u00e7in <codetag>Confluent Schema Registry<\/codetag> gibi merkezi bir \u015fema kay\u0131t defteri, \u015fema evrimini y\u00f6netmek i\u00e7in vazge\u00e7ilmezdir. Bu registry'ler, \u015fema de\u011fi\u015fikliklerinin geriye d\u00f6n\u00fck (veya ileriye d\u00f6n\u00fck) uyumlulu\u011funu otomatik olarak kontrol edebilir ve uyumsuz de\u011fi\u015fikliklerin kaydedilmesini engelleyebilir. Bu sayede, veri \u00fcreticileri ve t\u00fcketicileri farkl\u0131 \u015fema versiyonlar\u0131yla bile sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilir.<\/li>\n<li><strong>Soft Deletion:<\/strong> Bir alan\u0131 tamamen kald\u0131rmak yerine, onu <codetag>nullable<\/codetag> veya <codetag>deprecated<\/codetag> olarak i\u015faretlemek, eski t\u00fcketicilerin hata vermesini \u00f6nleyebilir. Daha sonra uygun bir ge\u00e7i\u015f s\u00fcresinin ard\u0131ndan tamamen kald\u0131r\u0131labilir.<\/li>\n<\/ul>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Her zaman geriye d\u00f6n\u00fck uyumlu de\u011fi\u015fiklikler yapmaya \u00e7al\u0131\u015f\u0131n. Geriye d\u00f6n\u00fck uyumsuz bir de\u011fi\u015fiklik yapmak zorundaysan\u0131z, bu de\u011fi\u015fikli\u011fi y\u00f6netmek i\u00e7in ayr\u0131nt\u0131l\u0131 bir ge\u00e7i\u015f plan\u0131 ve ileti\u015fim stratejisi haz\u0131rlay\u0131n.\n<\/div>\n<h3 id=\"veri-katalogu-ve-monitorizasyon-ile-entegrasyon\">Veri Katalo\u011fu ve Monit\u00f6rizasyon ile Entegrasyon<\/h3>\n<p>Veri s\u00f6zle\u015fmeleri sadece do\u011frulama i\u00e7in de\u011fil, ayn\u0131 zamanda veri y\u00f6neti\u015fimi ve g\u00f6zlemlenebilirlik (observability) i\u00e7in de temel olu\u015fturur.<\/p>\n<ul>\n<li><strong>Veri Katalo\u011fu:<\/strong> S\u00f6zle\u015fmelerinizi merkezi bir veri katalo\u011fu (\u00f6rn. <codetag>Collibra<\/codetag>, <codetag>Alation<\/codetag>, <codetag>Atlan<\/codetag> veya a\u00e7\u0131k kaynakl\u0131 <codetag>Amundsen<\/codetag>) ile entegre edin. Bu sayede, t\u00fcm ekipler hangi verilerin mevcut oldu\u011funu, bu verilerin yap\u0131s\u0131n\u0131, k\u0131s\u0131tlamalar\u0131n\u0131 ve sorumluluklar\u0131n\u0131 tek bir yerden ke\u015ffedebilir. Veri katalo\u011fu, veri s\u00f6zle\u015fmelerini canl\u0131, g\u00fcncel ve aranabilir bir bilgi kayna\u011f\u0131 haline getirir.<\/li>\n<li><strong>Veri Kalitesi Metrikleri ve Monit\u00f6rizasyon:<\/strong> CI\/CD pipeline'\u0131n\u0131zdaki s\u00f6zle\u015fme do\u011frulama sonu\u00e7lar\u0131n\u0131 izleme sistemlerinize (\u00f6rn. <codetag>Prometheus<\/codetag>, <codetag>Grafana<\/codetag>) g\u00f6nderin. Hangi s\u00f6zle\u015fmelerin ne s\u0131kl\u0131kta ba\u015far\u0131s\u0131z oldu\u011fu, hangi alanlar\u0131n s\u0131kl\u0131kla do\u011frulama hatas\u0131 verdi\u011fini izleyerek, veri kalitesi sorunlar\u0131n\u0131n k\u00f6k nedenlerini daha h\u0131zl\u0131 tespit edebilirsiniz. Ayr\u0131ca, \u00fcretim ortam\u0131ndaki ger\u00e7ek veri ak\u0131\u015flar\u0131n\u0131 da bu s\u00f6zle\u015fmelere g\u00f6re do\u011frulayan ve anomalileri bildiren monit\u00f6rler kurun. Bu, canl\u0131 sistemlerde veri kalitesini s\u00fcrekli olarak denetlemenizi sa\u011flar.<\/li>\n<li><strong>Otomatik Dok\u00fcmantasyon:<\/strong> Veri s\u00f6zle\u015fmeleri, do\u011fas\u0131 gere\u011fi m\u00fckemmel birer dok\u00fcmantasyon kayna\u011f\u0131d\u0131r. CI\/CD pipeline'\u0131n\u0131z, bu s\u00f6zle\u015fmeleri kullanarak otomatik olarak okunabilir API dok\u00fcmantasyonlar\u0131 veya veri ak\u0131\u015f\u0131 diyagramlar\u0131 olu\u015fturabilir. Bu, manuel dok\u00fcmantasyon y\u00fck\u00fcn\u00fc azalt\u0131r ve dok\u00fcmantasyonun her zaman g\u00fcncel kalmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey uygulamalar, veri s\u00f6zle\u015fmelerini sadece bir \"test arac\u0131\" olmaktan \u00e7\u0131kar\u0131p, t\u00fcm veri ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc kapsayan stratejik bir varl\u0131k haline getirir. Bu sayede, sadece hatalar\u0131 \u00f6nlemekle kalmaz, ayn\u0131 zamanda veri platformunuzun genel sa\u011fl\u0131\u011f\u0131n\u0131, \u015feffafl\u0131\u011f\u0131n\u0131 ve y\u00f6netilebilirli\u011fini de art\u0131r\u0131rs\u0131n\u0131z.<\/p>\n<h2 id=\"sonuc-veri-guvenilirligine-giden-yol\">Sonu\u00e7: Veri G\u00fcvenilirli\u011fine Giden Yol<\/h2>\n<p>Bu makale boyunca, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesinin ve tutarl\u0131l\u0131\u011f\u0131n\u0131n neden bu kadar kritik oldu\u011funu, geleneksel yakla\u015f\u0131mlar\u0131n neden yetersiz kald\u0131\u011f\u0131n\u0131 ve \"Shift-Left\" felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre etmenin \u00f6nemini detayl\u0131ca inceledik. G\u00f6rd\u00fck ki, veri s\u00f6zle\u015fmeleri, veri \u00fcreten ve t\u00fcketen sistemler aras\u0131nda a\u00e7\u0131k ve makine taraf\u0131ndan okunabilir bir anla\u015fma sa\u011flayarak ileti\u015fimsizlikten kaynaklanan hatalar\u0131 en aza indirir. Shift-Left prensibini benimseyerek, bu s\u00f6zle\u015fme do\u011frulamalar\u0131n\u0131 geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn m\u00fcmk\u00fcn olan en erken a\u015famalar\u0131na ta\u015f\u0131yarak, hatalar\u0131 \u00fcretim ortam\u0131na ula\u015fmadan \u00e7ok \u00f6nce yakalama ve d\u00fczeltme yetene\u011fi kazan\u0131r\u0131z. Bu, sadece maliyetleri d\u00fc\u015f\u00fcrmekle kalmaz, ayn\u0131 zamanda geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r, sistem g\u00fcvenilirli\u011fini y\u00fckseltir ve veri platformunuza olan genel g\u00fcveni peki\u015ftirir. Ad\u0131m ad\u0131m rehberimiz, JSON Schema gibi ara\u00e7larla s\u00f6zle\u015fmeleri nas\u0131l tan\u0131mlayaca\u011f\u0131n\u0131z\u0131, Git pre-commit hook'lar\u0131 ve CI\/CD ad\u0131mlar\u0131 arac\u0131l\u0131\u011f\u0131yla nas\u0131l do\u011frulayaca\u011f\u0131n\u0131z\u0131 ve s\u00fcr\u00fcmleme stratejileriyle nas\u0131l y\u00f6netece\u011finizi g\u00f6sterdi. Unutmayal\u0131m ki, veri, \u00e7a\u011f\u0131m\u0131z\u0131n yeni alt\u0131n\u0131d\u0131r ve bu alt\u0131n\u0131 do\u011fru bir \u015fekilde i\u015flemek, her kurulu\u015f i\u00e7in stratejik bir zorunluluktur. Veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre etmek, bu zorunlulu\u011fu proaktif, otomatik ve s\u00fcrd\u00fcr\u00fclebilir bir \u015fekilde yerine getirmenin en etkili yollar\u0131ndan biridir.<\/p>\n<h3 id=\"sikca-sorulan-sorular-sss\">S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt><strong>Veri s\u00f6zle\u015fmeleri sadece mikroservis mimarileri i\u00e7in mi ge\u00e7erlidir?<\/strong><\/dt>\n<dd>Hay\u0131r, veri s\u00f6zle\u015fmeleri sadece mikroservis mimarileri i\u00e7in de\u011fil, ayn\u0131 zamanda monolitik uygulamalar i\u00e7inde farkl\u0131 mod\u00fcller veya harici sistemlerle entegrasyonlar i\u00e7in de ge\u00e7erlidir. Veri ak\u0131\u015f\u0131n\u0131n oldu\u011fu her yerde, veri s\u00f6zle\u015fmeleri tutarl\u0131l\u0131\u011f\u0131 ve g\u00fcvenilirli\u011fi art\u0131rmak i\u00e7in kullan\u0131labilir.<\/dd>\n<dt><strong>Veri s\u00f6zle\u015fmeleri i\u00e7in hangi format\u0131 se\u00e7meliyim?<\/strong><\/dt>\n<dd>Se\u00e7im, projenizin ihtiya\u00e7lar\u0131na ba\u011fl\u0131d\u0131r. RESTful API'ler i\u00e7in <codetag>OpenAPI<\/codetag> veya <codetag>JSON Schema<\/codetag> yayg\u0131nken, Kafka gibi olay tabanl\u0131 sistemler i\u00e7in <codetag>Apache Avro<\/codetag> veya <codetag>Protobuf<\/codetag> tercih edilir. Performans ve veri s\u0131k\u0131\u015ft\u0131rma \u00f6nemliyse Protobuf daha iyi bir se\u00e7enek olabilir, esneklik ve okunabilirlik \u00f6nemliyse JSON Schema veya Avro daha uygun olabilir.<\/dd>\n<dt><strong>S\u00f6zle\u015fmelerde bir de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131nda t\u00fcm testleri ba\u015ftan m\u0131 \u00e7al\u0131\u015ft\u0131rmal\u0131y\u0131m?<\/strong><\/dt>\n<dd>Hay\u0131r, ak\u0131ll\u0131 CI\/CD pipeline'lar\u0131, sadece etkilenen testleri \u00e7al\u0131\u015ft\u0131racak \u015fekilde yap\u0131land\u0131r\u0131labilir. Ancak, veri s\u00f6zle\u015fmesi gibi kritik bir bile\u015fende yap\u0131lan de\u011fi\u015fikliklerde, kapsaml\u0131 testlerin yap\u0131lmas\u0131, geriye d\u00f6n\u00fck uyumluluk sorunlar\u0131n\u0131 \u00f6nlemek ad\u0131na genellikle tavsiye edilir. T\u00fcketici Taraf\u0131 S\u00f6zle\u015fme Testleri (<codetag>Pact<\/codetag> gibi), sadece ilgili taraflar\u0131 test ederek bu y\u00fck\u00fc azaltabilir.<\/dd>\n<dt><strong>Veri s\u00f6zle\u015fmelerini uygulamak geli\u015ftirme s\u00fcrecini yava\u015flatmaz m\u0131?<\/strong><\/dt>\n<dd>Ba\u015flang\u0131\u00e7ta bir miktar ek efor gerektirse de, uzun vadede geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r. Hatalar\u0131n erken yakalanmas\u0131, tekrar i\u015fleme (rework) s\u00fcresini ve \u00fcretimdeki ar\u0131za s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Dolay\u0131s\u0131yla, yat\u0131r\u0131m\u0131n getirisi, ba\u015flang\u0131\u00e7taki bu ekstra \u00e7abadan \u00e7ok daha fazlad\u0131r.<\/dd>\n<dt><strong>Mevcut projemde veri s\u00f6zle\u015fmelerini nas\u0131l entegre edebilirim?<\/strong><\/dt>\n<dd>K\u00fc\u00e7\u00fck ad\u0131mlarla ba\u015flay\u0131n. En kritik veri ak\u0131\u015flar\u0131n\u0131 veya en s\u0131k sorun ya\u015fanan entegrasyonlar\u0131 belirleyin. Bu ak\u0131\u015flar i\u00e7in veri s\u00f6zle\u015fmeleri tan\u0131mlay\u0131n ve yava\u015f yava\u015f CI\/CD pipeline'\u0131n\u0131za entegre edin. T\u00fcm sistemi bir kerede de\u011fi\u015ftirmeye \u00e7al\u0131\u015fmak yerine, a\u015famal\u0131 bir ge\u00e7i\u015f stratejisi izlemek daha y\u00f6netilebilirdir.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1400],"tags":[],"class_list":{"0":"post-32089","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-devops","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>CI\/CD&#039;de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131<\/title>\n<meta name=\"description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan \u00e7ok \u00f6nce nas\u0131l garanti alt\u0131na al\u0131nabilir? Bu makale, &quot;Shift-Left&quot; felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline&#039;\u0131n\u0131za entegre ederek sorunlar\u0131 ba\u015ftan engellemenizi sa\u011flayacak ad\u0131mlar\u0131 detayland\u0131r\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CI\/CD&#039;de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131\" \/>\n<meta property=\"og:description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan \u00e7ok \u00f6nce nas\u0131l garanti alt\u0131na al\u0131nabilir? Bu makale, &quot;Shift-Left&quot; felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline&#039;\u0131n\u0131za entegre ederek sorunlar\u0131 ba\u015ftan engellemenizi sa\u011flayacak ad\u0131mlar\u0131 detayland\u0131r\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-17T13:02:13+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"CI\/CD&#8217;de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131\",\"datePublished\":\"2025-10-17T13:02:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/\"},\"wordCount\":2133,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Devops\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/\",\"name\":\"CI\/CD'de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-17T13:02:13+00:00\",\"description\":\"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan \u00e7ok \u00f6nce nas\u0131l garanti alt\u0131na al\u0131nabilir? Bu makale, \\\"Shift-Left\\\" felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre ederek sorunlar\u0131 ba\u015ftan engellemenizi sa\u011flayacak ad\u0131mlar\u0131 detayland\u0131r\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CI\/CD&#8217;de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"CI\/CD'de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131","description":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan \u00e7ok \u00f6nce nas\u0131l garanti alt\u0131na al\u0131nabilir? Bu makale, \"Shift-Left\" felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre ederek sorunlar\u0131 ba\u015ftan engellemenizi sa\u011flayacak ad\u0131mlar\u0131 detayland\u0131r\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/","og_locale":"tr_TR","og_type":"article","og_title":"CI\/CD'de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131","og_description":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan \u00e7ok \u00f6nce nas\u0131l garanti alt\u0131na al\u0131nabilir? Bu makale, \"Shift-Left\" felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre ederek sorunlar\u0131 ba\u015ftan engellemenizi sa\u011flayacak ad\u0131mlar\u0131 detayland\u0131r\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-17T13:02:13+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"CI\/CD&#8217;de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131","datePublished":"2025-10-17T13:02:13+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/"},"wordCount":2133,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Devops"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/","url":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/","name":"CI\/CD'de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-17T13:02:13+00:00","description":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde veri kalitesi ve tutarl\u0131l\u0131\u011f\u0131 hayati \u00f6neme sahiptir. Peki, bu kritik ihtiya\u00e7, hatalar ortaya \u00e7\u0131kmadan \u00e7ok \u00f6nce nas\u0131l garanti alt\u0131na al\u0131nabilir? Bu makale, \"Shift-Left\" felsefesiyle veri s\u00f6zle\u015fmelerini CI\/CD pipeline'\u0131n\u0131za entegre ederek sorunlar\u0131 ba\u015ftan engellemenizi sa\u011flayacak ad\u0131mlar\u0131 detayland\u0131r\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ci-cdde-veri-sozlesmeleri-shift-left-yaklasiminin-uygulanmasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"CI\/CD&#8217;de Veri S\u00f6zle\u015fmeleri: Shift-Left Yakla\u015f\u0131m\u0131n\u0131n Uygulanmas\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32089"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32089\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}