{"id":31486,"date":"2025-10-10T12:42:20","date_gmt":"2025-10-10T09:42:20","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31486"},"modified":"2025-10-10T12:42:20","modified_gmt":"2025-10-10T09:42:20","slug":"digitaloceanda-postgresql-veritabani-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/","title":{"rendered":"DigitalOcean&#8217;da PostgreSQL Veritaban\u0131 Olu\u015fturma"},"content":{"rendered":"<p><body><\/p>\n<p>Dijital d\u00fcnyada ki\u015fisel veya i\u015f s\u00fcre\u00e7lerimizi organize etmek i\u00e7in bir\u00e7ok araca ihtiya\u00e7 duyar\u0131z. Do\u011fum g\u00fcn\u00fc hat\u0131rlat\u0131c\u0131lar\u0131 da bunlardan biridir; sevdiklerimizin \u00f6zel g\u00fcnlerini unutmamak, ili\u015fkilerimizi g\u00fc\u00e7lendirmek i\u00e7in k\u00fc\u00e7\u00fck ama anlaml\u0131 bir detayd\u0131r. Bu rehberde, &#8220;12 Days of DigitalOcean&#8221; serimizin bir par\u00e7as\u0131 olarak, DigitalOcean&#8217;\u0131n g\u00fc\u00e7l\u00fc altyap\u0131s\u0131nda PostgreSQL veritaban\u0131 kurarak basit bir do\u011fum g\u00fcn\u00fc hat\u0131rlatma sistemi i\u00e7in temel olu\u015fturmay\u0131 \u00f6\u011freneceksiniz. DigitalOcean&#8217;\u0131n sundu\u011fu kolayl\u0131k ve PostgreSQL&#8217;in sa\u011flaml\u0131\u011f\u0131 sayesinde, bu projeyi h\u0131zl\u0131 ve g\u00fcvenilir bir \u015fekilde hayata ge\u00e7irebiliriz.<\/p>\n<p>PostgreSQL, a\u00e7\u0131k kaynakl\u0131, ili\u015fkisel bir veritaban\u0131 y\u00f6netim sistemidir (RDBMS) ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fc, g\u00fcvenilirlik ve geli\u015fmi\u015f \u00f6zellikleriyle bilinir. DigitalOcean ise bulut bili\u015fim hizmetleri sunan, geli\u015ftirici dostu bir platformdur. \u0130kisinin birle\u015fimi, projelerinizi kolayca da\u011f\u0131tmak ve y\u00f6netmek i\u00e7in ideal bir ortam sunar. \u0130ster ki\u015fisel bir proje ister daha b\u00fcy\u00fck bir uygulama i\u00e7in olsun, bu kurulum ad\u0131mlar\u0131 size sa\u011flam bir ba\u015flang\u0131\u00e7 noktas\u0131 sa\u011flayacakt\u0131r.<\/p>\n<hr>\n<h2>DigitalOcean&#8217;da PostgreSQL Veritaban\u0131 Olu\u015fturma<\/h2>\n<p>DigitalOcean, veritaban\u0131 hizmetlerini iki ana \u015fekilde sunar: Kendi Droplet&#8217;iniz (sanal sunucu) \u00fczerine PostgreSQL kurmak veya DigitalOcean&#8217;\u0131n Y\u00f6netilen Veritaban\u0131 (Managed Database) hizmetini kullanmak. \u00c7o\u011fu senaryoda, \u00f6zellikle ba\u015flang\u0131\u00e7 seviyesinde ve bak\u0131m y\u00fck\u00fcn\u00fc azaltmak istedi\u011finizde, Y\u00f6netilen Veritaban\u0131 hizmeti \u00e7ok daha avantajl\u0131d\u0131r. Otomatik yedeklemeler, \u00f6l\u00e7eklenebilirlik, g\u00fcvenlik yamalar\u0131 ve kolay y\u00f6netim gibi \u00f6zellikler sayesinde siz uygulaman\u0131za odaklanabilirsiniz.<\/p>\n<h3>Y\u00f6netilen PostgreSQL Veritaban\u0131 Ad\u0131mlar\u0131<\/h3>\n<ol>\n<li><strong>DigitalOcean Hesab\u0131na Giri\u015f Yap\u0131n:<\/strong> Taray\u0131c\u0131n\u0131zdan DigitalOcean kontrol paneline gidin ve hesab\u0131n\u0131za giri\u015f yap\u0131n. Hen\u00fcz bir hesab\u0131n\u0131z yoksa, kolayca olu\u015fturabilirsiniz.<\/li>\n<li><strong>Veritaban\u0131 Olu\u015fturma Sayfas\u0131na Gidin:<\/strong> Kontrol panelinin sol men\u00fcs\u00fcnden &#8220;Databases&#8221; se\u00e7ene\u011fine t\u0131klay\u0131n, ard\u0131ndan sa\u011f \u00fcst k\u00f6\u015fedeki &#8220;Create Database&#8221; butonuna bas\u0131n.<\/li>\n<li><strong>Veritaban\u0131 Motorunu Se\u00e7in:<\/strong> A\u00e7\u0131lan sayfada, desteklenen veritaban\u0131 motorlar\u0131 aras\u0131ndan &#8220;PostgreSQL&#8221;i se\u00e7in.<\/li>\n<li><strong>Plan ve Kaynaklar\u0131 Belirleyin:<\/strong>\n<ul>\n<li><strong>S\u00fcr\u00fcm:<\/strong> En son stabil PostgreSQL s\u00fcr\u00fcm\u00fcn\u00fc se\u00e7in.<\/li>\n<li><strong>Plan:<\/strong> Uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re bir plan se\u00e7in. &#8220;Development&#8221; planlar\u0131 k\u00fc\u00e7\u00fck projeler ve test ortamlar\u0131 i\u00e7in uygunken, &#8220;Production&#8221; planlar\u0131 daha y\u00fcksek performans ve g\u00fcvenilirlik sunar. \u00d6rne\u011fin, ba\u015flang\u0131\u00e7 i\u00e7in 1GB RAM, 1 vCPU ve 10GB SSD depolama sunan en k\u00fc\u00e7\u00fck &#8220;Development&#8221; plan\u0131 yeterli olacakt\u0131r.<\/li>\n<li><strong>Veri Merkezi B\u00f6lgesi:<\/strong> Uygulaman\u0131z\u0131n veya kullan\u0131c\u0131lar\u0131n\u0131z\u0131n co\u011frafi konumuna en yak\u0131n b\u00f6lgeyi se\u00e7in. Bu, gecikmeyi (latency) azalt\u0131r ve performans\u0131 art\u0131r\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Veritaban\u0131 Ad\u0131 ve VPC:<\/strong>\n<ul>\n<li><strong>Veritaban\u0131 Ad\u0131:<\/strong> Veritaban\u0131n\u0131za anlaml\u0131 bir isim verin, \u00f6rne\u011fin <code>birthday-reminders-db<\/code>.<\/li>\n<li><strong>VPC A\u011f\u0131 (\u0130ste\u011fe Ba\u011fl\u0131):<\/strong> E\u011fer DigitalOcean&#8217;da ba\u015fka Droplet&#8217;leriniz veya kaynaklar\u0131n\u0131z varsa, veritaban\u0131n\u0131z\u0131 bir Sanal \u00d6zel Bulut (VPC) a\u011f\u0131na ba\u011flamak ekstra g\u00fcvenlik ve performans sa\u011flar. Bu, veritaban\u0131n\u0131z\u0131n yaln\u0131zca ayn\u0131 VPC&#8217;deki kaynaklardan eri\u015filebilir olmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Olu\u015fturma \u0130\u015flemini Tamamlay\u0131n:<\/strong> T\u00fcm se\u00e7imleri yapt\u0131ktan sonra &#8220;Create Database Cluster&#8221; butonuna t\u0131klay\u0131n. DigitalOcean veritaban\u0131n\u0131z\u0131 haz\u0131rlarken birka\u00e7 dakika beklemeniz gerekebilir.<\/li>\n<\/ol>\n<p>Veritaban\u0131 olu\u015fturulduktan sonra, kontrol panelindeki veritaban\u0131 detaylar\u0131 sayfas\u0131nda ba\u011flant\u0131 bilgilerinizi (hostname, port, kullan\u0131c\u0131 ad\u0131, parola ve veritaban\u0131 ad\u0131) bulacaks\u0131n\u0131z. Bu bilgiler, uygulaman\u0131z\u0131n veritaban\u0131na ba\u011flanmas\u0131 i\u00e7in kritik \u00f6neme sahiptir. \u00d6zellikle otomatik olu\u015fturulan parolay\u0131 g\u00fcvenli bir yerde saklad\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<hr>\n<h2>Veritaban\u0131na Ba\u011flanma ve \u0130lk Yap\u0131land\u0131rma<\/h2>\n<p>Veritaban\u0131n\u0131z DigitalOcean \u00fczerinde haz\u0131rland\u0131\u011f\u0131nda, ona ba\u011flan\u0131p tablolar olu\u015fturmaya ba\u015flayabiliriz. Bu b\u00f6l\u00fcmde, <code>psql<\/code> komut sat\u0131r\u0131 arac\u0131n\u0131 kullanarak veritaban\u0131n\u0131za nas\u0131l ba\u011flanaca\u011f\u0131n\u0131z\u0131 ve temel bir do\u011fum g\u00fcn\u00fc hat\u0131rlatma tablosu olu\u015fturaca\u011f\u0131n\u0131z\u0131 g\u00f6sterece\u011fiz.<\/p>\n<h3><code>psql<\/code> ile Ba\u011flanma<\/h3>\n<p><code>psql<\/code>, PostgreSQL ile birlikte gelen g\u00fc\u00e7l\u00fc bir komut sat\u0131r\u0131 istemcisidir. Yerel bilgisayar\u0131n\u0131zdan veya DigitalOcean \u00fczerinde olu\u015fturdu\u011funuz bir Droplet&#8217;ten veritaban\u0131n\u0131za ba\u011flanabilirsiniz. E\u011fer yerel olarak <code>psql<\/code> kurulu de\u011filse, PostgreSQL&#8217;i kurarak veya sadece <code>psql<\/code> istemcisini edinerek kurabilirsiniz.<\/p>\n<p>DigitalOcean kontrol panelindeki veritaban\u0131n\u0131z\u0131n detay sayfas\u0131nda yer alan &#8220;Connection Details&#8221; (Ba\u011flant\u0131 Detaylar\u0131) b\u00f6l\u00fcm\u00fcnden a\u015fa\u011f\u0131daki bilgileri not al\u0131n:<\/p>\n<ul>\n<li><strong>Hostname:<\/strong> (\u00d6rn: <code>db-postgresql-nyc1-12345-do-user-12345-0.db.ondigitalocean.com<\/code>)<\/li>\n<li><strong>Port:<\/strong> (Genellikle <code>25060<\/code> DigitalOcean i\u00e7in)<\/li>\n<li><strong>User:<\/strong> (\u00d6rn: <code>doadmin<\/code>)<\/li>\n<li><strong>Password:<\/strong> (Olu\u015fturulmu\u015f parola)<\/li>\n<li><strong>Database:<\/strong> (Genellikle <code>defaultdb<\/code> veya sizin verdi\u011finiz ad)<\/li>\n<\/ul>\n<p>Bu bilgilerle a\u015fa\u011f\u0131daki komutu kullanarak ba\u011flanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">psql -h <hostname> -p <port> -U <user> -d <database_name><\/code><\/pre>\n<p>\u00d6rnek bir ba\u011flant\u0131 komutu:<\/p>\n<pre><code class=\"language-bash\">psql -h db-postgresql-nyc1-12345-do-user-12345-0.db.ondigitalocean.com -p 25060 -U doadmin -d defaultdb<\/code><\/pre>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, sizden parolan\u0131z\u0131 girmeniz istenecektir. Parolay\u0131 do\u011fru girdi\u011finizde, <code>defaultdb=><\/code> \u015feklinde bir istemci ekran\u0131 g\u00f6rmelisiniz. Bu, veritaban\u0131na ba\u015far\u0131yla ba\u011fland\u0131\u011f\u0131n\u0131z anlam\u0131na gelir.<\/p>\n<h3>Do\u011fum G\u00fcn\u00fc Tablosu Olu\u015fturma<\/h3>\n<p>\u015eimdi do\u011fum g\u00fcn\u00fc hat\u0131rlat\u0131c\u0131lar\u0131 i\u00e7in bir tablo olu\u015ftural\u0131m. Bu tablo, ki\u015finin ad\u0131n\u0131, do\u011fum tarihini, iste\u011fe ba\u011fl\u0131 e-posta veya telefon numaras\u0131n\u0131 ve kayd\u0131n olu\u015fturulma zaman\u0131n\u0131 i\u00e7erecektir.<\/p>\n<pre><code class=\"language-sql\">CREATE TABLE birthdays (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(255) NOT NULL,\n    birth_date DATE NOT NULL,\n    email VARCHAR(255),\n    phone_number VARCHAR(20),\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);<\/code><\/pre>\n<p>Bu SQL komutunu <code>psql<\/code> istemcisinde \u00e7al\u0131\u015ft\u0131r\u0131n. <code>CREATE TABLE<\/code> mesaj\u0131n\u0131 g\u00f6rd\u00fc\u011f\u00fcn\u00fczde tablo ba\u015far\u0131yla olu\u015fturulmu\u015f demektir.<\/p>\n<ul>\n<li><code>id SERIAL PRIMARY KEY<\/code>: Her kay\u0131tta benzersiz olacak, otomatik artan bir anahtar s\u00fctunu.<\/li>\n<li><code>name VARCHAR(255) NOT NULL<\/code>: Ki\u015finin ad\u0131, bo\u015f b\u0131rak\u0131lamaz.<\/li>\n<li><code>birth_date DATE NOT NULL<\/code>: Do\u011fum tarihi, bo\u015f b\u0131rak\u0131lamaz.<\/li>\n<li><code>email VARCHAR(255)<\/code>: Ki\u015finin e-posta adresi (iste\u011fe ba\u011fl\u0131).<\/li>\n<li><code>phone_number VARCHAR(20)<\/code>: Ki\u015finin telefon numaras\u0131 (iste\u011fe ba\u011fl\u0131).<\/li>\n<li><code>created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP<\/code>: Kayd\u0131n ne zaman olu\u015fturuldu\u011funu g\u00f6steren zaman damgas\u0131, otomatik olarak doldurulur.<\/li>\n<\/ul>\n<h3>\u00d6rnek Veri Ekleme ve Sorgulama<\/h3>\n<p>Tablomuza birka\u00e7 \u00f6rnek do\u011fum g\u00fcn\u00fc kayd\u0131 ekleyelim:<\/p>\n<pre><code class=\"language-sql\">INSERT INTO birthdays (name, birth_date, email) VALUES\n('Ay\u015fe Y\u0131lmaz', '1990-05-15', 'ayse@example.com'),\n('Mehmet Demir', '1985-11-23', 'mehmet@example.com'),\n('Zeynep Can', '1992-07-30', 'zeynep@example.com');<\/code><\/pre>\n<p>Ekledi\u011fimiz verileri sorgulayarak kontrol edebiliriz:<\/p>\n<pre><code class=\"language-sql\">SELECT * FROM birthdays;<\/code><\/pre>\n<p>Bug\u00fcn do\u011fum g\u00fcn\u00fc olanlar\u0131 bulmak i\u00e7in kullanabilece\u011finiz bir sorgu:<\/p>\n<pre><code class=\"language-sql\">SELECT name, birth_date FROM birthdays\nWHERE EXTRACT(MONTH FROM birth_date) = EXTRACT(MONTH FROM CURRENT_DATE)\n  AND EXTRACT(DAY FROM birth_date) = EXTRACT(DAY FROM CURRENT_DATE);<\/code><\/pre>\n<p>Bu sorgu, veritaban\u0131ndaki kay\u0131tlar\u0131n ay ve g\u00fcn bilgilerini bug\u00fcn\u00fcn ay ve g\u00fcn bilgileriyle kar\u015f\u0131la\u015ft\u0131r\u0131r. Bu, hat\u0131rlatma sisteminizin temelini olu\u015fturacakt\u0131r.<\/p>\n<hr>\n<h2>Uygulaman\u0131zdan PostgreSQL&#8217;e Ba\u011flanma (\u00d6rnek Python)<\/h2>\n<p>Veritaban\u0131m\u0131z haz\u0131r oldu\u011funa g\u00f6re, bir uygulama \u00fczerinden ona nas\u0131l ba\u011flanaca\u011f\u0131m\u0131z\u0131 ve veri i\u015flemleri yapaca\u011f\u0131m\u0131z\u0131 g\u00f6relim. Python, web uygulamalar\u0131 ve betikler i\u00e7in pop\u00fcler bir dil oldu\u011fu i\u00e7in, <code>psycopg2<\/code> k\u00fct\u00fcphanesini kullanarak bir \u00f6rnek sunaca\u011f\u0131z. Di\u011fer programlama dilleri i\u00e7in de benzer k\u00fct\u00fcphaneler (Node.js i\u00e7in <code>pg<\/code>, Java i\u00e7in JDBC, PHP i\u00e7in <code>pdo_pgsql<\/code> vb.) bulunmaktad\u0131r.<\/p>\n<h3>Gerekli K\u00fct\u00fcphaneyi Kurma<\/h3>\n<p>\u00d6ncelikle Python projenizde <code>psycopg2-binary<\/code> k\u00fct\u00fcphanesini kurman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">pip install psycopg2-binary<\/code><\/pre>\n<h3>Python ile Veritaban\u0131 \u0130\u015flemleri<\/h3>\n<p>A\u015fa\u011f\u0131daki Python kodu, DigitalOcean PostgreSQL veritaban\u0131n\u0131za ba\u011flan\u0131r, yeni bir do\u011fum g\u00fcn\u00fc kayd\u0131 ekler ve ard\u0131ndan t\u00fcm kay\u0131tlar\u0131 listeler. Ba\u011flant\u0131 bilgilerini g\u00fcvenli bir \u015fekilde y\u00f6netmek i\u00e7in ortam de\u011fi\u015fkenleri kullan\u0131lm\u0131\u015ft\u0131r.<\/p>\n<pre><code class=\"language-python\">import os\nimport psycopg2\nfrom datetime import date\n\n<h2>Ortam de\u011fi\u015fkenlerinden ba\u011flant\u0131 bilgilerini al<\/h2>\n<h2>Bu de\u011fi\u015fkenleri \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce ayarlaman\u0131z gerekmektedir.<\/h2>\n<h2>\u00d6rne\u011fin:<\/h2>\n<h2>export DB_HOST=\"db-postgresql-nyc1-12345-do-user-12345-0.db.ondigitalocean.com\"<\/h2>\n<h2>export DB_NAME=\"defaultdb\"<\/h2>\n<h2>export DB_USER=\"doadmin\"<\/h2>\n<h2>export DB_PASSWORD=\"your_secure_password\"<\/h2>\n<h2>export DB_PORT=\"25060\"<\/h2>\n\nDB_HOST = os.getenv(\"DB_HOST\")\nDB_NAME = os.getenv(\"DB_NAME\")\nDB_USER = os.getenv(\"DB_USER\")\nDB_PASSWORD = os.getenv(\"DB_PASSWORD\")\nDB_PORT = os.getenv(\"DB_PORT\", \"25060\") # DigitalOcean varsay\u0131lan portu\n\nconn = None\ntry:\n    # Veritaban\u0131na ba\u011flant\u0131 kur\n    conn = psycopg2.connect(\n        host=DB_HOST,\n        database=DB_NAME,\n        user=DB_USER,\n        password=DB_PASSWORD,\n        port=DB_PORT\n    )\n    cur = conn.cursor()\n\n    print(\"Veritaban\u0131na ba\u015far\u0131yla ba\u011fland\u0131!\")\n\n    # Yeni bir do\u011fum g\u00fcn\u00fc ekleme\n    new_birthday_name = \"Elif Kara\"\n    new_birthday_date = date(1995, 10, 20)\n    new_birthday_email = \"elif@example.com\"\n\n    cur.execute(\n        \"INSERT INTO birthdays (name, birth_date, email) VALUES (%s, %s, %s)\",\n        (new_birthday_name, new_birthday_date, new_birthday_email)\n    )\n    conn.commit() # De\u011fi\u015fiklikleri kaydet\n    print(f\"'{new_birthday_name}' i\u00e7in do\u011fum g\u00fcn\u00fc eklendi.\")\n\n    # T\u00fcm do\u011fum g\u00fcnlerini sorgulama ve listeleme\n    cur.execute(\"SELECT name, birth_date, email FROM birthdays ORDER BY birth_date ASC\")\n    birthdays = cur.fetchall()\n    print(\"\\nT\u00fcm Do\u011fum G\u00fcnleri:\")\n    for bd in birthdays:\n        print(f\"Ad: {bd[0]}, Tarih: {bd[1]}, E-posta: {bd[2]}\")\n\n    # Bug\u00fcn do\u011fum g\u00fcn\u00fc olanlar\u0131 sorgulama\n    today_month = date.today().month\n    today_day = date.today().day\n    cur.execute(\n        \"SELECT name, birth_date FROM birthdays WHERE EXTRACT(MONTH FROM birth_date) = %s AND EXTRACT(DAY FROM birth_date) = %s\",\n        (today_month, today_day)\n    )\n    today_birthdays = cur.fetchall()\n    if today_birthdays:\n        print(f\"\\nBug\u00fcn ({date.today().strftime('%d-%m')}) Do\u011fum G\u00fcn\u00fc Olanlar:\")\n        for bd in today_birthdays:\n            print(f\"Ad: {bd[0]}, Tarih: {bd[1]}\")\n    else:\n        print(f\"\\nBug\u00fcn ({date.today().strftime('%d-%m')}) do\u011fum g\u00fcn\u00fc olan kimse yok.\")\n\n\nexcept Exception as e:\n    print(f\"Veritaban\u0131 ba\u011flant\u0131 veya i\u015flem hatas\u0131: {e}\")\nfinally:\n    if conn:\n        cur.close()\n        conn.close()\n        print(\"\\nVeritaban\u0131 ba\u011flant\u0131s\u0131 kapat\u0131ld\u0131.\")\n<\/code><\/pre>\n<p>Bu kodu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, DigitalOcean kontrol panelinden ald\u0131\u011f\u0131n\u0131z ba\u011flant\u0131 bilgilerini ortam de\u011fi\u015fkenleri olarak ayarlaman\u0131z gerekmektedir. \u00d6rne\u011fin, Linux\/macOS terminalinde:<\/p>\n<pre><code class=\"language-bash\">export DB_HOST=\"your_db_hostname\"\nexport DB_NAME=\"defaultdb\"\nexport DB_USER=\"doadmin\"\nexport DB_PASSWORD=\"your_secure_password\"\nexport DB_PORT=\"25060\"\npython your_script_name.py<\/code><\/pre>\n<p>Windows&#8217;ta ise <code>set<\/code> komutunu kullanabilirsiniz.<\/p>\n<hr>\n<h2>G\u00fcvenlik ve Bak\u0131m \u0130pu\u00e7lar\u0131 &#038; Sonu\u00e7<\/h2>\n<p>Bir veritaban\u0131 kurmak sadece ba\u015flang\u0131\u00e7t\u0131r. G\u00fcvenli\u011fi sa\u011flamak ve d\u00fczenli bak\u0131m\u0131 yapmak, uygulaman\u0131z\u0131n uzun \u00f6m\u00fcrl\u00fc ve sorunsuz \u00e7al\u0131\u015fmas\u0131 i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<ol>\n<li><strong>G\u00fcvenlik Duvar\u0131 (Firewall):<\/strong> DigitalOcean Managed Databases, dahili bir g\u00fcvenlik duvar\u0131 ile gelir. Bu g\u00fcvenlik duvar\u0131n\u0131 kullanarak veritaban\u0131n\u0131za yaln\u0131zca belirli IP adreslerinden veya DigitalOcean VPC a\u011f\u0131n\u0131zdaki Droplet&#8217;lerden gelen ba\u011flant\u0131lara izin verin. Asla t\u00fcm IP adreslerinden (0.0.0.0\/0) eri\u015fime izin vermeyin, bu b\u00fcy\u00fck bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131d\u0131r.<\/li>\n<li><strong>G\u00fc\u00e7l\u00fc Parolalar ve Kimlik Bilgileri Y\u00f6netimi:<\/strong> Veritaban\u0131 parolalar\u0131n\u0131z\u0131n karma\u015f\u0131k ve tahmin edilemez oldu\u011fundan emin olun. Parolalar\u0131 veya di\u011fer hassas bilgileri kodunuzun i\u00e7ine yazmak yerine, yukar\u0131daki Python \u00f6rne\u011finde oldu\u011fu gibi ortam de\u011fi\u015fkenleri veya g\u00fcvenli bir s\u0131r y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc kullan\u0131n.<\/li>\n<li><strong>SSL\/TLS Kullan\u0131m\u0131:<\/strong> DigitalOcean Managed Databases varsay\u0131lan olarak SSL\/TLS \u015fifrelemesi ile gelir. Uygulaman\u0131z\u0131n veritaban\u0131na ba\u011flan\u0131rken SSL&#8217;i zorunlu k\u0131ld\u0131\u011f\u0131ndan emin olun. Bu, verilerinizin a\u011f \u00fczerinden g\u00fcvenli bir \u015fekilde iletilmesini sa\u011flar.<\/li>\n<li><strong>En Az Yetki Prensibi:<\/strong> Uygulaman\u0131z\u0131n veritaban\u0131na ba\u011flan\u0131rken kulland\u0131\u011f\u0131 kullan\u0131c\u0131n\u0131n, yaln\u0131zca ihtiya\u00e7 duydu\u011fu tablolara ve i\u015flemlere (SELECT, INSERT, UPDATE, DELETE) eri\u015fim yetkisi oldu\u011fundan emin olun. <code>doadmin<\/code> kullan\u0131c\u0131s\u0131 yerine, \u00f6zel bir uygulama kullan\u0131c\u0131s\u0131 olu\u015fturup ona k\u0131s\u0131tl\u0131 yetkiler verebilirsiniz.<\/li>\n<\/ol>\n<h3>Bak\u0131m \u0130pu\u00e7lar\u0131<\/h3>\n<ol>\n<li><strong>Yedeklemeler:<\/strong> DigitalOcean Managed Databases otomatik g\u00fcnl\u00fck yedeklemeler yapar ve bunlar\u0131 belirli bir s\u00fcre saklar. Bu, olas\u0131 veri kay\u0131plar\u0131na kar\u015f\u0131 \u00f6nemli bir g\u00fcvencedir. Kendi Droplet&#8217;inizde PostgreSQL kullan\u0131yorsan\u0131z, <code>pg_dump<\/code> gibi ara\u00e7larla d\u00fczenli yedekleme stratejileri olu\u015fturman\u0131z gerekir.<\/li>\n<li><strong>G\u00fcncellemeler:<\/strong> Y\u00f6netilen veritabanlar\u0131 i\u00e7in DigitalOcean, g\u00fcvenlik yamalar\u0131n\u0131 ve s\u00fcr\u00fcm g\u00fcncellemelerini sizin i\u00e7in y\u00f6netir. Yeni \u00f6zelliklerden ve g\u00fcvenlik iyile\u015ftirmelerinden faydalanmak i\u00e7in veritaban\u0131 s\u00fcr\u00fcm\u00fcn\u00fcz\u00fc g\u00fcncel tuttu\u011funuzdan emin olun.<\/li>\n<li><strong>\u0130zleme ve Performans:<\/strong> DigitalOcean kontrol paneli, veritaban\u0131n\u0131z\u0131n CPU kullan\u0131m\u0131, bellek t\u00fcketimi, disk I\/O ve ba\u011flant\u0131 say\u0131s\u0131 gibi temel metriklerini izlemenize olanak tan\u0131r. Bu metrikleri d\u00fczenli olarak kontrol ederek olas\u0131 performans sorunlar\u0131n\u0131 erkenden tespit edebilirsiniz.<\/li>\n<\/ol>\n<h3>Sonu\u00e7<\/h3>\n<p>&#8220;12 Days of DigitalOcean&#8221; serimizin bu b\u00f6l\u00fcm\u00fcnde, DigitalOcean \u00fczerinde g\u00fc\u00e7l\u00fc ve g\u00fcvenilir bir PostgreSQL veritaban\u0131n\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve basit bir do\u011fum g\u00fcn\u00fc hat\u0131rlatma uygulamas\u0131 i\u00e7in nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frendiniz. Y\u00f6netilen veritaban\u0131 hizmetinin sundu\u011fu kolayl\u0131klar sayesinde, altyap\u0131 y\u00f6netimiyle u\u011fra\u015fmak yerine do\u011frudan uygulaman\u0131z\u0131 geli\u015ftirmeye odaklanabilirsiniz. G\u00fcvenlik ve bak\u0131m ipu\u00e7lar\u0131n\u0131 takip ederek, projenizin hem sa\u011flam hem de uzun \u00f6m\u00fcrl\u00fc olmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<p>Bu temel kurulumla, art\u0131k do\u011fum g\u00fcn\u00fc hat\u0131rlatmalar\u0131 i\u00e7in bir web uygulamas\u0131, bir mobil uygulama veya hatta bir sunucusuz (serverless) i\u015flev (DigitalOcean Functions gibi) geli\u015ftirmeye ba\u015flayabilirsiniz. Veritaban\u0131n\u0131z haz\u0131r, \u015fimdi s\u0131ra hayal g\u00fcc\u00fcn\u00fczde!<\/p>\n<hr>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>DigitalOcean Managed Database neden tercih edilmeli?<\/h3>\n<p>DigitalOcean Managed Database, veritaban\u0131 y\u00f6netiminin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ortadan kald\u0131r\u0131r. Otomatik yedeklemeler, g\u00fcvenlik yamalar\u0131, s\u00fcr\u00fcm g\u00fcncellemeleri, kolay \u00f6l\u00e7eklendirme ve y\u00fcksek eri\u015filebilirlik gibi \u00f6zelliklerle birlikte gelir. Bu sayede siz altyap\u0131 y\u00f6netimi yerine uygulaman\u0131z\u0131 geli\u015ftirmeye odaklanabilirsiniz.<\/p>\n<h3>PostgreSQL yerine ba\u015fka bir veritaban\u0131 kullanabilir miyim?<\/h3>\n<p>Evet, DigitalOcean Managed Database hizmeti MySQL ve Redis gibi di\u011fer pop\u00fcler veritabanlar\u0131n\u0131 da destekler. Se\u00e7iminiz, uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na, veri modelinize ve ki\u015fisel tercihinize ba\u011fl\u0131d\u0131r. PostgreSQL, karma\u015f\u0131k sorgular, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve geni\u015fletilebilirlik a\u00e7\u0131s\u0131ndan olduk\u00e7a g\u00fc\u00e7l\u00fc bir se\u00e7enektir.<\/p>\n<h3>Veritaban\u0131 ba\u011flant\u0131 bilgilerimi nas\u0131l g\u00fcvende tutar\u0131m?<\/h3>\n<p>Veritaban\u0131 ba\u011flant\u0131 bilgilerini (hostname, kullan\u0131c\u0131 ad\u0131, parola) asla do\u011frudan kodunuza yazmay\u0131n. Bunun yerine, ortam de\u011fi\u015fkenleri, DigitalOcean&#8217;\u0131n &#8216;Secrets&#8217; hizmeti (e\u011fer kullan\u0131yorsan\u0131z) veya bir s\u0131r y\u00f6netimi arac\u0131 (\u00f6rne\u011fin HashiCorp Vault) kullanarak y\u00f6netin. Bu, hassas bilgilerin kazara kaynak kod depolar\u0131na s\u0131zmas\u0131n\u0131 \u00f6nler ve farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) kolayca yap\u0131land\u0131rma yapman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Uygulamam DigitalOcean&#8217;da olmak zorunda m\u0131?<\/h3>\n<p>Hay\u0131r, uygulaman\u0131z\u0131n DigitalOcean&#8217;da olmas\u0131 zorunlu de\u011fildir. Veritaban\u0131n\u0131z DigitalOcean&#8217;da bar\u0131nd\u0131r\u0131lsa bile, uygulaman\u0131z ba\u015fka bir bulut sa\u011flay\u0131c\u0131s\u0131nda, kendi sunucunuzda veya hatta yerel bilgisayar\u0131n\u0131zda \u00e7al\u0131\u015fabilir. Ancak, uygulaman\u0131z ile veritaban\u0131n\u0131z aras\u0131ndaki a\u011f gecikmesini (latency) azaltmak i\u00e7in, uygulaman\u0131z\u0131 veritaban\u0131n\u0131zla ayn\u0131 veri merkezi b\u00f6lgesinde bar\u0131nd\u0131rmak genellikle en iyi performans\u0131 sa\u011flar.<\/p>\n<h3>Veritaban\u0131 performans\u0131n\u0131 nas\u0131l izleyebilirim?<\/h3>\n<p>DigitalOcean kontrol paneli, Managed Database&#8217;leriniz i\u00e7in kapsaml\u0131 izleme metrikleri sunar. CPU kullan\u0131m\u0131, bellek t\u00fcketimi, disk I\/O, ba\u011flant\u0131 say\u0131s\u0131 ve sorgu gecikmesi gibi \u00f6nemli g\u00f6stergeleri buradan takip edebilirsiniz. Bu metrikler, potansiyel performans darbo\u011fazlar\u0131n\u0131 veya kaynak eksikliklerini belirlemenize yard\u0131mc\u0131 olur. Ayr\u0131ca, daha detayl\u0131 izleme i\u00e7in \u00fc\u00e7\u00fcnc\u00fc taraf izleme ara\u00e7lar\u0131n\u0131 da entegre edebilirsiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Dijital d\u00fcnyada ki\u015fisel veya i\u015f s\u00fcre\u00e7lerimizi organize etmek i\u00e7in bir\u00e7ok araca ihtiya\u00e7 duyar\u0131z. Do\u011fum g\u00fcn\u00fc hat\u0131rlat\u0131c\u0131lar\u0131 da bunlarda","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":[644],"tags":[],"class_list":{"0":"post-31486","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-postgresql","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>DigitalOcean&#039;da PostgreSQL Veritaban\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/digitaloceanda-postgresql-veritabani-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DigitalOcean&#039;da PostgreSQL Veritaban\u0131 Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"Dijital d\u00fcnyada ki\u015fisel veya i\u015f s\u00fcre\u00e7lerimizi organize etmek i\u00e7in bir\u00e7ok araca ihtiya\u00e7 duyar\u0131z. Do\u011fum g\u00fcn\u00fc hat\u0131rlat\u0131c\u0131lar\u0131 da bunlarda\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-10T09:42:20+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=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DigitalOcean&#8217;da PostgreSQL Veritaban\u0131 Olu\u015fturma\",\"datePublished\":\"2025-10-10T09:42:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/\"},\"wordCount\":2069,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/\",\"name\":\"DigitalOcean'da PostgreSQL Veritaban\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-10T09:42:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DigitalOcean&#8217;da PostgreSQL Veritaban\u0131 Olu\u015fturma\"}]},{\"@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":"DigitalOcean'da PostgreSQL Veritaban\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/digitaloceanda-postgresql-veritabani-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"DigitalOcean'da PostgreSQL Veritaban\u0131 Olu\u015fturma","og_description":"Dijital d\u00fcnyada ki\u015fisel veya i\u015f s\u00fcre\u00e7lerimizi organize etmek i\u00e7in bir\u00e7ok araca ihtiya\u00e7 duyar\u0131z. Do\u011fum g\u00fcn\u00fc hat\u0131rlat\u0131c\u0131lar\u0131 da bunlarda","og_url":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-10T09:42:20+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DigitalOcean&#8217;da PostgreSQL Veritaban\u0131 Olu\u015fturma","datePublished":"2025-10-10T09:42:20+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/"},"wordCount":2069,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["PostgreSQL"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/","name":"DigitalOcean'da PostgreSQL Veritaban\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-10T09:42:20+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/digitaloceanda-postgresql-veritabani-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DigitalOcean&#8217;da PostgreSQL Veritaban\u0131 Olu\u015fturma"}]},{"@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\/31486","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=31486"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31486\/revisions"}],"predecessor-version":[{"id":31487,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31486\/revisions\/31487"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}