{"id":13301,"date":"2026-11-03T09:23:40","date_gmt":"2026-11-03T00:23:40","guid":{"rendered":"https:\/\/ws.freelifemakers.org\/?p=13301"},"modified":"2026-11-03T13:28:03","modified_gmt":"2026-11-03T04:28:03","slug":"nextjs-sns-server-53","status":"publish","type":"post","link":"https:\/\/ws.freelifemakers.org\/index.php\/2026\/11\/03\/nextjs-sns-server-53\/","title":{"rendered":"[nextjs]SNS Server-53(myapp63)[\uae00\uc791\uc131\/Write a post]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\ud83d\udc49\ud83c\udffb post \ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud558\uace0 \uae00\uc791\uc131\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49\ud83c\udffb myapp61\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 post\ud14c\uc774\ube14\uc744 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcc1 \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791 \/ Project Start<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f Nextjs \ud504\ub85c\uc81d\ud2b8 \uc124\uce58<br>Setting up a Next.js project<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npx create-next-app@latest<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcc1 Caddy- \uc774\ubbf8 \uc124\uce58 \ud588\ub2e4\uba74 \ud328\uc2a4 \/ If you have already installed it, skip.\ud83d\udca1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0fCaddy \uc124\uce58 \/ Caddy install <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>brew install caddy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f Caddy file \ub9cc\ub4e4\uae30 \/ Create a Caddyfile <\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code># \ud30c\uc77c\uc5f4\uae30 \/ Open File\nnano Caddyfile\n\n# \uc124\uc815 \uc791\uc131 \/ Create Configuration\naloy-horizon.duckdns.org {\n    reverse_proxy localhost:3000\n}\n\n#\ud30c\uc77c \uc800\uc815\ud6c4 \uc885\ub8cc \/ Save file and exit (Ctrl + O,Ctrl + x)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f Caddy \uc2e4\ud589 \/ Run Caddy<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>caddy fmt --overwrite Caddyfile\ncaddy run\n\n# background\n\ncaddy start\ncaddy stop\n\n# \uc7ac\ubd80\ud305\uc2dc\uc5d0\ub3c4 \uc801\uc6a9\ud558\ub824\uba74\n# To apply the setting even after rebooting\n\nbrew services start caddy\nbrew services stop caddy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcc1 \ubaa8\ub4c8 \uc124\uce58 \/ Module Installation<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code># db\nnpm install mysql2        \nnpm install better-sqlite3\n\n# type\nnpm i --save-dev @types\/better-sqlite3 <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcc1 .env.local<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc120\ud0dd \/ Select Database<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>DB_TYPE=sqlite                              # mysql,sqlite\nDB_HOST=localhost\nDB_USER=mysns\nDB_PASSWORD=\"\"\nDB_DATABASE=mysns\nDOMAIN=aloy-horizon.duckdns.org             # only server\nNEXT_PUBLIC_DOMAIN=aloy-horizon.duckdns.org # client\nJWT_SECRET=your-secret-key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcc1 \ud14c\uc774\ube14 \uc0dd\uc131 \/ Create table<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f SQLite<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:13px\"><code>sqlite&gt; .schema posts\nCREATE TABLE posts (\n    id TEXT PRIMARY KEY,\n    content TEXT NOT NULL,\n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n  , username TEXT DEFAULT 'user1', visibility TEXT DEFAULT 'public' CHECK(visibility IN ('public','unlisted','private','direct')), original_id TEXT, sensitive INTEGER DEFAULT 0, in_reply_to_id TEXT, in_reply_to_username TEXT, in_reply_to_account_id TEXT);\nCREATE INDEX idx_posts_username_created ON posts(username, created_at DESC);\nCREATE INDEX idx_posts_visibility ON posts(visibility);\nCREATE INDEX idx_posts_reply ON posts(in_reply_to_id);\nCREATE INDEX idx_posts_reply_account ON posts(in_reply_to_account_id);\nsqlite&gt; <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f Mysql<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:13px\"><code>CREATE TABLE `posts` (\n  `id` varchar(255) NOT NULL,\n  `content` text NOT NULL,\n  `created_at` bigint DEFAULT NULL,\n  `username` varchar(255) DEFAULT 'user',\n  `visibility` varchar(20) DEFAULT 'public',\n  `original_id` varchar(255) DEFAULT NULL,\n  `sensitive` tinyint DEFAULT '0',\n  `in_reply_to_id` varchar(255) DEFAULT NULL,\n  `in_reply_to_username` varchar(255) DEFAULT NULL,\n  `in_reply_to_account_id` varchar(255) DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `idx_posts_username_created` (`username`,`created_at` DESC),\n  KEY `idx_posts_visibility` (`visibility`),\n  KEY `idx_posts_reply` (`in_reply_to_id`),\n  KEY `idx_posts_reply_account` (`in_reply_to_account_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udcc1 \ud14c\uc2a4\ud2b8<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f \ud130\ubbf8\ub110\uc5d0\uc11c \uc2e4\ud589<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST http:\/\/localhost:3000\/api\/v1\/statuses \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"content\":\"hello my post\",\"username\":\"user1\",\"visibility\":\"public\"}'\n\n\ub610\ub294 \/ or\n\ncurl -X POST https:\/\/aloy-horizon.duckdns.org\/api\/v1\/statuses \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"content\":\"hello my post\",\"username\":\"user1\",\"visibility\":\"public\"}'<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/ws.freelifemakers.org\/wp-content\/uploads\/2026\/11\/wpposts-jpg.jpg\" alt=\"\" class=\"wp-image-13332\" srcset=\"https:\/\/ws.freelifemakers.org\/wp-content\/uploads\/2026\/11\/wpposts-jpg.jpg 800w, https:\/\/ws.freelifemakers.org\/wp-content\/uploads\/2026\/11\/wpposts-jpg-300x300.jpg 300w, https:\/\/ws.freelifemakers.org\/wp-content\/uploads\/2026\/11\/wpposts-jpg-150x150.jpg 150w, https:\/\/ws.freelifemakers.org\/wp-content\/uploads\/2026\/11\/wpposts-jpg-768x768.jpg 768w, https:\/\/ws.freelifemakers.org\/wp-content\/uploads\/2026\/11\/wpposts-jpg-400x400.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ub9c8\ud0dc\ubcf5\uc74c 21\uc7a5 22\uc808 \/ Matthew 21: 22<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;\ub108\ud76c\uac00 \uae30\ub3c4\ud560 \ub54c\uc5d0 \ubb34\uc5c7\uc774\ub4e0\uc9c0 \ubbff\uace0 \uad6c\ud558\ub294 \uac83\uc740 \ub2e4 \ubc1b\uc73c\ub9ac\ub77c \ud558\uc2dc\ub2c8\ub77c&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;And everything you ask in prayer, believing, you will receive.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb post \ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud558\uace0 \uae00\uc791\uc131\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \ud83d\udc49\ud83c\udffb myapp61\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 post\ud14c\uc774\ube14\uc744 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud83d\udcc1 \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791 \/ Project Start \u2714\ufe0f Nextjs \ud504\ub85c\uc81d\ud2b8 \uc124\uce58Setting up a Next.js project \ud83d\udcc1 Caddy- \uc774\ubbf8 \uc124\uce58 \ud588\ub2e4\uba74 \ud328\uc2a4 \/ If you have already installed it, skip.\ud83d\udca1 \u2714\ufe0fCaddy \uc124\uce58 \/ Caddy install \u2714\ufe0f Caddy file \ub9cc\ub4e4\uae30 \/ Create a Caddyfile \u2714\ufe0f Caddy [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":13332,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,27,1,7],"tags":[],"class_list":["post-13301","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-nextjs","category-uncategorized","category-website","has-thumbnail"],"_links":{"self":[{"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/posts\/13301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/comments?post=13301"}],"version-history":[{"count":28,"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/posts\/13301\/revisions"}],"predecessor-version":[{"id":13334,"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/posts\/13301\/revisions\/13334"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/media\/13332"}],"wp:attachment":[{"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/media?parent=13301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/categories?post=13301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ws.freelifemakers.org\/index.php\/wp-json\/wp\/v2\/tags?post=13301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}