{"id":7,"date":"2026-04-12T23:20:25","date_gmt":"2026-04-12T23:20:25","guid":{"rendered":"https:\/\/blog-api.minpox.com\/?p=7"},"modified":"2026-04-12T23:20:26","modified_gmt":"2026-04-12T23:20:26","slug":"fastapi-ollama-404%ec%9d%98-%ec%a7%84%ec%a7%9c-%eb%b2%94%ec%9d%b8%ec%9d%84-%ec%b0%be%ec%95%84%ec%84%9c","status":"publish","type":"post","link":"https:\/\/blog-api.minpox.com\/?p=7","title":{"rendered":"[FastAPI + Ollama] 404\uc758 \uc9c4\uc9dc \ubc94\uc778\uc744 \ucc3e\uc544\uc11c"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\ub77c\uc6b0\ud2b8\ub294 \uc788\ub294\ub370 \uc65c 404\uac00 \ub0a0\uae4c\uc694?<br>FastAPI + Ollama \uc0bd\uc9c8\uae30 \ud83d\udd0d<\/h2>\n\n\n\n<p>\uc9d1\uc5d0\uc11c mini AI-RAG\uc640 \ucc57\ubd07 \uc11c\ube44\uc2a4\ub97c \uc571\uc5d0 \uac04\uc2e0\ud788 \uc5f0\uacb0\ud588\uc2b5\ub2c8\ub2e4. \uc544\uc9c1 \ud504\ub85c\ud1a0\ud0c0\uc785\uc774\ub77c \ud14d\uc2a4\ud2b8\ubc16\uc5d0 \uc5c6\uc5b4 \ubcfc\ud488\uc5c6\uc9c0\ub9cc, \ub531 \ubd99\uc5ec\uc11c \ub418\uc5c8\uc744 \ub550 \uc815\ub9d0 \ubfcc\ub4ef\ud588\uc2b5\ub2c8\ub2e4. \uadf8 \uacfc\uc815\uc5d0\uc11c \uc0dd\uae34 \uc774\uc57c\uae30\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\u26a1 FastAPI\ud83d\udc33 Docker\ud83e\udd16 Ollama\u2601\ufe0f Cloud Run<\/p>\n\n\n\n<p>\ud83c\udfd7\ufe0f \uc11c\ube44\uc2a4 \uad6c\uc131<\/p>\n\n\n\n<p>\ud83d\udcf1 \uc571\u2192\u2601\ufe0f Cloud Run\u2192\ud83d\udd12 Cloudflare\u2192\ud83c\udfe0 \uacf5\uc720\uae30\u2192\ud83d\udda5\ufe0f \uc6b4\uc601 \uc11c\ubc84\u2192\ud83d\udcbb \uac1c\ubc1c \uc11c\ubc84 (RTX 3060)<\/p>\n\n\n\n<p>\ud83d\ude30\ub808\uc774\uc5b4\uac00 \uc313\uc77c\uc218\ub85d \uc774\uc0c1\ud55c \uc77c\uc774 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4<\/p>\n\n\n\n<p>iptables + NordVPN + Docker\uac00 \uc5bd\ud788\uba74\uc11c \ud328\ud0b7\uc774 \uc0ac\ub77c\uc84c\uace0, tcpdump\ub85c \uaca8\uc6b0 \ubc29\ud5a5\uc744 \uc7a1\uc558\uc2b5\ub2c8\ub2e4. \ub9e5\ubd81 SSH \ud130\ub110\uc774 \ub04a\uacbc\ub2e4 \ubd99\uc5c8\ub2e4 \ud558\uba74\uc11c \uac1c\ubc1c \uc11c\ubc84\uac00 \uc694\uccad\uc744 \ud1b5\uc9f8\ub85c \uc0bc\ud0a4\ub294 \uc99d\uc0c1\ub3c4 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ub85c\uadf8\uc5d4 \uc544\ubb34\uac83\ub3c4 \uc548 \ucc0d\ud788\ub294\ub370 \uc11c\ubc84\ub294 \uc0b4\uc544\uc788\ub294 \uc0c1\ud669 \u2014 \uaed0\ub2e4 \ucf1c\ub2c8\uae4c \ubc14\ub85c \ud574\uacb0\ub410\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uadf8\uac78 \ub6ab\uace0 \ub098\ub2c8 \uc774\ubc88\uc5d4 404\uac00 \uae30\ub2e4\ub9ac\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud83d\udea8\uc99d\uc0c1: \ub77c\uc6b0\ud2b8\ub294 \uc788\ub294\ub370 404<\/p>\n\n\n\n<p>Docker \ucee8\ud14c\uc774\ub108\uc5d0\uc11c&nbsp;<code>POST \/internal\/llm\/chat<\/code>&nbsp;\uc694\uccad\uc774 \uacc4\uc18d 404\ub97c \ubc18\ud658\ud588\uc2b5\ub2c8\ub2e4. \uac1c\ubc1c \uc11c\ubc84\uc5d0\uc11c\ub294 \uc815\uc0c1 \ub3d9\uc791. \ub77c\uc6b0\ud2b8 \ubaa9\ub85d\uc744 \uc9c1\uc811 \ucd9c\ub825\ud574\ubd24\ub354\ub2c8 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub294 \ubd84\uba85\ud788 \ub4f1\ub85d\ub418\uc5b4 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud83d\udca1 \ub0b4\ubd80(127.0.0.1)\uc5d0\uc11c\ub294&nbsp;<strong>401 Unauthorized<\/strong>, \uc678\ubd80(nginx)\uc5d0\uc11c\ub294&nbsp;<strong>404 Not Found<\/strong>. \uac19\uc740 \ucee8\ud14c\uc774\ub108, \uac19\uc740 \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \ub2e4\ub978 \uacb0\uacfc\uac00 \ub098\uc654\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud83d\udd0e\uacb0\uc815\uc801 \ub2e8\uc11c: \uc751\ub2f5 \ud06c\uae30<\/p>\n\n\n\n<p>nginx \uc561\uc138\uc2a4 \ub85c\uadf8\uc758 \uc751\ub2f5 \ud06c\uae30\uac00 \uc774\uc0c1\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\u26a0\ufe0f FastAPI \uae30\ubcf8 404 \uc751\ub2f5&nbsp;<code>{\"detail\":\"Not Found\"}<\/code>&nbsp;=&nbsp;<strong>22\ubc14\uc774\ud2b8<\/strong><br>\uc2e4\uc81c \uc751\ub2f5 \ud06c\uae30 =&nbsp;<strong>64~89\ubc14\uc774\ud2b8<\/strong><br>\ub204\uad70\uac00 \ub2e4\ub978 404\ub97c \ub9cc\ub4e4\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc5ed\uc0b0\ud574\ubcf4\ub2c8 Ollama\uc758 \uc5d0\ub7ec \uba54\uc2dc\uc9c0\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>{&#8220;detail&#8221;:&#8221;model &#8216;llama3&#8217; not found, try pulling it first&#8221;}<\/p>\n\n\n\n<p>\ud83d\udd75\ufe0f\uc6d0\uc778: upstream \uc5d0\ub7ec \uc804\ud30c<\/p>\n\n\n\n<p>\ud074\ub77c\uc774\uc5b8\ud2b8 \uc11c\ube44\uc2a4\uac00 GCP Secret Manager\uc5d0\uc11c&nbsp;<code>OLLAMA_MODEL=llama3<\/code>\ub97c \uc77d\uc5b4 \uc694\uccad body\uc5d0 \ub2f4\uc544 \ubcf4\ub0b4\uace0 \uc788\uc5c8\uace0, \uc11c\ubc84\uc5d0 \uc2e4\uc81c \uc124\uce58\ub41c \ubaa8\ub378\uc740&nbsp;<code>llama3.1:8b<\/code>\uc600\uc2b5\ub2c8\ub2e4. Ollama\uc758 404\uac00 FastAPI\ub97c \ud1b5\ud574 \uadf8\ub300\ub85c \uc804\ud30c\ub41c \uac83\uc785\ub2c8\ub2e4. \ub77c\uc6b0\ud305 \ubb38\uc81c\uac00 \uc544\ub2c8\ub77c upstream \uc5d0\ub7ec \uc804\ud30c \ubb38\uc81c\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud83e\udd16AI\uc640 \ud568\uaed8 \ud310 \uc774\uc57c\uae30<\/p>\n\n\n\n<p>AI\uc5d0\uac8c \ub300\ub7c9\uc758 \ub85c\uadf8 \ubd84\uc11d\uc744 \ub9e1\uacbc\ub294\ub370, \uc5b4\ub290 \uc21c\uac04 AI\uac00 \uc124\uacc4 \uad6c\uc131 \uc790\uccb4\ub97c \ubb34\ub108\ub728\ub9ac\ub294 \ubc29\ud5a5\uc73c\ub85c \uc720\ub3c4\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4. Claude\uc640 \ud568\uaed8 \ub2e4\uc2dc \ucc98\uc74c\ubd80\ud130 \ud30c\uace0\ub4e4\uc5b4\uc11c \uac04\uc2e0\ud788 \uc2e4\uc81c \uc6d0\uc778\uc744 \ucc3e\uc544\ub0c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>AI\ub294 \uba87 \uc8fc\uc758 \uc0bd\uc9c8\uc744 \uba70\uce60\ub85c \uc904\uc5ec\uc92c\uc9c0\ub9cc, \uc124\uacc4\ub97c \uc9c0\ud0a4\ub294 \uac74 \uacb0\uad6d \uc0ac\ub78c\uc758 \ubaab\uc774\uc5c8\uc2b5\ub2c8\ub2e4. \ub124\ud2b8\uc6cc\ud06c \uad00\ub9ac \ud3ec\uc778\ud2b8\uac00 \ub298\uc5b4\ub0a0\uc218\ub85d, AI\ub3c4 \uae38\uc744 \uc783\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udcdd\uc774 \uacbd\ud5d8\uc5d0\uc11c \uc5bb\uc740 \uad50\ud6c8<\/p>\n\n\n\n<p>1\ufe0f\u20e3<\/p>\n\n\n\n<p>\uc751\ub2f5 \ud06c\uae30\ub97c \ud655\uc778\ud558\ub77c<\/p>\n\n\n\n<p>22\ubc14\uc774\ud2b8 vs 64\ubc14\uc774\ud2b8. \uac19\uc740 404\ub3c4 \ub0b4\uc6a9\uc774 \ub2e4\ub985\ub2c8\ub2e4. \uc751\ub2f5 \ud06c\uae30 \ud558\ub098\uac00 \uacb0\uc815\uc801 \ub2e8\uc11c\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>2\ufe0f\u20e3<\/p>\n\n\n\n<p>404\uac00 \ud56d\uc0c1 \ub77c\uc6b0\ud305 \ubb38\uc81c\ub294 \uc544\ub2c8\ub2e4<\/p>\n\n\n\n<p>Upstream \uc5d0\ub7ec\ub294 \uc870\uc6a9\ud788 \uc804\ud30c\ub429\ub2c8\ub2e4. \uba85\uc2dc\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\uc9c0 \uc54a\uc73c\uba74 \ucd94\uc801\uc774 \ub9e4\uc6b0 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>3\ufe0f\u20e3<\/p>\n\n\n\n<p>Upstream \uc5d0\ub7ec\ub294 502\/503\uc73c\ub85c \ubcc0\ud658\ud558\ub77c<\/p>\n\n\n\n<p>\ub0b4\ubd80 \uc624\ub958\uc640 \ub77c\uc6b0\ud305 \uc624\ub958\ub97c \uac19\uc740 \ucf54\ub4dc\ub85c \ubc18\ud658\ud558\uba74 \ub514\ubc84\uae45 \uc2dc\uac04\uc774 \uba87 \ubc30\ub85c \ub298\uc5b4\ub0a9\ub2c8\ub2e4.<\/p>\n\n\n\n<p>4\ufe0f\u20e3<\/p>\n\n\n\n<p>\uc774\ud574 \uc548 \ub418\uba74 \uc77c\ub2e8 \ub044\uace0 \ucf1c\ub77c \u2014 \uc9c4\uc9c0\ud558\uac8c<\/p>\n\n\n\n<p>\ubb54\uac00 \uc815\ub9d0 \uc774\ud574 \uc548 \ub418\ub294 \uc0c1\ud669\uc774 \uc0dd\uae30\uba74, \uc77c\ub2e8 \uc815\ub9ac\ud558\uace0 \ucef4\ud4e8\ud130\ub97c \uaed0\ub2e4 \ud0a4\ub294 \uac8c \uc815\uc2e0\uac74\uac15\uc5d0 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub85c\uadf8\uac00 \uc870\uc6a9\ud560\uc218\ub85d,&nbsp;\uc2dc\uc57c\ub97c \ub113\ud600\uc57c \ud569\ub2c8\ub2e4.&nbsp;\ud83d\udd2d<br>\uadf8\ub9ac\uace0 \ubb54\uac00 \uc774\uc0c1\ud558\uba74 \u2014 \uc77c\ub2e8 \uc7ac\ubd80\ud305\ubd80\ud130.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ub77c\uc6b0\ud2b8\ub294 \uc788\ub294\ub370 \uc65c 404\uac00 \ub0a0\uae4c\uc694?FastAPI + Ollama \uc0bd\uc9c8\uae30 \ud83d\udd0d \uc9d1\uc5d0\uc11c mini AI-RAG\uc640 \ucc57\ubd07 \uc11c\ube44\uc2a4\ub97c \uc571\uc5d0 \uac04\uc2e0\ud788 \uc5f0\uacb0\ud588\uc2b5\ub2c8\ub2e4. \uc544\uc9c1 \ud504\ub85c\ud1a0\ud0c0\uc785\uc774\ub77c \ud14d\uc2a4\ud2b8\ubc16\uc5d0 \uc5c6\uc5b4 \ubcfc\ud488\uc5c6\uc9c0\ub9cc, \ub531 \ubd99\uc5ec\uc11c \ub418\uc5c8\uc744 \ub550 \uc815\ub9d0 \ubfcc\ub4ef\ud588\uc2b5\ub2c8\ub2e4. \uadf8 \uacfc\uc815\uc5d0\uc11c \uc0dd\uae34 \uc774\uc57c\uae30\uc785\ub2c8\ub2e4. \u26a1 FastAPI\ud83d\udc33 Docker\ud83e\udd16 Ollama\u2601\ufe0f Cloud Run \ud83c\udfd7\ufe0f \uc11c\ube44\uc2a4 \uad6c\uc131 \ud83d\udcf1 \uc571\u2192\u2601\ufe0f Cloud Run\u2192\ud83d\udd12 Cloudflare\u2192\ud83c\udfe0 \uacf5\uc720\uae30\u2192\ud83d\udda5\ufe0f \uc6b4\uc601 \uc11c\ubc84\u2192\ud83d\udcbb \uac1c\ubc1c \uc11c\ubc84 (RTX 3060) \ud83d\ude30\ub808\uc774\uc5b4\uac00 \uc313\uc77c\uc218\ub85d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[7,3,9,5,4,6,8,10],"class_list":["post-7","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-ai","tag-backend","tag-debugging","tag-docker","tag-fastapi","tag-ollama","tag-rag","tag-softwareengineering"],"_links":{"self":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":1,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts\/7\/revisions"}],"predecessor-version":[{"id":8,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts\/7\/revisions\/8"}],"wp:attachment":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}