{"id":520,"date":"2026-05-17T07:04:48","date_gmt":"2026-05-16T23:04:48","guid":{"rendered":"https:\/\/junai.ai\/blog\/pg-replication-21\/"},"modified":"2026-05-17T07:04:48","modified_gmt":"2026-05-16T23:04:48","slug":"pg-replication-21","status":"publish","type":"post","link":"https:\/\/junai.ai\/blog\/pg-replication-21\/","title":{"rendered":"\uc2a4\ud2b8\ub9ac\ubc0d \ubcf5\uc81c \u2014 Primary\/Standby \uad6c\ucd95 (\uace0\uae09 21\ud3b8)"},"content":{"rendered":"\n<!-- WordPress REST API \ubc1c\ud589\uc6a9 HTML (\uc790\ub3d9 \uc0dd\uc131) -->\n<!-- WP-FEATURED-MEDIA-ID: 328 -->\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 21\ud3b8 \/ 24\ud3b8<\/span>\n  <h1>\uc2a4\ud2b8\ub9ac\ubc0d \ubcf5\uc81c \u2014 Primary\/Standby \uad6c\ucd95<\/h1>\n  <p class=\"sub\">\uc2e4\uc2dc\uac04 \ubcf5\uc81c\uc640 \ud56b \uc2a4\ud0e0\ubc14\uc774. \uc7a5\uc560 \ubcf5\uad6c\uc758 \ud45c\uc900 \uc544\ud0a4\ud14d\ucc98.<\/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-96.jpg\" alt=\"Primary \uac00 WAL \uc744 Standby \ub85c \uc2a4\ud2b8\ub9ac\ubc0d\ud558\ub294 \ubcf5\uc81c \uc544\ud0a4\ud14d\ucc98 \ub3c4\uc2dd\">\n<\/header>\n\n<div class=\"container\">\n<article>\n\n<p>\ud55c \ub300\ub9cc \uad74\ub9ac\uba74 \uc8fd\uc744 \ub54c \ub05d\ub0a9\ub2c8\ub2e4. \uc6b4\uc601 DB \ub294 \uac70\uc758 \ud56d\uc0c1 <strong>2\ub300 \uc774\uc0c1 \u2014 Primary + Standby<\/strong>. Primary \uac00 \ubc1b\uc740 \uc4f0\uae30\ub97c WAL \ub85c Standby \uc5d0 \uc2e4\uc2dc\uac04 \uc804\uc1a1, Primary \uac00 \uc8fd\uc73c\uba74 Standby \uac00 Primary \uac00 \ub429\ub2c8\ub2e4. 21\ud3b8\uc740 \uadf8 \ud45c\uc900 \uc544\ud0a4\ud14d\ucc98\ub97c \ucc98\uc74c\ubd80\ud130 \ub05d\uae4c\uc9c0.<\/p>\n\n<h2>\uc65c \ubcf5\uc81c? \u2014 3\uac00\uc9c0 \uc774\uc720<\/h2>\n\n<ul>\n  <li><strong>\uace0\uac00\uc6a9\uc131(HA)<\/strong> \u2014 Primary \uc8fd\uc5b4\ub3c4 Standby \uac00 \uc989\uc2dc \ub300\uccb4.<\/li>\n  <li><strong>\uc77d\uae30 \ubd84\uc0b0<\/strong> \u2014 Standby \uc5d0 SELECT \ubcf4\ub0b4 \ubd80\ud558 \ubd84\uc0b0 (hot standby).<\/li>\n  <li><strong>\uc9c0\ub9ac\uc801 \ubd84\uc0b0<\/strong> \u2014 \ub2e4\ub978 \ub9ac\uc804\uc5d0 Standby \ub450\uc5b4 \uc7ac\ud574 \ub300\ube44.<\/li>\n<\/ul>\n\n<h2>WAL \uae30\ubc18 \ubcf5\uc81c \u2014 \ud55c \uc904 \uc6d0\ub9ac<\/h2>\n\n<div class=\"databox\">\n  <p><strong>WAL(Write-Ahead Log).<\/strong> Postgres \ub294 \ubaa8\ub4e0 \ubcc0\uacbd\uc744 \ub514\uc2a4\ud06c \ub370\uc774\ud130 \ud30c\uc77c\uc5d0 \uc4f0\uae30 \uc804\uc5d0 WAL \uc5d0 \uba3c\uc800 \uae30\ub85d (durability \ubcf4\uc7a5). \ubcf5\uc81c\ub294 \uadf8 WAL \uc744 Standby \uc5d0 \uadf8\ub300\ub85c \uc804\ub2ec\ud574 \uac19\uc740 \ubcc0\uacbd\uc744 \ub2e4\uc2dc \uc801\uc6a9. \uadf8\ub798\uc11c \ub450 \ub178\ub4dc\uc758 \uc0c1\ud0dc\uac00 \ub3d9\uc77c.<\/p>\n<\/div>\n\n<h2>Primary \uc124\uc815 \u2014 postgresql.conf<\/h2>\n\n<pre><code># Primary\nwal_level = replica\nmax_wal_senders = 10          # \ucd5c\ub300 standby \uc218 + \uc5ec\uc720\nwal_keep_size = 1GB           # standby \uac00 \ub530\ub77c\uc7a1\uc744 \uc2dc\uac04 \uc5ec\uc720\nsynchronous_commit = on       # \ub610\ub294 remote_apply (\ub3d9\uae30 \uc2dc)\n\n# pg_hba.conf \u2014 replicator \uc0ac\uc6a9\uc790 \ud5c8\uc6a9\nhost  replication  replicator  10.0.0.0\/24  scram-sha-256<\/code><\/pre>\n\n<pre><code>-- Primary \uc5d0\uc11c replicator \uc5ed\ud560 \uc0dd\uc131\nCREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD '...';\n\n-- replication slot \ub9cc\ub4e4\uae30 (\uad8c\uc7a5)\nSELECT pg_create_physical_replication_slot('standby_1');\n-- WAL \uc774 standby \uac00 \ubc1b\uae30 \uc804\uae4c\uc9c0\ub294 \uc0ad\uc81c\ub418\uc9c0 \uc54a\uc74c \u2192 \uc548\uc804<\/code><\/pre>\n\n<h2>Standby \ubd80\ud2b8\uc2a4\ud2b8\ub7a9 \u2014 pg_basebackup<\/h2>\n\n<pre><code># Standby \ub178\ub4dc\uc5d0\uc11c, \ube48 \ub514\ub809\ud130\ub9ac\uc5d0\nsudo systemctl stop postgresql\nsudo -u postgres rm -rf \/var\/lib\/postgresql\/16\/main\n\nsudo -u postgres pg_basebackup \\\n  -h primary.example.com \\\n  -U replicator \\\n  -D \/var\/lib\/postgresql\/16\/main \\\n  -Fp -Xs -P -R \\\n  -S standby_1\n\n# -R : \uc790\ub3d9\uc73c\ub85c standby.signal + primary_conninfo \uc0dd\uc131\n# -S standby_1 : \ubbf8\ub9ac \ub9cc\ub4e0 replication slot \uc5f0\uacb0\n\nsudo systemctl start postgresql<\/code><\/pre>\n\n<h2>postgresql.auto.conf \uc790\ub3d9 \uc0dd\uc131 \uacb0\uacfc<\/h2>\n\n<pre><code># pg_basebackup -R \uac00 \ub9cc\ub4e4\uc5b4 \uc90c\nprimary_conninfo = 'host=primary.example.com user=replicator password=... port=5432'\nprimary_slot_name = 'standby_1'\n\n# standby.signal \ube48 \ud30c\uc77c\uc774 \uc788\uc73c\uba74 Postgres \uac00 standby \ubaa8\ub4dc\ub85c \uc2dc\uc791<\/code><\/pre>\n\n<h2>\ubcf5\uc81c \uc0c1\ud0dc \ud655\uc778<\/h2>\n\n<pre><code>-- Primary \uc5d0\uc11c\nSELECT pid, usename, application_name, client_addr,\n       state, sync_state, sent_lsn, write_lsn, flush_lsn, replay_lsn,\n       pg_size_pretty(pg_wal_lsn_diff(sent_lsn, replay_lsn)) AS lag\nFROM   pg_stat_replication;\n\n-- Standby \uc5d0\uc11c\nSELECT pg_is_in_recovery();    -- true \uba74 standby\nSELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();<\/code><\/pre>\n\n<h2>hot standby \u2014 \uc77d\uae30 \ubd84\uc0b0<\/h2>\n\n<pre><code># Standby \uc758 postgresql.conf\nhot_standby = on              # standby \uc5d0\uc11c SELECT \ud5c8\uc6a9 (PG 11+ \ub294 \uae30\ubcf8)\nmax_standby_streaming_delay = 30s   # \ucda9\ub3cc \uc2dc standby \uac00 \ub300\uae30\ud560 \ucd5c\ub300 \uc2dc\uac04<\/code><\/pre>\n\n<pre><code>-- \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \u2014 \uc77d\uae30\ub294 standby, \uc4f0\uae30\ub294 primary\nconst writeDb = new Pool({ host: \"primary.example.com\" });\nconst readDb  = new Pool({ host: \"standby.example.com\" });\n\nawait writeDb.query(\"INSERT ...\");   \/\/ primary\nawait readDb.query(\"SELECT ...\");    \/\/ standby (\uc0b4\uc9dd \uc61b \ub370\uc774\ud130 \uac00\ub2a5)<\/code><\/pre>\n\n<div class=\"warnbox\">\n  <p><strong>\uc77d\uae30 \uc77c\uad00\uc131 \ud568\uc815.<\/strong> Standby \ub294 \ubcf4\ud1b5 \uc218\uc2ed ms \ub4a4\ucc98\uc9d0. &#8220;\ubc29\uae08 INSERT \ud55c \uac83\uc744 \uac19\uc740 \uc694\uccad\uc5d0\uc11c SELECT&#8221; \uba74 standby \uc5d0 \uc5c6\uc744 \uc218\ub3c4. <strong>\ubcf8\uc778\uc774 \ubc29\uae08 \uc4f4 \ub370\uc774\ud130\ub294 primary \uc5d0\uc11c \uc77d\uae30<\/strong>\uac00 \uc548\uc804\ud55c \ud328\ud134 (read-your-writes).<\/p>\n<\/div>\n\n<h2>\ub3d9\uae30 vs \ube44\ub3d9\uae30<\/h2>\n\n<div class=\"tablewrap\">\n<table>\n  <thead>\n    <tr><th><\/th><th>\ube44\ub3d9\uae30 (\uae30\ubcf8)<\/th><th>\ub3d9\uae30<\/th><\/tr>\n  <\/thead>\n  <tbody>\n    <tr><td data-label=\"\">commit \uc751\ub2f5<\/td><td data-label=\"\">primary local \ub514\uc2a4\ud06c<\/td><td data-label=\"\">standby \ub3c4 \ubc1b\uc74c<\/td><\/tr>\n    <tr><td data-label=\"\">\ub370\uc774\ud130 \uc190\uc2e4 \uc704\ud5d8<\/td><td data-label=\"\">primary \uac11\uc790\uae30 \uc8fd\uc73c\uba74 \ub9c8\uc9c0\ub9c9 \uba87 ms \uc190\uc2e4 \uac00\ub2a5<\/td><td data-label=\"\">\uc5c6\uc74c<\/td><\/tr>\n    <tr><td data-label=\"\">\uc4f0\uae30 \uc18d\ub3c4<\/td><td data-label=\"\">\ube60\ub984<\/td><td data-label=\"\">\ub124\ud2b8\uc6cc\ud06c RT \ub9cc\ud07c \ub290\ub9bc<\/td><\/tr>\n    <tr><td data-label=\"\">\uc124\uc815<\/td><td data-label=\"\">\uae30\ubcf8<\/td><td data-label=\"\">synchronous_standby_names = &#8216;*&#8217;<\/td><\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n\n<pre><code># \ub3d9\uae30 \ubcf5\uc81c\nsynchronous_commit = on\nsynchronous_standby_names = 'ANY 1 (s1, s2, s3)'  -- \uc14b \uc911 \ud558\ub098\ub9cc \uc751\ub2f5\ud558\uba74 OK\n\n# \uac00\uc7a5 \uac15\ud55c \u2014 remote_apply (standby \uac00 replay \uae4c\uc9c0 \uc644\ub8cc)\nsynchronous_commit = remote_apply<\/code><\/pre>\n\n<h2>failover \u2014 Primary \uc8fd\uc5c8\uc744 \ub54c<\/h2>\n\n<pre><code># Standby \ub97c primary \ub85c \uc2b9\uaca9\nsudo -u postgres pg_ctl promote -D \/var\/lib\/postgresql\/16\/main\n\n# \ub610\ub294 SQL (PG 12+)\nSELECT pg_promote();\n\n# \uacb0\uacfc \u2014 standby.signal \uc81c\uac70, \uc4f0\uae30 \ubc1b\uae30 \uc2dc\uc791<\/code><\/pre>\n\n<div class=\"databox\">\n  <p><strong>\uc2e4\uc804 failover.<\/strong> \uc218\ub3d9\uc740 \uc704\ud5d8\u00b7\ub290\ub9bc. <strong>patroni<\/strong> + <strong>etcd<\/strong>(\ub610\ub294 consul) \uac00 \ud45c\uc900 \u2014 \uc790\ub3d9 \uac10\uc9c0 + \uc548\uc804\ud55c \uc2b9\uaca9 + split-brain \ubc29\uc9c0. \ud074\ub77c\uc6b0\ub4dc\ub294 RDS\u00b7Aurora \uac00 \uac19\uc740 \uc77c\uc744 \uad00\ub9ac\ud615\uc73c\ub85c.<\/p>\n<\/div>\n\n<h2>\uc544\ud0a4\ud14d\ucc98 \ub808\ud37c\ub7f0\uc2a4<\/h2>\n\n<pre><code># \uc791\uc740 \uaddc\ubaa8\n[Primary] --(WAL stream)--> [Standby]\n    ^                              |\n    |                              v\n  App writes                  App reads (hot standby)\n\n# \uc911\uac04 \uaddc\ubaa8 (\uc790\ub3d9 failover)\n[Patroni cluster: Primary + Standby x N]\n     ^                       ^\n     |                       |\n  [HAProxy or pgBouncer for connection routing]\n     ^\n     |\n   [App]\n\n# \ub300\uaddc\ubaa8 (\uad00\ub9ac\ud615 \ucd94\ucc9c)\n[AWS RDS\/Aurora] \u2014 \uc790\ub3d9 \ubc31\uc5c5\u00b7\uc790\ub3d9 failover\u00b7read replica<\/code><\/pre>\n\n<h2>logical replication \u2014 \ubd80\ubd84 \ubcf5\uc81c<\/h2>\n\n<pre><code>-- \uc635\uc158 \u2014 \uc804\uccb4\uac00 \uc544\ub2cc \ud2b9\uc815 \ud14c\uc774\ube14\ub9cc \ubcf5\uc81c\n-- PG 10+ \ud45c\uc900\n\n-- Primary\nALTER SYSTEM SET wal_level = 'logical';\nCREATE PUBLICATION my_pub FOR TABLE users, orders;\n\n-- Subscriber\nCREATE SUBSCRIPTION my_sub\n  CONNECTION 'host=primary user=...'\n  PUBLICATION my_pub;<\/code><\/pre>\n\n<p>\uc2a4\ud2b8\ub9ac\ubc0d \ubcf5\uc81c\ub294 \uc804\uccb4 \ud074\ub7ec\uc2a4\ud130 \ubcf5\uc81c, logical \uc740 \ud14c\uc774\ube14 \ub2e8\uc704\u00b7\ub2e4\ub978 \uba54\uc774\uc800 \ubc84\uc804 \uac04\u00b7\ub2e4\ub978 \uc2a4\ud0a4\ub9c8 \ubcc0\ud658 \uac00\ub2a5. \ub9c8\uc774\uadf8\ub808\uc774\uc158\u00b7CDC \uc5d0 \uc790\uc8fc \uc0ac\uc6a9.<\/p>\n\n<h2>\ubaa8\ub2c8\ud130\ub9c1 \uccb4\ud06c\ub9ac\uc2a4\ud2b8<\/h2>\n\n<ul>\n  <li><code>pg_stat_replication<\/code> \uc758 <strong>lag<\/strong> \u2014 1\ucd08 \uc774\uc0c1\uc774\uba74 \uacbd\uace0.<\/li>\n  <li>Standby \uc758 <code>pg_last_wal_replay_lsn<\/code> \uc815\uc9c0 \u2014 \uc5b4\ub518\uac00 \ub9c9\ud614\uc74c.<\/li>\n  <li>replication slot \uc758 <code>active = false<\/code> \uac00 \uae38\uba74 \u2014 WAL \uc774 \uc313\uc5ec \ub514\uc2a4\ud06c \ud3ed\uc8fc.<\/li>\n  <li>\uc8fc\uae30\uc801 failover \ud6c8\ub828 \u2014 \uc9c4\uc9dc \uc0ac\uace0 \ub0ac\uc744 \ub54c \ub2f9\ud669 \uc548 \ud568.<\/li>\n<\/ul>\n\n<div class=\"cta\">\n  <h3>22\ud3b8 \u2014 \ud30c\ud2f0\uc154\ub2dd (RANGE\u00b7LIST\u00b7HASH)<\/h3>\n  <p>\ud070 \ud14c\uc774\ube14\uc744 \uc798\uac8c \u2014 \uc2dc\uacc4\uc5f4\u00b7\ub2e4\uad6d\uac00 \ub370\uc774\ud130\uc758 \ud45c\uc900.<\/p>\n<\/div>\n\n<div class=\"series-nav\">\n  <strong>\ud83d\udcda PostgreSQL \ubc30\uc6b0\uae30 \uad50\uc7ac<\/strong><br>\n  \uc774\uc804: 20\ud3b8 \ubc31\uc5c5 \u00b7 \ud604\uc7ac: <strong>21\ud3b8 (\uace0\uae09)<\/strong> \u00b7 \ub2e4\uc74c \u2192 22\ud3b8 \ud30c\ud2f0\uc154\ub2dd \u00b7 \uc9c4\ud589: <strong>21\/24<\/strong>\n<\/div>\n\n<\/article>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>streaming replication\u00b7standby\u00b7failover. 24\ud3b8 \uad50\uc7ac 21\ud3b8.<\/p>\n","protected":false},"author":1,"featured_media":328,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-520","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\/520","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=520"}],"version-history":[{"count":0,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts\/520\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media\/328"}],"wp:attachment":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media?parent=520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/categories?post=520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/tags?post=520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}