{"id":519,"date":"2026-05-17T07:04:42","date_gmt":"2026-05-16T23:04:42","guid":{"rendered":"https:\/\/junai.ai\/blog\/pg-backup-20\/"},"modified":"2026-05-17T07:04:42","modified_gmt":"2026-05-16T23:04:42","slug":"pg-backup-20","status":"publish","type":"post","link":"https:\/\/junai.ai\/blog\/pg-backup-20\/","title":{"rendered":"\ubc31\uc5c5\uacfc \ubcf5\uad6c \u2014 pg_dump\u00b7PITR (\uace0\uae09 20\ud3b8)"},"content":{"rendered":"\n<!-- WordPress REST API \ubc1c\ud589\uc6a9 HTML (\uc790\ub3d9 \uc0dd\uc131) -->\n<!-- WP-FEATURED-MEDIA-ID: 321 -->\n<div style=\"max-width:800px;margin:0 auto;\">\n<style>\n:root{--color-primary:#336791;--color-accent:#60a5fa;--color-bg:#fafafa;--color-bg-card:#ffffff;--color-text:#1e293b;--color-text-muted:#64748b;--hero-start:#0f172a;--hero-end:#336791;--font-body:-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo','Noto Sans KR',sans-serif;--size-body:17px;--line-height:1.75;}\n*{box-sizing:border-box;}\n.container{max-width:760px;margin:0 auto;padding:0 22px 80px;}\n.hero{background:linear-gradient(135deg,var(--hero-start) 0%,var(--hero-end) 100%);color:#fff;padding:72px 22px 56px;text-align:center;}\n.hero .badge{display:inline-block;background:rgba(96,165,250,0.18);color:var(--color-accent);padding:6px 14px;border-radius:999px;font-size:13px;font-weight:600;letter-spacing:0.5px;margin-bottom:18px;}\n.hero h1{margin:0 0 18px;font-size:36px;line-height:1.3;letter-spacing:-0.3px;}\n.hero p.sub{margin:0 auto;max-width:580px;font-size:17px;color:#bfdbfe;}\n.hero img{width:100%;max-width:720px;height:auto;margin:36px auto 0;display:block;border-radius:10px;box-shadow:0 8px 32px rgba(0,0,0,0.3);}\n.meta{display:flex;gap:14px;justify-content:center;margin-top:20px;font-size:13px;color:#93c5fd;flex-wrap:wrap;}\n.meta span::before{content:\"\u00b7\";margin-right:14px;color:#1e3a8a;}\n.meta span:first-child::before{content:\"\";margin:0;}\narticle{background:var(--color-bg-card);margin-top:-36px;padding:44px 28px;border-radius:14px;box-shadow:0 2px 18px rgba(0,0,0,0.06);}\narticle p{margin:0 0 18px;}\nh2{font-size:28px;line-height:1.35;letter-spacing:-0.3px;margin:48px 0 18px;padding-bottom:10px;border-bottom:2px solid var(--color-primary);}\nh2:first-of-type{margin-top:8px;}\nh3{font-size:21px;line-height:1.4;margin:30px 0 12px;color:var(--color-primary);}\ncode{background:#f1f5f9;color:#0f172a;padding:2px 6px;border-radius:4px;font-family:'SFMono-Regular',Menlo,Consolas,monospace;font-size:0.92em;}\npre{background:#0f172a;color:#e2e8f0;padding:18px 20px;border-radius:10px;overflow-x:auto;font-size:14.5px;line-height:1.65;margin:18px 0;}\npre code{background:transparent;color:inherit;padding:0;}\nul,ol{margin:0 0 18px;padding-left:24px;}\nli{margin-bottom:8px;}\nstrong{color:#0f172a;}\n.databox{background:#eff6ff;border-left:4px solid var(--color-primary);padding:18px 20px;border-radius:6px;margin:22px 0;}\n.databox p{margin:0 0 8px;}\n.databox p:last-child{margin:0;}\n.databox strong{color:var(--color-primary);}\n.warnbox{background:linear-gradient(135deg,#fef3c7 0%,#fde68a 100%);border-left:4px solid #d97706;padding:18px 20px;border-radius:6px;margin:22px 0;}\n.warnbox strong{color:#92400e;}\n.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:22px 0;}\ntable{width:100%;border-collapse:collapse;font-size:15px;background:var(--color-bg-card);}\nth,td{padding:11px 12px;text-align:left;border-bottom:1px solid #e2e8f0;vertical-align:top;}\nth{background:#f1f5f9;font-weight:700;color:#0f172a;}\ntd:first-child,th:first-child{font-weight:700;}\n.cta{background:linear-gradient(135deg,#336791 0%,#60a5fa 100%);color:#fff;padding:30px 24px;border-radius:12px;margin-top:44px;text-align:center;}\n.cta h3{color:#fff;margin:0 0 10px;}\n.cta p{margin:0;color:#dbeafe;}\n.series-nav{background:#eff6ff;padding:18px 22px;border-radius:10px;margin-top:24px;font-size:14.5px;color:var(--color-text-muted);}\n.series-nav strong{color:var(--color-primary);}\n@media (max-width:480px){.hero{padding:52px 18px 44px;}.hero h1{font-size:26px;}.hero p.sub{font-size:15px;}article{padding:28px 18px;border-radius:10px;}h2{font-size:22px;}h3{font-size:18px;}body{font-size:16px;}pre{font-size:13px;padding:14px 16px;}}\n@media (max-width:560px){.tablewrap table,.tablewrap thead,.tablewrap tbody,.tablewrap tr,.tablewrap th,.tablewrap td{display:block;width:auto;}.tablewrap thead{display:none;}.tablewrap tr{margin:0 0 14px;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden;}.tablewrap td{border:none;border-bottom:1px solid #f1f5f9;padding:9px 14px;}.tablewrap td:first-child{background:#eff6ff;font-weight:800;font-size:15.5px;}.tablewrap td:last-child{border-bottom:none;}.tablewrap td[data-label]::before{content:attr(data-label) \" \u2014 \";font-weight:700;color:var(--color-primary);}}\n<\/style>\n<header class=\"hero\">\n  <span class=\"badge\">PostgreSQL \uad50\uc7ac \u00b7 20\ud3b8 \/ 24\ud3b8<\/span>\n  <h1>\ubc31\uc5c5\uacfc \ubcf5\uad6c \u2014 pg_dump\u00b7pg_basebackup\u00b7PITR<\/h1>\n  <p class=\"sub\">\ub370\uc774\ud130\ub97c \uc783\uc9c0 \uc54a\ub294 \ud45c\uc900. 3\uac00\uc9c0 \ubc31\uc5c5 \ubc29\uc2dd\uacfc \uc2dc\uc810 \ubcf5\uad6c.<\/p>\n  <div class=\"meta\"><span>\uace0\uae09<\/span><span>\uc77d\ub294 \uc2dc\uac04 8\ubd84<\/span><span>2026-05-17<\/span><\/div>\n  <img decoding=\"async\" src=\"https:\/\/junai.ai\/blog\/wp-content\/uploads\/2026\/05\/hero-93.jpg\" alt=\"\ubca0\uc774\uc2a4 \ubc31\uc5c5\uacfc WAL \uc544\uce74\uc774\ube0c\ub97c \ud569\uccd0 \uc784\uc758 \uc2dc\uc810\uc73c\ub85c \ubcf5\uad6c\ud558\ub294 PITR \ub3c4\uc2dd\">\n<\/header>\n\n<div class=\"container\">\n<article>\n\n<p>\uace0\uae09 \ud30c\ud2b8\uc758 \uc2dc\uc791. &#8220;\ubc31\uc5c5 \uc548 \ud55c \uc0ac\ub78c\uacfc \ubc31\uc5c5 \uc548 \ud588\ub294\ub370 \ud588\ub2e4\uace0 \ubbff\uc5c8\ub358 \uc0ac\ub78c&#8221; \u2014 DB \uc6b4\uc601\uc758 \uaca9\uc5b8. 20\ud3b8\uc740 PostgreSQL \uc758 3\uac00\uc9c0 \ubc31\uc5c5 \ubc29\uc2dd\uacfc \uadf8 \uc0ac\ucd0c PITR(\uc2dc\uc810 \ubcf5\uad6c) \uae4c\uc9c0 \uc815\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n\n<h2>\ubc31\uc5c5 3\uac00\uc9c0 \u2014 \ud55c \ud45c<\/h2>\n\n<div class=\"tablewrap\">\n<table>\n  <thead>\n    <tr><th>\ubc29\uc2dd<\/th><th>\ub300\uc0c1<\/th><th>\ud06c\uae30<\/th><th>\ubcf5\uad6c \ub2e8\uc704<\/th><\/tr>\n  <\/thead>\n  <tbody>\n    <tr><td data-label=\"\">pg_dump<\/td><td data-label=\"\">\ud55c DB (\ub17c\ub9ac\uc801)<\/td><td data-label=\"\">\uc791\uc74c<\/td><td data-label=\"\">DB \ub2e8\uc704\u00b7\ud14c\uc774\ube14 \ub2e8\uc704<\/td><\/tr>\n    <tr><td data-label=\"\">pg_dumpall<\/td><td data-label=\"\">\ud074\ub7ec\uc2a4\ud130 \uc804\uccb4 + \uc5ed\ud560<\/td><td data-label=\"\">\uc791\uc74c<\/td><td data-label=\"\">\ud074\ub7ec\uc2a4\ud130 \uc804\uccb4<\/td><\/tr>\n    <tr><td data-label=\"\">pg_basebackup<\/td><td data-label=\"\">\ud074\ub7ec\uc2a4\ud130 \ud30c\uc77c \uadf8\ub300\ub85c (\ubb3c\ub9ac\uc801)<\/td><td data-label=\"\">\ud07c<\/td><td data-label=\"\">\ud074\ub7ec\uc2a4\ud130 \uc804\uccb4 (+PITR \uac00\ub2a5)<\/td><\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n\n<h2>pg_dump \u2014 \uc77c\uc0c1\uc758 \ubc31\uc5c5<\/h2>\n\n<pre><code># SQL \ud14d\uc2a4\ud2b8 (\uac00\uc7a5 \ub2e8\uc21c, \ud070 DB \ub294 \ube44\ud6a8\uc728)\npg_dump -U postgres mydb &gt; mydb.sql\n\n# \ucee4\uc2a4\ud140 (\uc555\ucd95\u00b7\ubcd1\ub82c \ubcf5\uc6d0 \uac00\ub2a5 \u2014 \uad8c\uc7a5)\npg_dump -U postgres -Fc -f mydb.dump mydb\n\n# \ub514\ub809\ud130\ub9ac + \ubcd1\ub82c\npg_dump -U postgres -Fd -j 4 -f mydb_dir mydb\n#                        ^ 4\uac1c \ubcd1\ub82c (\ud070 DB)\n\n# \ud2b9\uc815 \ud14c\uc774\ube14\ub9cc\npg_dump -U postgres -t orders -t users mydb &gt; partial.sql\n\n# \uc2a4\ud0a4\ub9c8\ub9cc (\ub370\uc774\ud130 X)\npg_dump -U postgres --schema-only mydb &gt; schema.sql\n\n# \ub370\uc774\ud130\ub9cc (\ud14c\uc774\ube14 \uc815\uc758 X)\npg_dump -U postgres --data-only mydb &gt; data.sql<\/code><\/pre>\n\n<h2>pg_restore \u2014 \ubcf5\uc6d0<\/h2>\n\n<pre><code># \ucee4\uc2a4\ud140 \ud615\uc2dd\npg_restore -U postgres -d mydb mydb.dump\n\n# \ubcd1\ub82c \ubcf5\uc6d0 (\ud070 DB)\npg_restore -U postgres -d mydb -j 4 mydb.dump\n\n# \uae68\ub057\ud55c DB \uc5d0 \ubcf5\uc6d0 (\uae30\uc874 \uac1d\uccb4 DROP \ud6c4)\npg_restore -U postgres -d mydb --clean --if-exists mydb.dump\n\n# \ud2b9\uc815 \ud14c\uc774\ube14\ub9cc\npg_restore -U postgres -d mydb -t orders mydb.dump\n\n# SQL \ud14d\uc2a4\ud2b8\ub294 psql \ub85c\npsql -U postgres mydb &lt; mydb.sql<\/code><\/pre>\n\n<div class=\"databox\">\n  <p><strong>\uc65c <code>-Fc<\/code>(\ucee4\uc2a4\ud140) \uad8c\uc7a5.<\/strong> \u2460 \uc790\ub3d9 \uc555\ucd95. \u2461 pg_restore \ub85c <strong>\ubcd1\ub82c \ubcf5\uc6d0<\/strong> \uac00\ub2a5 (\ud070 DB \uc5d0\uc11c \ub9e4\uc6b0 \ud07c). \u2462 \uc77c\ubd80 \uac1d\uccb4\ub9cc \uc120\ud0dd \ubcf5\uc6d0 \uac00\ub2a5. SQL \ud14d\uc2a4\ud2b8\ub294 \uc791\uc740 DB\u00b7\ub514\ubc84\uae45\uc6a9\uc73c\ub85c\ub9cc.<\/p>\n<\/div>\n\n<h2>cron \uc73c\ub85c \uc77c\uc77c \ubc31\uc5c5 \u2014 \uc2e4\uc804 \uc2a4\ud06c\ub9bd\ud2b8<\/h2>\n\n<pre><code>#!\/bin\/bash\n# \/usr\/local\/bin\/pg_backup.sh\nset -euo pipefail\n\nBACKUP_DIR=\/var\/backups\/pg\nDATE=$(date +%Y%m%d-%H%M%S)\nRETENTION_DAYS=14\n\nmkdir -p \"$BACKUP_DIR\"\n\n# \ubc31\uc5c5\npg_dump -U postgres -Fc -f \"$BACKUP_DIR\/mydb_$DATE.dump\" mydb\n\n# \uc624\ub798\ub41c \uac83 \uc81c\uac70\nfind \"$BACKUP_DIR\" -name \"mydb_*.dump\" -mtime +$RETENTION_DAYS -delete\n\n# \uc6d0\uaca9 \uc800\uc7a5 (S3 \ub4f1)\naws s3 cp \"$BACKUP_DIR\/mydb_$DATE.dump\" \"s3:\/\/my-backup\/pg\/\"\n\necho \"Backup completed: $DATE\"<\/code><\/pre>\n\n<pre><code># cron \ub4f1\ub85d\n0 3 * * * \/usr\/local\/bin\/pg_backup.sh &gt;&gt; \/var\/log\/pg_backup.log 2&gt;&amp;1\n# \ub9e4\uc77c 03:00 \uc2e4\ud589<\/code><\/pre>\n\n<div class=\"warnbox\">\n  <p><strong>\ubc31\uc5c5\uc758 \uccab \ubc88\uc9f8 \uaddc\uce59 \u2014 \ubcf5\uc6d0 \uc5f0\uc2b5.<\/strong> &#8220;\ubc31\uc5c5\uc774 \uc788\ub2e4&#8221; \uc640 &#8220;\ubc31\uc5c5\uc73c\ub85c \ubcf5\uc6d0 \uc131\uacf5&#8221; \uc740 \uc644\uc804 \ub2e4\ub984. \uc815\uae30\uc801\uc73c\ub85c(\ubd84\uae30 1\ud68c) \ubc31\uc5c5\uc744 \uc0c8 DB \uc5d0 \ubcf5\uc6d0\ud574 \ubcf4\uace0 \ud655\uc778. \uc548 \ud574\ubcf8 \ubc31\uc5c5\uc740 \uc5c6\ub294 \uac83\uacfc \uac19\uc74c.<\/p>\n<\/div>\n\n<h2>pg_basebackup \u2014 \ubb3c\ub9ac\uc801 \ubc31\uc5c5 (PITR \uae30\ubc18)<\/h2>\n\n<pre><code># \ud074\ub7ec\uc2a4\ud130 \ud30c\uc77c \ud1b5\uc9f8 \ubcf5\uc0ac\npg_basebackup -U replicator -D \/var\/backups\/base -Fp -Xs -P\n\n# -D : \uc800\uc7a5 \uacbd\ub85c\n# -Fp : plain (\ud30c\uc77c\ub4e4) \u2014 tar \ub3c4 \uac00\ub2a5 (-Ft)\n# -Xs : streaming \u2014 WAL \uac19\uc774 \ubc1b\uc74c (\uc2dc\uc810 \ubcf5\uad6c \uac00\ub2a5)\n# -P : \uc9c4\ud589 \ud45c\uc2dc\n\n# \uc0ac\uc804 \u2014 replication slot + \uc5ed\ud560\nCREATE USER replicator REPLICATION LOGIN PASSWORD '...';\n# pg_hba.conf \uc5d0 replication \uc811\uc18d \ud5c8\uc6a9<\/code><\/pre>\n\n<h2>WAL \uc544\uce74\uc774\ube0c + PITR \u2014 \uc784\uc758 \uc2dc\uc810 \ubcf5\uad6c<\/h2>\n\n<p><strong>PITR(Point-In-Time Recovery)<\/strong> = &#8220;\uc5b4\uc81c 17:43 \uc9c1\uc804 \uc0c1\ud0dc\ub85c \ub3cc\ub824\ub2ec\ub77c&#8221; \uac00 \uac00\ub2a5\ud55c \ubcf5\uad6c. \ubca0\uc774\uc2a4 \ubc31\uc5c5 + \uadf8 \uc774\ud6c4 WAL(Write-Ahead Log) \uc744 \ucc28\uace1\ucc28\uace1 \ubaa8\uc544\ub46c\uc57c \ud568.<\/p>\n\n<pre><code># postgresql.conf\nwal_level = replica\narchive_mode = on\narchive_command = 'cp %p \/var\/lib\/postgresql\/wal_archive\/%f'\n# \ub610\ub294 \ubcf4\ud1b5 S3\u00b7rsync \ub85c \uc678\ubd80\uc5d0\n\n# 1) \uc77c\uc815 \uc8fc\uae30\ub85c \ubca0\uc774\uc2a4 \ubc31\uc5c5\npg_basebackup -D \/backup\/base-2026-05-17 -Fp -Xs -P\n\n# 2) WAL \uc740 archive_command \uac00 \uacc4\uc18d \ubaa8\uc74c\n# \/var\/lib\/postgresql\/wal_archive\/ \uc5d0 \uc313\uc784\n\n# 3) \ubcf5\uad6c \uc2dc\uc810\uc5d0 \u2014 \uc0c8 PG \uc778\uc2a4\ud134\uc2a4 \uc2dc\uc791\n# postgresql.conf\nrestore_command = 'cp \/var\/lib\/postgresql\/wal_archive\/%f %p'\nrecovery_target_time = '2026-05-17 17:43:00'\n\n# \ub610\ub294\nrecovery_target_lsn = '0\/3A0001E0'   # \ud2b9\uc815 LSN \uc73c\ub85c\nrecovery_target_xid = '12345'         # \ud2b9\uc815 \ud2b8\ub79c\uc7ad\uc158 \uc9c1\uc804<\/code><\/pre>\n\n<div class=\"databox\">\n  <p><strong>PITR \uc758 \uc9c4\uac00.<\/strong> &#8220;\uc0ac\ub78c\uc774 \uc2e4\uc218\ub85c DROP TABLE \ud55c \uc9c1\uc804&#8221; \uc73c\ub85c \ub3cc\ub9b4 \uc218 \uc788\uc74c. \ubca0\uc774\uc2a4 \ubc31\uc5c5 + WAL \ub9cc \uc798 \ubaa8\uc544\ub450\uba74 \ub9c8\ubc95 \uac19\uc740 \ub2a5\ub825. \ud074\ub77c\uc6b0\ub4dc(RDS\u00b7Aurora) \ub294 \uc774\uac78 \uc790\ub3d9\uc73c\ub85c \uc81c\uacf5.<\/p>\n<\/div>\n\n<h2>\ud604\ub300\uc801 \ub3c4\uad6c \u2014 pgBackRest \u00b7 WAL-G \u00b7 Barman<\/h2>\n\n<pre><code># pg_dump\u00b7pg_basebackup \uc9c1\uc811 \uc6b4\uc601\uc740 \uc190\uc774 \ub9ce\uc774 \uac10\n# \uc2e4\uc804\uc5d0\uc11c\ub294 \ubc31\uc5c5 \ub9e4\ub2c8\uc800 \ub3c4\uad6c \uc0ac\uc6a9\n\n# pgBackRest (\uac00\uc7a5 \ucd94\ucc9c)\npgbackrest --stanza=mydb backup --type=full\npgbackrest --stanza=mydb backup --type=incr   # \uc99d\ubd84\npgbackrest --stanza=mydb restore --target-time=\"2026-05-17 17:43:00\"\n\n# WAL-G \u2014 Yandex \ubc1c, S3\u00b7GCS \ud638\ud658\nwal-g backup-push \/var\/lib\/postgresql\/data\n\n# Barman \u2014 \uc774\ud0c8\ub9ac\uc544 \ubc1c, \uba40\ud2f0 \uc11c\ubc84<\/code><\/pre>\n\n<h2>\ubc31\uc5c5 \uc804\ub7b5 \u2014 \ud55c \ud45c<\/h2>\n\n<div class=\"tablewrap\">\n<table>\n  <thead>\n    <tr><th>\uaddc\ubaa8<\/th><th>\uc804\ub7b5<\/th><\/tr>\n  <\/thead>\n  <tbody>\n    <tr><td data-label=\"\">\uac1c\uc778 \ud1a0\uc774<\/td><td data-label=\"\">\uc77c\uc77c pg_dump + S3 \uc5c5\ub85c\ub4dc + 14\uc77c retention<\/td><\/tr>\n    <tr><td data-label=\"\">\uc2a4\ud0c0\ud2b8\uc5c5 (\uc218 GB)<\/td><td data-label=\"\">\uc77c\uc77c pg_dump (\ub17c\ub9ac) + \uc8fc 1 pg_basebackup (\ubb3c\ub9ac)<\/td><\/tr>\n    <tr><td data-label=\"\">\uc11c\ube44\uc2a4 (\uc218\uc2ed GB+)<\/td><td data-label=\"\">pgBackRest \ub610\ub294 WAL-G + \uc99d\ubd84 + \ub9e4\uc77c + PITR \uac00\ub2a5<\/td><\/tr>\n    <tr><td data-label=\"\">\ub300\uaddc\ubaa8 (TB+)<\/td><td data-label=\"\">\uad00\ub9ac\ud615(RDS\/Aurora) + \ubcc4\ub3c4 \ubc31\uc5c5 \uc194\ub8e8\uc158 + \uc815\uae30 DR \ud6c8\ub828<\/td><\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n\n<h2>3-2-1 \ubc31\uc5c5 \uaddc\uce59<\/h2>\n\n<div class=\"databox\">\n  <p><strong>\uc6b4\uc601 \ud45c\uc900.<\/strong><\/p>\n  <p>\u00b7 <strong>3<\/strong> \uac1c\uc758 \uc0ac\ubcf8 (\uc6d0\ubcf8 + \ubc31\uc5c5 2\uac1c)<\/p>\n  <p>\u00b7 <strong>2<\/strong> \uac00\uc9c0 \ub9e4\uccb4 (\ub514\uc2a4\ud06c + \ud074\ub77c\uc6b0\ub4dc \ub4f1)<\/p>\n  <p>\u00b7 <strong>1<\/strong> \uac1c\ub294 \ub2e4\ub978 \uc704\uce58 (\uc624\ud504\uc0ac\uc774\ud2b8 \u2014 \ud654\uc7ac\u00b7\uc7ac\ud574 \ub300\ube44)<\/p>\n  <p>\ud55c \uacf3\uc5d0\ub9cc \ub450\uba74 \uadf8 \ud55c \uacf3\uc774 \ub9dd\uac00\uc9c0\uba74 \ub05d.<\/p>\n<\/div>\n\n<h2>\uc548\ud2f0\ud328\ud134 5\uac00\uc9c0<\/h2>\n\n<div class=\"warnbox\">\n  <p><strong>1. \ubc31\uc5c5 \ud55c \uc801 \uc5c6\uc74c.<\/strong> \uac00\uc7a5 \ud754\ud55c \uc0ac\uace0. \uccab \uc0ac\uc6a9\uc790 \ub4e4\uc5b4\uc624\uae30 \uc804\uc5d0 \ubc31\uc5c5\ubd80\ud130.<\/p>\n  <p><strong>2. \ubcf5\uc6d0 \uc548 \ud574\ubd04.<\/strong> \ubc31\uc5c5 \ud30c\uc77c\uc774 \uae68\uc84c\ub294\ub370 \ubaa8\ub974\uace0 \uc788\ub2e4\uac00 \uc0ac\uace0 \uc2dc \ubc1c\uacac.<\/p>\n  <p><strong>3. \uac19\uc740 \uc11c\ubc84\uc5d0\ub9cc.<\/strong> \ub514\uc2a4\ud06c \uc8fd\uc73c\uba74 \ubc31\uc5c5\ub3c4 \uac19\uc774 \uc8fd\uc74c.<\/p>\n  <p><strong>4. retention \ub108\ubb34 \uc9e7\uc74c.<\/strong> \uc0ac\ub78c\uc774 \uc2e4\uc218\ub97c \uba70\uce60 \ub4a4 \ubc1c\uacac\ud558\ub294\ub370 \uc5b4\uc81c \uac83\ubc16\uc5d0 \uc5c6\uc74c. 14~30\uc77c \uad8c\uc7a5.<\/p>\n  <p><strong>5. \uc554\ud638\ud654 \uc5c6\uc74c.<\/strong> \ubc31\uc5c5 \ud30c\uc77c = \ud3c9\ubb38 DB. S3 SSE \ub610\ub294 GPG \ud544\uc218.<\/p>\n<\/div>\n\n<div class=\"cta\">\n  <h3>21\ud3b8 \u2014 \uc2a4\ud2b8\ub9ac\ubc0d \ubcf5\uc81c (Primary\/Standby)<\/h3>\n  <p>\uc2e4\uc2dc\uac04 \ubcf5\uc81c, \ud56b \uc2a4\ud0e0\ubc14\uc774, failover.<\/p>\n<\/div>\n\n<div class=\"series-nav\">\n  <strong>\ud83d\udcda PostgreSQL \ubc30\uc6b0\uae30 \uad50\uc7ac<\/strong><br>\n  \uc774\uc804: 19\ud3b8 \ud2b8\ub9ac\uac70 \u00b7 \ud604\uc7ac: <strong>20\ud3b8 (\uace0\uae09 \uc2dc\uc791)<\/strong> \u00b7 \ub2e4\uc74c \u2192 21\ud3b8 \ubcf5\uc81c \u00b7 \uc9c4\ud589: <strong>20\/24<\/strong>\n<\/div>\n\n<\/article>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>pg_dump\u00b7pg_restore\u00b7pg_basebackup\u00b7PITR. 24\ud3b8 \uad50\uc7ac 20\ud3b8.<\/p>\n","protected":false},"author":1,"featured_media":321,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-519","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-postgresql"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts\/519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/comments?post=519"}],"version-history":[{"count":0,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts\/519\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media\/321"}],"wp:attachment":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media?parent=519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/categories?post=519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/tags?post=519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}