{"id":10851,"date":"2026-09-23T10:48:32","date_gmt":"2026-09-23T01:48:32","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=10851"},"modified":"2026-09-23T11:49:49","modified_gmt":"2026-09-23T02:49:49","slug":"nextjs-sns-server-36","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/23\/nextjs-sns-server-36\/","title":{"rendered":"[nextjs]SNS Server-36(myapp46)\u00a0"},"content":{"rendered":"\n<p>\ud83d\udc49\ud83c\udffb myapp46\uc5d0\uc11c\ub294 myapp46\uc5d0\uc11c \ucd94\uac00\ub41c \uc0ad\uc81c \ubc84\ud2bc\uc744 \uc774\uc6a9\ud574\uc11c \uae00 \uc0ad\uc81c \uae30\ub2a5\uc744 \uc644\ub8cc\ud569\ub2c8\ub2e4.<br>In myapp46, the post deletion function is implemented using the delete button added in myapp46.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ub85c\uceec \uc11c\ubc84\uc758 \uae00\uc744 \uc0ad\uc81c\uc2dc \ub9ac\ubaa8\ud2b8 \uc11c\ubc84\uc758 \uae00 \uc0ad\uc81c\uac00 \uc644\ub8cc\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<br>Verify that deleting a post on the local server also completes the deletion of the post on the remote server.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ud14c\uc2a4\ud2b8 \uae30\uc900\uc740 gotosocial\uc11c\ubc84\ub97c \uae30\uc900\uc73c\ub85c \ud569\ub2c8\ub2e4.<br>The testing is based on the GoToSocial server.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ub9c8\uc2a4\ud1a0\ub3c8 \uc11c\ubc84\ub294 \ud604\uc7ac \ud655\uc778\ud558\uae30 \ud798\ub4e0 \ubd80\ubd84\uc774 \uc788\uc5b4\uc11c \uc81c\uac00 \uad6c\ucd95\ud574\ub193\uc740 gotosocial\uacfc \uc5f0\ub3d9\uc744 \uba3c\uc800 \ud14c\uc2a4\ud2b8 \ud569\ub2c8\ub2e4.<br>Since there are aspects of the Mastodon server that are currently difficult to verify, I am first testing the integration with the GoToSocial instance I have set up.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ub9c8\uc2a4\ud1a0\ub3c8 \uc11c\ubc84\ub294 \ud604\uc7ac \uc11c\ubc84 \ub85c\uadf8\ub9cc \ud655\uc778\ud569\ub2c8\ub2e4.<br>The Mastodon server currently only checks server logs.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc804\uccb4 \ucf54\ub4dc\ub294 \uae43\ud5c8\ube0c\uc5d0\uc11c \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>You can find the full code on GitHub.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/gideonslife01\/flm-nextjs\">https:\/\/github.com\/gideonslife01\/flm-nextjs<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/gideonslife01\/flm-nextjs\">https:\/\/github.com\/gideonslife01\/flm-nextjs<\/a><\/p>\n\n\n\n<p>\ud83d\udcc1 \uc804\uccb4 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \/ Overall Project Structure<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>myapp project\/  \n\u251c\u2500\u2500 app\/  (Next.js App Router)\n\u2502   \u251c\u2500\u2500 .well-known\/webfinger\/route.ts  -&gt; webfinger\n\u2502   \u251c\u2500\u2500 api\/follow\/route.ts    -&gt; Follow API(temporary)\n\u2502   \u251c\u2500\u2500 api\/announce\/route.ts  -&gt; Boost(Announcement)\n\u2502   \u251c\u2500\u2500 api\/like\/route.ts.     -&gt; Like API\n\u2502   \u251c\u2500\u2500 api\/posts\/route.ts     -&gt; Writing API\n\u2502   \u251c\u2500\u2500 api\/timeline\/route.ts  -&gt; Timeline API\n\u2502   \u251c\u2500\u2500 api\/followinglist\/route.ts  -&gt; followinglist API\n\u2502   \u251c\u2500\u2500 api\/followerslist\/route.ts  -&gt; followerslist API\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v1\/instance<\/span>\/route.ts -&gt; auth\n\u2502   \u251c\u2500\u2500 api\/v1\/apps\/route.ts.    -&gt; auth\n\u2502   \u251c\u2500\u2500 api\/v1\/accounts\/verify_credentials\/route.ts -&gt; auth\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/route.ts -&gt; Write Post\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v1\/timelines\/home\/route.ts<\/span> -&gt; timeline\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">oauth\/authorize\/route.ts<\/span> -&gt; auth\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">oauth\/token\/route.ts<\/span> -&gt; auth\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v1\/search\/home\/route.ts<\/span> -&gt; search\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v2\/search\/home\/route.ts<\/span> -&gt; search\n\u2502   \u251c\u2500\u2500 api\/v1\/accounts\/&#91;id]\/followers\/route.ts -&gt; followers\n\u2502   \u251c\u2500\u2500 api\/v1\/accounts\/&#91;id]\/following\/route.ts -&gt; following\n\u2502   \u251c\u2500\u2500 api\/auth\/signup\/route.ts        -&gt; Signup\n\u2502   \u251c\u2500\u2500 api\/auth\/login\/route.ts         -&gt; Login\n\u2502   \u251c\u2500\u2500<strong> <\/strong>api\/auth\/logout\/route.ts        -&gt; Logout\n\u2502   \u251c\u2500\u2500<strong> <\/strong>api\/auth\/refresh\/route.ts       -&gt; Refresh Token\n\u2502   \u251c\u2500\u2500<strong> api\/cleanup-orphan\/route.ts     -&gt; post,outbox clean up<\/strong>\n\u2502   \u251c\u2500\u2500<strong> <\/strong>api\/auth\/me\/route.tsx           -&gt; Login Check<strong>\n<\/strong>\u2502   \u251c\u2500\u2500 auth\/signup\/page.tsx            -&gt; Signup UI\n\u2502   \u251c\u2500\u2500 auth\/signup\/page.tsx            -&gt; Login UI\n\u2502   \u251c\u2500\u2500 users\/&#91;username]\/\n\u2502   \u2502   \u251c\u2500\u2500 statuses\/&#91;id]\/route.ts -&gt; Indivisual Post\n\u2502   \u2502   \u251c\u2500\u2500 route.ts               -&gt; Acotr Information\n\u2502   \u2502   \u251c\u2500\u2500 followers\/route.ts     -&gt; Followers List\n\u2502   \u2502   \u251c\u2500\u2500 following\/route.ts     -&gt; Following List\n\u2502   \u2502   \u251c\u2500\u2500 inbox\/route.ts         -&gt; Inbox\n\u2502   \u2502   \u2514\u2500\u2500 outbox\/route.ts        -&gt; outbox\n\u2502   \u251c\u2500\u2500 usersui\/&#91;username]\/\n\u2502   \u2502   \u251c\u2500\u2500 page.tsx               -&gt; Timeline UI(Server, 404)\n\u2502   \u2502   \u251c\u2500\u2500 ClientPage.tsx.        -&gt; Timeline UI(Client,Call Active Themes)\n\u2502   \u2502   \u2514\u2500\u2500 _components\/themes\/\n\u2502   \u2502       \u251c\u2500\u2500 themeex\/ThemeexTheme.tsx   -&gt; Example Theme\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/PinaforeTheme.tsx -&gt; Theme 1\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/FollowersList.tsx -&gt; Theme 1, FollowersList\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/FollowingList.tsx -&gt; Theme 1, FollowingList\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/NotificationsList.tsx -&gt; Theme 1, NotificationsList\n\u2502   \u2502       \u251c\u2500\u2500 mastodon\/MastodonTheme.tsx -&gt; Theme 2\n\u2502   \u2502       \u2514\u2500\u2500 minimal\/MinimaltTheme.tsx  -&gt; Theme 3\n\u2502   \u251c\u2500\u2500 layout.tsx, page.tsx, globals.css\n\u2502   \u2514\u2500\u2500 favicon.ico\n\u251c\u2500\u2500 lib\/\n\u2502   \u251c\u2500\u2500 theme.tsx              -&gt; Theme Provider\n\u2502   \u251c\u2500\u2500 watchThemes.ts         -&gt; Check real-time theme changes\n\u2502   \u251c\u2500\u2500 auth.ts                -&gt; Authentication, User Management\n\u2502   \u251c\u2500\u2500 ap.ts                  -&gt; Follow,Undo,Create,Likes,Announce\n\u2502   \u2514\u2500\u2500 db.ts                  -&gt; DB connection\n\u251c\u2500\u2500 data\/\n\u2502   \u251c\u2500\u2500 keys\/userIDs\/          -&gt; private.pem, public.pem(New)\n\u2502   \u2514\u2500\u2500 keys\/                  -&gt; private.pem, public.pem(legacy)\n\u251c\u2500\u2500 data.sqlite                -&gt; Database(1\/3)\n\u251c\u2500\u2500 data.sqlite-wal            -&gt; Database(2\/3)\n\u251c\u2500\u2500 data.sqlite-shm            -&gt; Database(3\/3)\n\u251c\u2500\u2500 Caddyfile                  -&gt; https \n\u251c\u2500\u2500 instrumentation.ts         -&gt; Background Server\n\u2514\u2500\u2500 package.json<\/code><\/pre>\n\n\n\n<p>\ud83d\udcc1 \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791 \/ Project Start<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-freelifemakers-org wp-block-embed-freelifemakers-org\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"Ut7NvPcK8g\"><a href=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/03\/nextjs-project-summary\/\">[nextjs]\ud504\ub85c\uc81d\ud2b8\uc694\uc57d\/project summary(myapp30+)<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;[nextjs]\ud504\ub85c\uc81d\ud2b8\uc694\uc57d\/project summary(myapp30+)&#8221; &#8212; freelifemakers.org\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/03\/nextjs-project-summary\/embed\/#?secret=M72KnsgwyH#?secret=Ut7NvPcK8g\" data-secret=\"Ut7NvPcK8g\" width=\"560\" height=\"315\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udcc1 \ub77c\uc6b0\ud2b8 \ucd94\uac00 \/ Add route<\/p>\n\n\n\n<p>\u2714\ufe0f app\/api\/cleanup-orphan\/route.ts<\/p>\n\n\n\n<p>&#8212;  \uc544\uc9c1\uc740 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ub77c\uc6b0\ud2b8 \uc785\ub2c8\ub2e4.<br>This is a route that is not currently in use.<\/p>\n\n\n\n<p>&#8212; \uccad\uc18c\uc6a9 \ub77c\uc6b0\ud2b8,oubox\ud14c\uc774\ube14\uacfc posts\ud14c\uc774\ube14\uc758 \ub0b4\uc6a9\uc77c \uc77c\uce58\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0 \uc0ad\uc81c<br>Delete records where the contents of the <code>oubox<\/code> table and the <code>posts<\/code> table do not match (cleanup routine).<\/p>\n\n\n\n<p>&#8212; oubox \ub2e4\ub978 \uc11c\ubc84\ub85c \ubcf4\ub0b8 \uae00 posts \ub0b4\uac00 \uc791\uc131\ud55c \uae00<br>Outbox \/ Posts sent to other servers \/ Posts I wrote<\/p>\n\n\n\n<p>\ud83d\udcc1 \uc774\uc804 \ub77c\uc6b0\ud2b8 \uc791\ub3d9 \ud14c\uc2a4\ud2b8(\uc0ac\uc804\ud14c\uc2a4\ud2b8)<\/p>\n\n\n\n<p>\u2714\ufe0f \ub85c\uceec\uc11c\ubc84, \ud130\ubbf8\ub110 \ud14c\uc2a4\ud2b8<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \uae00 \uc4f0\uae30 - \ub85c\uceec (\ub85c\uceec \uc11c\ubc84 UI\uc804\uc6a9 ,outbox 7\ub85c \uc99d\uac00 + \ud314\ub85c\uc6cc\ub4e4\uc5d0\uac8c \ubc30\ub2ec)\n# Write Post - Local (Local server UI only; increment outbox to 7 + deliver to followers)\n\ncurl -X POST https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"username\":\"user1\",\"content\":\"Hello local UI #apiposts myapp46\"}'\n\n# \uae00 \uc218\uc815(\ub85c\uceec\ub9cc\uac00\ub2a5, \uad6c\ud604\uc608\uc815, \ub77c\uc6b0\ud2b8\uc788\uc74c)\n# Modify post (local-only, pending implementation, route exists)\n\ncurl -X PUT https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"username\":\"user1\",\"id\":\"xxx\",\"content\":\"\uc218\uc815\ub41c \ub0b4\uc6a9\/Revised content\"}'\n\n\n# \uae00 \uc0ad\uc81c  \/ Delete Posts(myapp30)\n# myapp30 \ubd80\ud130 GET\ubc29\uc2dd\ub3c4 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.\n# 1) POST\n\ncurl -X DELETE https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n -H \"Content-Type: application\/json\" \\\n -d '{\"username\":\"user1\",\"id\":\"e6c99652-572f-491a-9e61-05e67b0d58fc\"}'\n\n# 2) GET\n\ncurl -X DELETE \"https:\/\/aloy-horizon.duckdns.org\/api\/posts?id=117204066261760455&amp;username=user1\"<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \ud130\ubbf8\ub110\uc5d0\uc11c \ub0b4 \uc11c\ubc84\uc5d0 \uae00\uc4f0\uae30 \uc2e4\ud589<br>Run the post-writing command on my server from the terminal.<\/p>\n\n\n\n<p>&#8212;  \uace0\ud22c\uc18c\uc15c\uc5d0 \uae00 \ubc30\ub2ec \uc0c1\ud0dc \ud655\uc778<br>Check post delivery status on GoToSocial<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>% curl -X POST https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"username\":\"user1\",\"content\":\"Hello local UI #apiposts myapp46\"}'\n\n<strong>{\"id\":\"4bf8ddd5-ac78-41a2-9e97-37a36aacdeb3\",\"content\":\"Hello local UI #apiposts myapp46\",\"created_at\":\"2026-09-22 23:35:53\",\"username\":\"user1\"}<\/strong>\n% <\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \ub9c8\uc2a4\ud1a0\ub3c8\uc5d0\uc11c \uae00\uc4f0\uace0 \ub0b4 \uc11c\ubc84\ub85c \ubc30\ub2ec\ub418\ub294\uc9c0 \ud655\uc778<br>Write a post on Mastodon and check if it gets delivered to my server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \uc11c\ubc84 \ub85c\uadf8 \/ Server Log\n\ud83d\udce9 &#91;user1] INBOX: Create https:\/\/mastodon.social\/ap\/users\/117193449750714993 https:\/\/mastodon.social\/ap\/users\/117193449750714993\/statuses\/117317371254499150\/activity\n\ud83d\udd11 \uce90\uc2dc \uc5c6\uc74c! \/ No cache, Fetch! https:\/\/mastodon.social\/ap\/users\/117193449750714993\n\ud83d\udd11 Actor publicKey \uac00\uc838\uc624\uae30 \/ Get Actor publickey: https:\/\/mastodon.social\/ap\/users\/117193449750714993 as user1\n\ud83d\udd10 Signed GET -&gt; https:\/\/mastodon.social\/ap\/users\/117193449750714993 as user1\n\ud83d\udd0d \uac80\uc99d signingString \/ verification signingString: host: aloy-horizon.duckdns.org\ndate: Tue, 22 Sep 2026 23:50:21 GMT\ncontent-type: application\/activity+json\ndigest: SHA-256=BGiclF18OTj4d24GcMLm2ezW9dr1SMoUu1KegaQg5Ho=\n(request-target): post \/users\/user1\/inbox\n\u2705 \uc11c\uba85 \uac80\uc99d \uc131\uacf5! \/ Signature verification successful!\n\u2705 \uc11c\uba85 \uac80\uc99d \uc131\uacf5 \/ Signature verification successful, actor: https:\/\/mastodon.social\/ap\/users\/117193449750714993\n\ud83d\udcdd &#91;user1] \uc0c8 \uae00 \ub3c4\ucc29 from https:\/\/mastodon.social\/ap\/users\/117193449750714993\n\u2705 inbox_posts \uc800\uc7a5\/ save inbox_posts: 117317371254499150\n POST \/users\/user1\/inbox 202 in 874ms (next.js: 13ms, proxy.ts: 11ms, application-code: 850ms)\n\n# \ub0b4 \uc11c\ubc84 DB \/ My Server DB\nsqlite&gt; select actor,content,username from inbox_posts;\nhttps:\/\/freelifemakers.com\/users\/user1|&lt;p&gt;inbox_posts table test&lt;\/p&gt;|user1\nhttps:\/\/freelifemakers.com\/users\/user1|&lt;p&gt;actor test&lt;\/p&gt;|user1\nhttps:\/\/freelifemakers.com\/users\/user1|&lt;p&gt;likes test&lt;\/p&gt;|user1\nhttps:\/\/freelifemakers.com\/users\/user1|&lt;p&gt;boost delivery test!!&lt;\/p&gt;|user1\nhttps:\/\/freelifemakers.com\/users\/user1|&lt;p&gt;Boots Button Test&lt;\/p&gt;|user1\nhttps:\/\/freelifemakers.com\/users\/user1|&lt;p&gt;Favorite TEst&lt;\/p&gt;|user1\nhttps:\/\/mastodon.social\/ap\/users\/117193449750714993|&lt;p&gt;Hello Mastodon!!!&lt;\/p&gt;|user1\nhttps:\/\/mastodon.social\/ap\/users\/117193449750714993|&lt;p&gt;mastodon boost test&lt;\/p&gt;|user1\nhttps:\/\/mastodon.social\/ap\/users\/117193449750714993|&lt;p&gt;mastodon ,ally,user1 posts delete test&lt;\/p&gt;|user1\nhttps:\/\/mastodon.social\/ap\/users\/117193449750714993|&lt;p&gt;search profile test!!&lt;\/p&gt;|user1\nhttps:\/\/mastodon.social\/ap\/users\/117193449750714993|&lt;p&gt;follow and search profile test&lt;\/p&gt;|user1\n<strong>https:\/\/mastodon.social\/ap\/users\/117193449750714993|&lt;p&gt;myapp46 post delivery test from mastodon to aloy&lt;\/p&gt;|user1<\/strong>\nsqlite&gt; \n<\/code><\/pre>\n\n\n\n<p>\ud83d\udcc1 \ucf54\ub4dc\uc218\uc815 \/ Code Modification<\/p>\n\n\n\n<p>\u2714\ufe0f app\/api\/posts\/route.ts<\/p>\n\n\n\n<p>&#8212; \uae00 \ubc30\ub2ec\uc2dc outbox\uc5d0\ub3c4  \uc800\uc7a5<br>Save to outbox when delivering text<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  \/\/ \u2705 myapp46 - insert into oubox\n  try {\n  db.prepare('CREATE TABLE IF NOT EXISTS outbox (id TEXT PRIMARY KEY, type TEXT, actor TEXT, object TEXT, created_at INTEGER)').run();\n  db.prepare('INSERT INTO outbox (id, type, actor, object, created_at) VALUES (?,?,?,?,?)')\n    .run(id, 'Create', `https:\/\/${DOMAIN}\/users\/${username}`, JSON.stringify(note), Date.now());\n} catch {}<\/code><\/pre>\n\n\n\n<p>\ud83d\udcc1 \ud14c\uc2a4\ud2b8 \/ Test<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST https:\/\/aloy-horizon.duckdns.org\/api\/posts \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"username\":\"user1\",\"content\":\"myapp46 pos delivery and delete test\"}'<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \ud130\ubbf8\ub110\uc5d0\uc11c \uae00\uc4f0\uae30 \/ Writing in the terminal<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"223\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-writepost-termianl.jpg\" alt=\"\" class=\"wp-image-10883\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-writepost-termianl.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-writepost-termianl-300x84.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-writepost-termianl-768x214.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-writepost-termianl-400x112.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">write post<\/figcaption><\/figure>\n\n\n\n<p>\u2714\ufe0f \ub85c\uceec\uc11c\ubc84 \/ Local Server<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"399\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myap46-aloy-ui-jpg.jpg\" alt=\"\" class=\"wp-image-10877\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myap46-aloy-ui-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myap46-aloy-ui-jpg-300x150.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myap46-aloy-ui-jpg-768x383.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myap46-aloy-ui-jpg-400x200.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">local server<\/figcaption><\/figure>\n\n\n\n<p>\u2714\ufe0f \ub9ac\ubaa8\ud2b8\uc11c\ubc84 \/ Remote Server<\/p>\n\n\n\n<p>&#8212; gotosocial,freelifemakers.com\/@user1<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"700\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-gotosocial-jpg.jpg\" alt=\"\" class=\"wp-image-10878\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-gotosocial-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-gotosocial-jpg-300x263.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-gotosocial-jpg-768x672.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-gotosocial-jpg-400x350.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">gotosocial,freelifemakers.com\/@user1<\/figcaption><\/figure>\n\n\n\n<p>\u2714\ufe0f \uc11c\ubc84 \ub85c\uadf8 \/ Server Log<\/p>\n\n\n\n<p>&#8212; mastodon , gotosocial 202 <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"512\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-serverlog-post-delivery-jpg.jpg\" alt=\"\" class=\"wp-image-10880\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-serverlog-post-delivery-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-serverlog-post-delivery-jpg-300x192.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-serverlog-post-delivery-jpg-768x492.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/09\/myapp46-serverlog-post-delivery-jpg-400x256.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Server Log<\/figcaption><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\uc694\ud55c\ubcf5\uc74c 8\uc7a5 32\uc808 \/ John 8:32<\/p>\n\n\n\n<p>&#8220;\uadf8\ub9ac\uace0 \ub108\ud76c\ub294 \uc9c4\ub9ac\ub97c \uc54c\uac8c \ub420 \uac83\uc774\uba70, \uc9c4\ub9ac\uac00 \ub108\ud76c\ub97c \uc790\uc720\ub86d\uac8c \ud560 \uac83\uc774\ub2e4.&#8221;<\/p>\n\n\n\n<p>&#8220;Then you will know the truth ,and the truth will set you free&#8221;<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb myapp46\uc5d0\uc11c\ub294 myapp46\uc5d0\uc11c \ucd94\uac00\ub41c \uc0ad\uc81c \ubc84\ud2bc\uc744 \uc774\uc6a9\ud574\uc11c \uae00 \uc0ad\uc81c \uae30\ub2a5\uc744 \uc644\ub8cc\ud569\ub2c8\ub2e4.In myapp46, the post deletion function is implemented using the delete button added in myapp46. \ud83d\udc49\ud83c\udffb \ub85c\uceec \uc11c\ubc84\uc758 \uae00\uc744 \uc0ad\uc81c\uc2dc \ub9ac\ubaa8\ud2b8 \uc11c\ubc84\uc758 \uae00 \uc0ad\uc81c\uac00 \uc644\ub8cc\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.Verify that deleting a post on the local server also completes the deletion of the post on the remote server. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,27,1,7],"tags":[],"class_list":["post-10851","post","type-post","status-publish","format-standard","hentry","category-news","category-nextjs","category-uncategorized","category-website","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/10851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=10851"}],"version-history":[{"count":28,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/10851\/revisions"}],"predecessor-version":[{"id":10888,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/10851\/revisions\/10888"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=10851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=10851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=10851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}