{"id":565853,"date":"2025-05-08T06:19:58","date_gmt":"2025-05-08T05:19:58","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=565853"},"modified":"2025-09-15T10:44:59","modified_gmt":"2025-09-15T09:44:59","slug":"deploying-django-apps-in-kubernetes","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/ko\/pycharm\/2025\/05\/deploying-django-apps-in-kubernetes\/","title":{"rendered":"Kubernetes\uc5d0\uc11c Django \uc571 \ubc30\ud3ec"},"content":{"rendered":"<p>Kubernetes\ub294 \ubc30\ud3ec, \ud655\uc7a5 \ubc0f \ub85c\ub4dc \ubc38\ub7f0\uc2f1\uc744 \uc790\ub3d9\ud654\ud558\ub294 \uc624\ud508 \uc18c\uc2a4 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \ud50c\ub7ab\ud3fc\uc73c\ub85c, Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uad00\ub9ac \uc2dc \ud0c1\uc6d4\ud55c \ubcf5\uc6d0\ub825\uacfc \uc720\uc5f0\uc131\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc18c\uaddc\ubaa8 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud558\ub4e0 \ubcf5\uc7a1\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad00\ub9ac\ud558\ub4e0, Kubernetes\ub294 Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uac1c\uc120\ud560 \uc218 \uc788\ub294 \uac15\ub825\ud55c \ud658\uacbd\uc744 \uc81c\uacf5\ud558\uc5ec \ucd5c\uc2e0 \uc6f9 \uac1c\ubc1c\uc758 \uc694\uad6c \uc0ac\ud56d\uc744 \ucda9\uc871\ud558\ub3c4\ub85d \ubcf4\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/kubernetes.io\/\" target=\"_blank\" rel=\"noopener\">Kubernetes<\/a>(K8s)\ub294 \ucee8\ud14c\uc774\ub108\ud654\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubc30\ud3ec, \ud655\uc7a5, \uc6b4\uc601\uc744 \uc790\ub3d9\ud654\ud558\uc5ec \ube60\ub974\uac8c \ubcc0\ud654\ud558\ub294 \uae30\uc220 \uc5c5\uacc4\uc758 \uc870\uc9c1\uc5d0 \uc218\ub9ce\uc740 \uc774\uc810\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubc30\ud3ec \uae30\uc220\uc744 \uac1c\uc120\ud558\uace0\uc790 \ud558\ub294 Django \uac1c\ubc1c\uc790\uc774\ub4e0, Django \ud1b5\ud569\uc744 \ud0d0\uc0c9\ud558\uace0\uc790 \ud558\ub294 Kubernetes \uc560\ud638\uac00\uc774\ub4e0, \uc774 \uac00\uc774\ub4dc\uc5d0\uc11c \ud574\ub2f9\ud558\ub294 \ub0b4\uc6a9\uc744 \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><!--more--><\/p>\n<p>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc758 \uccab \ubd80\ubd84\uc5d0\uc11c\ub294 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc6d0\ud65c\ud558\uac8c \ucee8\ud14c\uc774\ub108\ud654\ud558\uace0, \ud074\ub7ec\uc2a4\ud130 \uac04\uc5d0 \uc6cc\ud06c\ub85c\ub4dc\ub97c \ubd84\uc0b0\ud558\uba70, \uace0\uac00\uc6a9\uc131\uc744 \ubcf4\uc7a5\ud558\ub294 Django\uc640 Kubernetes\uc758 \uc0c1\ud638 \ubcf4\uc644\uc801\uc778 \uad00\uacc4\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubd05\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">Django<\/h2>\n<p>\ub192\uc740 \uc218\uc900\uc758 Python \uc6f9 \ud504\ub808\uc784\uc6cc\ud06c\uc778 Django \ud504\ub808\uc784\uc6cc\ud06c\ub294 \uc6f9 \uac1c\ubc1c \ubd84\uc57c\uc5d0\uc11c \ud6a8\uc728\uc131\uacfc \ub2e8\uc21c\uc131\uc758 \uc0c1\uc9d5\uc73c\ub85c \uc790\ub9ac \uc7a1\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ube60\ub974\uace0 \uac15\ub825\ud558\uba70 \uc720\uc9c0 \uad00\ub9ac\uac00 \ud3b8\ub9ac\ud55c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc81c\uc791\uc758 \ud544\uc694\uc5d0\uc11c \ud0c4\uc0dd\ud55c Django\ub294 \uac1c\ubc1c\uc790\uc640 \uc870\uc9c1\uc774 \uac00\uc7a5 \uc120\ud638\ud558\ub294 \ud504\ub808\uc784\uc6cc\ud06c\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Django\ub294 &#8216;\ubc30\ud130\ub9ac \ud3ec\ud568&#8217; \ucca0\ud559\uc744 \uae30\ubc18\uc73c\ub85c \uac1c\ubc1c \ud504\ub85c\uc138\uc2a4\ub97c \uc6a9\uc774\ud558\uac8c \ud558\ub294 \uad11\ubc94\uc704\ud55c \uae30\ubcf8 \ub3c4\uad6c, \ub77c\uc774\ube0c\ub7ec\ub9ac \ubc0f \uaddc\uce59\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. URL \ub77c\uc6b0\ud305, \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud1b5\ud569, \uc0ac\uc6a9\uc790 \uc778\uc99d\uacfc \uac19\uc740 \ubcf5\uc7a1\ud55c \uc791\uc5c5\uc744 \ub2e8\uc21c\ud654\ud558\uc5ec \uac1c\ubc1c\uc790\uac00 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ube4c\ub4dc\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n<p>Django\uc758 \ud070 \uc7a5\uc810 \uc911 \ud558\ub098\ub294 &#8216;\uc911\ubcf5 \uc81c\uac70'(DRY) \uc6d0\uce59\uc744 \uc900\uc218\ud558\uc5ec \uc911\ubcf5\uc774 \uc904\uace0 \ucf54\ub4dc \uc720\uc9c0 \uad00\ub9ac\uac00 \uac04\ud3b8\ud558\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4. \ub610\ud55c \ubaa8\ub378-\ubdf0-\ucee8\ud2b8\ub864\ub7ec(MVC) \uc544\ud0a4\ud14d\ucc98 \ud328\ud134\uc744 \ub530\ub974\uae30 \ub54c\ubb38\uc5d0 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uccb4\uacc4\uc801\uc73c\ub85c \uc27d\uac8c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Django\ub294 \ubcf4\uc548\uc744 \uc6b0\uc120\uc2dc\ud558\uae30 \ub54c\ubb38\uc5d0 \uc77c\ubc18\uc801\uc778 \uc6f9 \ucde8\uc57d\uc131\ub3c4 \ub35c \ubc1c\uc0dd\ud569\ub2c8\ub2e4. \uc774 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\ub294 \uad50\ucc28 \uc0ac\uc774\ud2b8 \uc2a4\ud06c\ub9bd\ud305(XSS) \ubc0f \uad50\ucc28 \uc0ac\uc774\ud2b8 \uc694\uccad \uc704\uc870(CSRF) \ubcf4\ud638 \uae30\ub2a5\uc774 \uae30\ubcf8\uc73c\ub85c \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ucc98\ub7fc \uc18d\ub3c4, \ub2e8\uc21c\uc131, \ubcf4\uc548\uc758 \uac15\ub825\ud55c \uc870\ud569\uc744 \uc81c\uacf5\ud558\ub294 Django\ub294 \ucd5c\uc18c\ud55c\uc758 \ub178\ub825\uc73c\ub85c \uac15\ub825\ud558\uace0 \uae30\ub2a5\uc774 \ud48d\ubd80\ud55c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4e4\ub824\ub294 \uac1c\ubc1c\uc790\uc5d0\uac8c \uc774\uc0c1\uc801\uc785\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">\ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130<\/h2>\n<p>\ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130\ub294 \ucee8\ud14c\uc774\ub108\ud654\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubc30\ud3ec, \ud655\uc7a5 \ubc0f \uc6b4\uc601\uc744 \uad00\ub9ac\ud558\uace0 \uc790\ub3d9\ud654\ud558\ub294 \ub370 \ud544\uc218\uc801\uc778 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc2dc\uc7a5\uc5d0\ub294 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130\uac00 \uc788\uc73c\uba70, \uadf8 \uc911 \uac00\uc7a5 \uc778\uae30 \uc788\ub294 \uac83\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p>1. \ucd5c\uace0\uc758 \uc624\ud508 \uc18c\uc2a4 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \ud50c\ub7ab\ud3fc\uc778 <strong>Kubernetes<\/strong>\ub294 \ucee8\ud14c\uc774\ub108\ud654\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucc98\ub9ac\ub97c \uc704\ud55c \uac15\ub825\ud55c \uc801\uc751\ud615 \ud658\uacbd\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ud655\uc7a5, \ub85c\ub4dc \ubc38\ub7f0\uc2f1, \ucee8\ud14c\uc774\ub108 \uc0c1\ud0dc \ud655\uc778\uacfc \uac19\uc740 \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud558\uace0 \uad11\ubc94\uc704\ud55c \ud655\uc7a5 \ud504\ub85c\uadf8\ub7a8 \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>2. <strong>Docker Swarm<\/strong>\uc740 Docker\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc194\ub8e8\uc158\uc785\ub2c8\ub2e4. \uc124\uc815\uacfc \uc0ac\uc6a9\uc774 \uac04\ud3b8\ud558\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc73c\uba70, Docker\uc640 \ub3d9\uc77c\ud55c \uba85\ub839\uc904 \uc778\ud130\ud398\uc774\uc2a4 \ubc0f API\ub97c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uc774\ubbf8 Docker\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \uc18c\uaddc\ubaa8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774\ub098 \uc870\uc9c1\uc5d0 \uc801\ud569\ud569\ub2c8\ub2e4.<\/p>\n<p>3. <strong>OpenShift<\/strong>\ub294 Red Hat\uc5d0\uc11c \uac1c\ubc1c\ud55c \uc5d4\ud130\ud504\ub77c\uc774\uc988 Kubernetes \ud50c\ub7ab\ud3fc\uc785\ub2c8\ub2e4. Kubernetes\ub97c \uae30\ubc18\uc73c\ub85c \uac1c\ubc1c \ubc0f \uc6b4\uc601 \ub3c4\uad6c\ub97c \ucd94\uac00\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ud654\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubc30\ud3ec \ubc0f \uad00\ub9ac\ub97c \ub2e8\uc21c\ud654\ud569\ub2c8\ub2e4.<\/p>\n<p>4. HashiCorp\uc5d0\uc11c \uac1c\ubc1c\ud55c <strong>Nomad<\/strong>\ub294 \ucee8\ud14c\uc774\ub108\uc640 \ucee8\ud14c\uc774\ub108\ud654\ub418\uc9c0 \uc54a\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uac00\ubccd\uace0 \uc0ac\uc6a9\uc790 \uce5c\ud654\uc801\uc778 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130\uc785\ub2c8\ub2e4.<\/p>\n<p>5. <strong>Apache Mesos<\/strong>\ub294 \uc624\ud508 \uc18c\uc2a4 \ubd84\uc0b0\ud615 \uc2dc\uc2a4\ud15c \ucee4\ub110\uc774\uba70, DC\/OS(\ub370\uc774\ud130 \uc13c\ud130 \uc6b4\uc601 \uccb4\uc81c)\ub294 Mesos\ub97c \uae30\ubc18\uc73c\ub85c \uad6c\ucd95\ub41c \uc5d4\ud130\ud504\ub77c\uc774\uc988\uae09 \ud50c\ub7ab\ud3fc\uc785\ub2c8\ub2e4. DC\/OS\ub294 \ucee8\ud14c\uc774\ub108\ud654\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad00\ub9ac\ud558\uace0 \ud655\uc7a5\ud558\uae30 \uc704\ud55c \ucd94\uac00 \uae30\ub2a5\uc73c\ub85c Mesos\ub97c \ud655\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc18c\ud504\ud2b8\uc6e8\uc5b4 \ud300\uc740 \uc8fc\ub85c AWS, Google Cloud Platform, Azure \ub4f1 \uc798 \uc54c\ub824\uc9c4 \ud074\ub77c\uc6b0\ub4dc \uacf5\uae09\uc790\uac00 \uc81c\uacf5\ud558\ub294 \uad00\ub9ac\ud615 \ud50c\ub7ab\ud3fc\uc73c\ub85c \uc791\uc5c5\ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ud074\ub77c\uc6b0\ub4dc \uacf5\uae09\uc790\ub294 \ubaa8\ub450 \uad00\ub9ac\ud615 Kubernetes \uc194\ub8e8\uc158\uc778 Amazon EKS, Google GKE, Azure AKS\uc640 \uac19\uc740 \uc11c\ube44\uc2a4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc11c\ube44\uc2a4\ub294 Kubernetes \ud074\ub7ec\uc2a4\ud130\uc758 \uc124\uc815, \ud655\uc7a5 \ubc0f \uad00\ub9ac\ub97c \uac04\uc18c\ud654\ud558\uace0 \uac01 \ud074\ub77c\uc6b0\ub4dc \ud658\uacbd\uacfc \uc6d0\ud65c\ud558\uac8c \ud1b5\ud569\ud558\uc5ec \ud6a8\uc728\uc801\uc778 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \ubc0f \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ubc30\ud3ec\ub97c \ubcf4\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">PyCharm\uc5d0\uc11c Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9cc\ub4e4\uae30<\/h2>\n<p>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc5d0\uc11c\ub294 \uc791\uc740 Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc0dd\uc131\ud558\ub294 \uac83\uc73c\ub85c \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ucee8\ud14c\uc774\ub108\ud654\ud558\uace0 \ub9c8\uc9c0\ub9c9 \ub2e8\uacc4\uc5d0\uc11c Docker Desktop\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub85c\uceec Kubernetes \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Django \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ucc98\uc74c \uc0ac\uc6a9\ud558\uc9c0\ub9cc \ucc98\uc74c\ubd80\ud130 Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4e4\uace0 \uc2f6\ub2e4\uba74 \uc774 \ube14\ub85c\uadf8 <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/04\/create-a-django-app-in-pycharm\/\">\uac8c\uc2dc\ubb3c<\/a>\uc744 \uc77d\uc5b4\ubcf4\uc138\uc694.<\/p>\n<p>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc5d0 \uc0ac\uc6a9\ub41c \uc18c\uc2a4 \ucf54\ub4dc\ub294 <a href=\"https:\/\/github.com\/mukulmantosh\/django-kubernetes\" target=\"_blank\" rel=\"noopener\">\uc5ec\uae30<\/a>\uc5d0\uc11c \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc9c0\uae08\ubd80\ud130 <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/04\/create-a-django-app-in-pycharm\/\">PyCharm\uc5d0\uc11c \uc0c8 Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/a>\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/ko-kr\/pycharm\/web-development\/django\/\" target=\"\" rel=\"noopener\">PyCharm Pro \ubb34\ub8cc\ub85c \uc0ac\uc6a9\ud574 \ubcf4\uae30<\/a><\/div>\n<\/div>\n<p>\ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud558\ub824\uba74 PyCharm\uc744 \uc2dc\uc791\ud558\uace0 <strong>New Project(\uc0c8 \ud504\ub85c\uc81d\ud2b8)<\/strong>\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4. PyCharm\uc774 \uc774\ubbf8 \uc2e4\ud589 \uc911\uc778 \uacbd\uc6b0 <strong>File(\ud30c\uc77c) | New Project<\/strong>\ub97c \uc120\ud0dd\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<p>\ud504\ub85c\uc81d\ud2b8 \uc774\ub984, \uc704\uce58 \ubc0f \uc778\ud130\ud504\ub9ac\ud130 \uc720\ud615\uacfc \uac19\uc740 \ud544\uc218 \uc138\ubd80 \uc815\ubcf4\ub97c \uc785\ub825\ud558\uace0 <a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\" target=\"_blank\" rel=\"noopener\">venv<\/a> \ub610\ub294 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ud658\uacbd\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/1y08c3RPd7rqmf5qxcZfrWrzDAekMhwhPIWRa10ipnziCXebOqe8WsMfTXG55efz48CBi5eF_zg7clWjfrHI843CGaueY1wwvBZ0qeei_umc2hAPhLtfuEh0DdLF3NKoSW2iPGbpUCtsEzlF5NKUj0o.png\" width=\"624\" height=\"465\" \/><\/p>\n<p>\uadf8\ub7f0 \ub2e4\uc74c <strong>Create(\uc0dd\uc131)<\/strong>\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud504\ub85c\uc81d\ud2b8\ub97c \uc124\uc815\ud558\uace0 \uac00\uc0c1 \ud658\uacbd\uc744 \uc0dd\uc131\ud558\uba74 PyCharm\uc774 \ubb34\uac70\uc6b4 \uc791\uc5c5\uc744 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/odWqcTk4mIote11wJzVTV42umN0Ffu_aSMfv9RRVQs2V9BYcL9_q6dSz-e56unGs-HkDc5GrogOvGqDWJNS3FgYOG7MFAcrXAa6U54Fca1nd9aXo8MjUye5_42sEXIb11rTKyiCAWQWPehKrBeyVMT4.png\" width=\"624\" height=\"351\" \/><\/p>\n<h3 class=\"wp-block-heading\">Gunicorn<\/h3>\n<p>\ud504\ub85c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uba74 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 Python \uc6f9 \uc11c\ubc84 \uac8c\uc774\ud2b8\uc6e8\uc774 \uc778\ud130\ud398\uc774\uc2a4(WSGI) HTTP \uc11c\ubc84\uc778 <a href=\"https:\/\/gunicorn.org\/\" target=\"_blank\" rel=\"noopener\">Gunicorn<\/a>\uc744 \uc124\uce58\ud569\ub2c8\ub2e4. Gunicorn\uc740 Python \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc81c\uacf5\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 \ud504\ub9ac \ud3ec\ud06c \uc6cc\ucee4 \ubaa8\ub378 \uc6f9 \uc11c\ubc84\ub85c, Django, Flask \ub4f1\uc758 \uc6f9 \ud504\ub808\uc784\uc6cc\ud06c\uc640 \ud568\uaed8 \uc0ac\uc6a9\ub418\uc5b4 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubc30\ud3ec\ud558\uace0 \uc778\ud130\ub137\uc744 \ud1b5\ud574 \uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n<p><strong>Python Packages(Python \ud328\ud0a4\uc9c0)<\/strong> \ub3c4\uad6c \ucc3d\uc5d0\uc11c\ub294 \ud604\uc7ac \uc120\ud0dd\ud55c Python \uc778\ud130\ud504\ub9ac\ud130\uc6a9 \ud328\ud0a4\uc9c0\ub97c \uac00\uc7a5 \ube60\ub974\uace0 \uc27d\uac8c \ubbf8\ub9ac \ubcf4\uace0 \uc124\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ub3c4\uad6c \ucc3d\uc740 <strong>View(\ubcf4\uae30) | Tool Windows(\ub3c4\uad6c \ucc3d) | Python Packages<\/strong>\ub97c \ud1b5\ud574 \uc5f4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/srzllJqDAcLfQmEuJcLcizPVMAGYJGJ4Y5YnAXyT35Q0ntHxXgZgWu0bkviI6RgnVJAyQltuEnmFqnR0nyTtdaJ3oBJc9ofrEnG0HmzsfXz-_kBMiMGb_YzPBJ_pyMtP-RWRBUBGtUihUPKW4CBQPi8.png\" width=\"624\" height=\"187\" \/><\/p>\n<h3 class=\"wp-block-heading\">Psycopg 2<\/h3>\n<p><a href=\"https:\/\/www.psycopg.org\/docs\/\" target=\"_blank\" rel=\"noopener\">Psycopg 2<\/a>\ub294 PostgreSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc5f0\uacb0\ud558\uace0 \uc774\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 Python \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4. \uac00\uc7a5 \ub110\ub9ac \uc0ac\uc6a9\ub418\ub294 \uc624\ud508 \uc18c\uc2a4 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uad00\ub9ac \uc2dc\uc2a4\ud15c \uc911 \ud558\ub098\uc778 PostgreSQL \uc791\uc5c5\uc744 \uc704\ud55c Python \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. Python \uac1c\ubc1c\uc790\ub294 Psycopg 2\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130 \uc0bd\uc785, \uc5c5\ub370\uc774\ud2b8, \uac80\uc0c9\uc740 \ubb3c\ub860 SQL \ucffc\ub9ac \uc2e4\ud589, Python \ud504\ub85c\uadf8\ub7a8 \ub0b4\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\uacb0 \uad00\ub9ac\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-452825\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/image-7.png\" alt=\"\" width=\"1273\" height=\"455\" \/><\/figure>\n<p><code>psycopg2<\/code>\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0, macOS\uc5d0\uc11c\ub294 <code>brew install libpq<\/code>\ub97c, Linux\uc5d0\uc11c\ub294 <code>apt-get install libpq-dev<\/code>\ub97c \uc2e4\ud589\ud558\uc5ec \uc2dc\uc2a4\ud15c \uc218\uc900 \uc885\uc18d\uc131\uc744 \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\ucc38\uc870: <a href=\"https:\/\/www.postgresql.org\/docs\/16\/libpq.html\" target=\"_blank\" rel=\"noopener\">postgresql.org\/docs\/16\/libpq.html<\/a><\/p>\n<p><code>libpq<\/code>\ub294 PostgreSQL\uc6a9 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4. \ud074\ub77c\uc774\uc5b8\ud2b8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 PostgreSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc11c\ubc84\ub97c \uc5f0\uacb0 \ubc0f \uad00\ub9ac\ud558\uace0 \uc774\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ub370 \ud544\uc694\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 C \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4.<\/p>\n<p>\ud2b9\uc815 \uc218\uc815\uc744 \uc644\ub8cc\ud55c \ud6c4 <code>settings.py<\/code> \ub0b4\uc5d0\uc11c <code>DATABASES<\/code> \uad00\ub828 \uc139\uc158\uc744 \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/qpVWdOZBeTsiOkfJIMn4VybYiIS99u_XxR5_6yYhbLNNI3WpMUwmHTk2g7oaQ1o03GXdY7Y23TtHzNM6ht9-onbAVwvPZ06qgVoIAlpuJjddtuHWJhtr9DO3R8I4PHKCM8vBHvPut02m_k6m_vfQ2uc.png\" width=\"624\" height=\"220\" \/><\/p>\n<p>\ud56d\uc0c1 \ud658\uacbd \ubcc0\uc218\ub97c \ud1b5\ud574 \ube44\ubc00 \uc790\uaca9 \uc99d\uba85\uc744 \uc804\ub2ec\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">STATIC_ROOT<\/h3>\n<p>Django\uc5d0\uc11c <code>STATIC_ROOT<\/code>\ub294 <code>collectstatic<\/code> \uad00\ub9ac \uba85\ub839\uc744 \uc2e4\ud589\ud560 \ub54c \uc218\uc9d1\ub41c \uc815\uc801 \ud30c\uc77c\uc774 \uc800\uc7a5\ub420 \uc808\ub300 \ud30c\uc77c \uc2dc\uc2a4\ud15c \uacbd\ub85c\ub97c \uc9c0\uc815\ud558\uae30 \uc704\ud55c \uad6c\uc131 \uc124\uc815\uc785\ub2c8\ub2e4. \uc815\uc801 \ud30c\uc77c\uc5d0\ub294 \uc77c\ubc18\uc801\uc73c\ub85c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 CSS, JavaScript, \uc774\ubbf8\uc9c0 \ubc0f \uae30\ud0c0 \uc560\uc14b\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4. <code>STATIC_ROOT<\/code> \uc124\uc815\uc740 \ud504\ub85c\ub355\uc158 \ud658\uacbd\uc5d0\uc11c \uc815\uc801 \ud30c\uc77c\uc744 \uc81c\uacf5\ud558\ub294 \ub370 \ud544\uc218\uc801\uc778 \ubd80\ubd84\uc785\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/D-VP39aKKQITKIi2IG_T6hBWEvUCDzTaLfbrDofs-JlOHmFP51Vl2QYH6dmpufWRhgUTPoOtmyKBj155vIGL8DqWyiR79W3NdiYibTb228Yx2Tj0pwC5bPd5F6BCtbMbTvfKHJ6lDYBlmbLqv1jUmoA.png\" width=\"624\" height=\"323\" \/><\/p>\n<p>127\uc904\uc5d0\uc11c <code>STATIC_ROOT<\/code>\uc5d0 \ub300\ud55c \ud658\uacbd \ubcc0\uc218\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. \uc774 \ubcc0\uc218\ub294 Kubernetes \uc601\uad6c \ubcfc\ub968\uc73c\ub85c \uc5f0\uacb0\ub418\ub294 \ud30c\uc77c \uacbd\ub85c\ub97c \uac00\ub9ac\ud0b5\ub2c8\ub2e4. \uc774 \uc124\uc815\uc744 \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc740 \ub098\uc911\uc5d0 \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc815\uc801 \ud30c\uc77c\uc744 \uc218\uc9d1\ud558\ub824\uba74 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p><code>python manage.py collectstatic<\/code><\/p>\n<p>\uc774 \uba85\ub839\uc5b4\ub294 \uc815\uc801 \ud30c\uc77c\uc744 \uc218\uc9d1\ud558\uc5ec <code>STATIC_ROOT<\/code> \ub514\ub809\ud130\ub9ac\uc5d0 \ubc30\uce58\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c \ud504\ub85c\ub355\uc158 \ud658\uacbd\uc5d0 \ub354 \ud6a8\uc728\uc801\uc778 \uc811\uadfc \ubc29\uc2dd\uc778 NGINX \ub610\ub294 Apache \uc6f9 \uc11c\ubc84\ub97c \ud1b5\ud574 \uc774\ub7ec\ud55c \uc560\uc14b\uc744 \uc9c1\uc811 \uc81c\uacf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">Dockerfile<\/h3>\n<p>Dockerfile\uc740 Docker \uc774\ubbf8\uc9c0\ub97c \uad6c\uc131\ud558\uae30 \uc704\ud55c \uc9c0\uc2dc\ubb38\uc774 \ud3ec\ud568\ub41c \uac04\ub2e8\ud55c \ud14d\uc2a4\ud2b8 \ubb38\uc11c\uc785\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-452658\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/image-4.png\" alt=\"\" width=\"1600\" height=\"636\" \/><\/figure>\n<p>1. <strong><code>FROM python:3.11<\/code><\/strong>: \uc774 \uc904\uc740 Docker Hub\uc758 \uacf5\uc2dd Python 3.11 \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\uc5ec Docker \uc774\ubbf8\uc9c0\uc758 \uae30\ubcf8 \uc774\ubbf8\uc9c0\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \uc774\ubbf8 Python\uc774 \uc0ac\uc804 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \uc774 \uae30\ubcf8 \uc774\ubbf8\uc9c0 \uc704\uc5d0 \ube4c\ub4dc\ub418\uace0 \uc2e4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<p>2. <strong><code>ENV PYTHONUNBUFFERED 1<\/code><\/strong>: \uc774 \uc904\uc740 \ud658\uacbd \ubcc0\uc218 <code>PYTHONUNBUFFERED<\/code>\ub97c <code>1<\/code>\ub85c \uc124\uc815\ud569\ub2c8\ub2e4. Python\uc774 \ucd9c\ub825\uc744 \ubc84\ud37c\ub9c1\ud558\uc9c0 \uc54a\ub3c4\ub85d \ud558\uae30 \uc704\ud574 Docker \ucee8\ud14c\uc774\ub108 \ub0b4\uc5d0\uc11c Python\uc744 \uc2e4\ud589\ud560 \ub54c \uc774 \ud658\uacbd \ubcc0\uc218\ub97c \uc124\uc815\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc2e4\uc2dc\uac04 \ub85c\uadf8\uc640 \ub514\ubc84\uadf8 \uc815\ubcf4\ub97c \uc5bb\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<p>3. <strong><code>WORKDIR \/app<\/code><\/strong>: \uc774 \uc904\uc740 Docker \ucee8\ud14c\uc774\ub108 \ub0b4\uc758 \uc791\uc5c5 \ub514\ub809\ud130\ub9ac\ub97c <code>\/app<\/code>\uc73c\ub85c \uc124\uc815\ud569\ub2c8\ub2e4. \uc774\ud6c4\uc758 \ubaa8\ub4e0 \uba85\ub839\uc5b4\ub294 \uc774 \ub514\ub809\ud130\ub9ac\uc5d0\uc11c \uc2e4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<p>4. <strong><code>COPY . \/app<\/code><\/strong>: \uc774 \uc904\uc740 \ud604\uc7ac \ub514\ub809\ud130\ub9ac(Dockerfile\uc774 \uc788\ub294 \ub514\ub809\ud130\ub9ac)\uc758 \ub0b4\uc6a9\uc744 \ucee8\ud14c\uc774\ub108 \ub0b4\uc758 <code>\/app<\/code> \ub514\ub809\ud130\ub9ac\uc5d0 \ubcf5\uc0ac\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucf54\ub4dc\uc640 Docker \uc774\ubbf8\uc9c0\uc5d0 \ud544\uc694\ud55c \ubaa8\ub4e0 \ud30c\uc77c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4.<\/p>\n<p>5. <strong><code>RUN pip install -r requirements.txt<\/code><\/strong>: \uc774 \uc904\uc740 <code>\/app<\/code> \ub514\ub809\ud130\ub9ac\uc5d0 \uc788\ub294 <code>requirements.txt<\/code> \ud30c\uc77c\uc5d0 \ub098\uc5f4\ub41c Python \uc885\uc18d\uc131\uc744 \uc124\uce58\ud558\uae30 \uc704\ud574 <code>pip install <\/code> \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. Python \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \ud754\ud788 \uc0ac\uc6a9\ub418\ub294 \ubc29\uc2dd\uc73c\ub85c, \uc774\ub97c \ud1b5\ud574 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc885\uc18d\uc131\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>6. <strong><code>EXPOSE 8000<\/code><\/strong>: \uc774 \uc904\uc740 \ucee8\ud14c\uc774\ub108\uac00 \ud3ec\ud2b8 8000\uc5d0\uc11c \uc218\uc2e0 \ub300\uae30 \uc911\uc784\uc744 Docker\uc5d0 \uc54c\ub9bd\ub2c8\ub2e4. \uc2e4\uc81c\ub85c \ud3ec\ud2b8\ub97c \uacf5\uac1c\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4. \ucee8\ud14c\uc774\ub108\uac00 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ud2b8\ub97c \ub098\ud0c0\ub0b4\ub294 \uba54\ud0c0\ub370\uc774\ud130 \uc120\uc5b8\uc785\ub2c8\ub2e4.<\/p>\n<p>7. <strong><code>CMD [\u201cgunicorn\u201d, \u201cdjango_kubernetes_tutorial.wsgi:application\u201d, \u201c--bind\u201d, \u201c0.0.0.0:8000\u201d]<\/code><\/strong>: \uc774 \uc904\uc740 \ucee8\ud14c\uc774\ub108 \uc2dc\uc791 \uc2dc \uc2e4\ud589\ud560 \uae30\ubcf8 \uba85\ub839\uc5b4\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4. Gunicorn\uc744 \uc0ac\uc6a9\ud558\uc5ec Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc81c\uacf5\ud558\uace0, <code>django_kubernetes_tutorial.wsgi:application<\/code>\uc5d0 \uc815\uc758\ub41c WSGI \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud3ec\ud2b8 8000\uc744 \ud1b5\ud574 \ubaa8\ub4e0 \ub124\ud2b8\uc6cc\ud06c \uc778\ud130\ud398\uc774\uc2a4(<code>0.0.0.0<\/code>)\uc5d0\uc11c \uc218\uc2e0 \ub300\uae30\ud558\ub3c4\ub85d Gunicorn\uc744 \ubc14\uc778\ub529\ud569\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">DockerHub<\/h3>\n<p><a href=\"http:\/\/hub.docker.com\" target=\"_blank\" rel=\"noopener\">hub.docker.com<\/a>\uc744 \ubc29\ubb38\ud558\uc5ec \ud50c\ub7ab\ud3fc\uc5d0 \ub85c\uadf8\uc778\ud558\uac70\ub098 \uac00\uc785\ud569\ub2c8\ub2e4.<\/p>\n<p><strong>Create repository(\uc800\uc7a5\uc18c \uc0dd\uc131)<\/strong>\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/j6njSAI3cnn1FeazOY-aKjKXXZPQXnTi7tzWC4hK2-FSZ-oUj3vz3oc2yOYFsGyvWbKZZ9B3nAMOLAA4r68yN6GEJFjsGccTMvWW1ph26pXKCpcPkzJjLwBJMC5J_kUXiKVzlSg6ZatV5tol2QXjlnw.png\" width=\"624\" height=\"432\" \/><\/p>\n<p>\ub2e4\uc74c\uc73c\ub85c \uc800\uc7a5\uc18c \uc774\ub984\uc744 \uc785\ub825\ud558\uace0 \uac00\uc2dc\uc131\uc744 public\uc73c\ub85c \uc124\uc815\ud569\ub2c8\ub2e4. \ubbfc\uac10\ud55c \uc815\ubcf4\ub098 \uae30\ubc00 \uc815\ubcf4\ub85c \uc791\uc5c5\ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 \uac00\uc2dc\uc131\uc744 <strong>private<\/strong>\uc73c\ub85c \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/Vj1dqmm0ro7S-McOV4FwMNyc2sWoZ-mVmiD0TbptoeAyK44vbSvJIXcRrvcUxcw_CxPtt_Q3R0VTzkLlpuEUdKiM9Po1ZGbTwZFfJgo7yCkRV2Vzjck_q52H4lUcABbHLOE0FvdDZagx1dvHveEkvgc.png\" width=\"624\" height=\"453\" \/><\/p>\n<p>\uc800\uc7a5\uc18c\uac00 \uc0dd\uc131\ub418\uba74 Docker \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud55c \ub2e4\uc74c \uc774\ubbf8\uc9c0\ub97c \ub808\uc9c0\uc2a4\ud2b8\ub9ac\uc5d0 \ud478\uc2dc\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uc5ec <code>requirements.txt<\/code> \ud30c\uc77c\uc774 \ucd5c\uc2e0 \uc0c1\ud0dc\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<p><code>pip freeze &gt; requirements.txt<\/code><\/p>\n<p>\uc774\ubbf8\uc9c0\ub97c \uad6c\uc131\ud558\ub824\uba74 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p><code>docker build -t mukulmantosh\/django-kubernetes:1.0 .<\/code><\/p>\n<p><code>docker build -t \/django-kubernetes:1.0 .<\/code><\/p>\n<p>\uc774 \uba85\ub839\uc5b4\ub294 \ud2b9\uc815 \uc0c1\ud669\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9c8 \uc218 \uc788\uc73c\uba70 \uac1c\uc778 \uc0ac\uc6a9\uc790 \uc774\ub984\uc744 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7f0 \ub2e4\uc74c \uc774\ubbf8\uc9c0\ub97c \ub808\uc9c0\uc2a4\ud2b8\ub9ac\uc5d0 \ud478\uc2dc\ud558\ub824\uba74 Docker Hub\ub85c \uc778\uc99d\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\ud130\ubbf8\ub110\uc5d0 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<p><code>docker login<\/code><\/p>\n<p>\uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud569\ub2c8\ub2e4. \uc778\uc99d\uc5d0 \uc131\uacf5\ud558\uba74 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec \uc774\ubbf8\uc9c0\ub97c \ud478\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>docker push mukulmantosh\/django-kubernetes:1.0\u00a0<\/code><\/p>\n<p><code>docker push \/django-kubernetes:1.0\u00a0<\/code><\/p>\n<p>\uc774\ubbf8\uc9c0\uac00 \uc131\uacf5\uc801\uc73c\ub85c \ud478\uc2dc\ub418\uba74 Docker Hub\uc5d0\uc11c \ubcc0\uacbd \uc0ac\ud56d\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/R5Dsklfxw_4yJZDE5-Sqg7sA5hsK6Ss_xuqoZMcrsWyLEMHz2Cn7CxrAxMDpD44HfIMihudAfwQope_6FpIXHqgYlgrrGg1bSuYgoJr9nxDpJCzQyQHQatqOpW-R-nywAhkz8FWNyCa0zVy9CX_fLwo.png\" width=\"624\" height=\"239\" \/><\/p>\n<p>\ub354 \uc774\uc0c1 \ub808\uc9c0\uc2a4\ud2b8\ub9ac\uc5d0 \uc774\ubbf8\uc9c0\ub97c \ud478\uc2dc\ud560 \uacc4\ud68d\uc774 \uc5c6\ub2e4\uba74, \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uc5ec \ub85c\uadf8\uc544\uc6c3\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>docker logout<\/code><\/p>\n<p>\uc774 \uc774\ubbf8\uc9c0\ub97c \ub85c\uceec\ub85c \uac00\uc838\uc624\uace0 \uc2f6\ub2e4\uba74 <a href=\"https:\/\/hub.docker.com\/r\/mukulmantosh\/django-kubernetes\" target=\"_blank\" rel=\"noopener\">hub.docker.com\/r\/mukulmantosh\/django-kubernetes<\/a>\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">Kubernetes \uad6c\uc131: YAML \ud30c\uc77c \uc791\uc131<\/h2>\n<p><strong>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc758 \uc774 \uc139\uc158\uc5d0\uc11c\ub294 \ub85c\uceec Kubernetes \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubc30\ud3ec\ud558\ub294 \ubc29\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.<\/strong><\/p>\n<p>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc5d0\uc11c\ub294 Docker Desktop\uc744 \uc0ac\uc6a9\ud558\uc9c0\ub9cc, Minikube\ub098 Kind\ub97c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\ub124\uc784\uc2a4\ud398\uc774\uc2a4<\/h3>\n<p>Kubernetes\uc5d0\uc11c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/overview\/working-with-objects\/namespaces\/\" target=\"_blank\" rel=\"noopener\">\ub124\uc784\uc2a4\ud398\uc774\uc2a4<\/a>\ub294 \ub9ac\uc18c\uc2a4\uc640 \uac1d\uccb4\ub97c \uadf8\ub8f9\ud654\ud558\uace0 \uaca9\ub9ac\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 \ud074\ub7ec\uc2a4\ud130 \ub0b4\uc758 \uac00\uc0c1 \ud30c\ud2f0\uc158\uc785\ub2c8\ub2e4. \uc774\ub294 \ub2e8\uc77c \ubb3c\ub9ac\uc801 \ud074\ub7ec\uc2a4\ud130 \ub0b4\uc5d0 \uc5ec\ub7ec \uac1c\uc758 \uac00\uc0c1 \ud074\ub7ec\uc2a4\ud130\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub294 Kubernetes \uba85\ub839\uc904 \ub3c4\uad6c\uc778 <code><a href=\"https:\/\/kubernetes.io\/docs\/reference\/kubectl\/\" target=\"_blank\" rel=\"noopener\">kubectl<\/a><\/code>\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc0dd\uc131 \ubc0f \uad00\ub9ac\ud560 \uc218 \uc788\uc73c\uba70, \ub9ac\uc18c\uc2a4\ub97c \ubc30\ud3ec\ud560 \ub54c YAML \ub9e4\ub2c8\ud398\uc2a4\ud2b8\uc5d0\uc11c \uc815\uc758\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>Kubernetes\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud55c \uae30\ubcf8 \ud50c\ub7ab\ud3fc\uc73c\ub85c Docker Desktop\uc744 \uc120\ud0dd\ud55c \uacbd\uc6b0, \uc124\uc815\uc5d0\uc11c <strong>Enable Kubernetes(Kubernetes \ud65c\uc131\ud654)<\/strong> \uccb4\ud06c\ubc15\uc2a4\ub97c \ud074\ub9ad\ud558\uc5ec Kubernetes\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/945ORpQLrnTDqbNfZTK-1A8KjfxdrWZCocP992yiPSNgv57t-GLr5RvRV7I5TJurmuVDW24Xm-i7c4eBIC7gV4UrhJJb9PKhEhuqHJmWvpG87mCgema7ZiXljFZ-6-Qxp4aOmvzRr1vjzcpDUJTkf6E.png\" width=\"624\" height=\"368\" \/><\/p>\n<p>\ud130\ubbf8\ub110\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uc5ec \ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<p><code>kubectl create ns django-app<\/code><\/p>\n<h2 class=\"wp-block-heading\">K8s\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubc30\ud3ec<\/h2>\n<p>\uba3c\uc800, \ub85c\uceec \ud658\uacbd\uc758 Kubernetes \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c PostgreSQL \uc778\uc2a4\ud134\uc2a4\ub97c \uc124\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">PersistentVolume<\/h3>\n<p>Kubernetes\uc5d0\uc11c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/\" target=\"_blank\" rel=\"noopener\">\uc601\uad6c \ubcfc\ub968<\/a>(PV)\uc740 \uad00\ub9ac\uc790\uac00 \ud504\ub85c\ube44\uc800\ub2dd\ud55c \ud074\ub7ec\uc2a4\ud130\uc758 \uc2a4\ud1a0\ub9ac\uc9c0 \uc870\uac01\uc785\ub2c8\ub2e4. PV\ub294 pod\uc758 \uc218\uba85 \uc8fc\uae30\uc640 \ub3c5\ub9bd\uc801\uc778 \ubc29\uc2dd\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uc5ec \uc2a4\ud1a0\ub9ac\uc9c0 \ub9ac\uc18c\uc2a4\ub97c \ubcf4\ub2e4 \ubd84\ub9ac\ub418\uace0 \uc720\uc5f0\ud55c \ubc29\uc2dd\uc73c\ub85c \uad00\ub9ac\ud558\uace0 \ucd94\uc0c1\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, \ub370\uc774\ud130\ub97c \uc0ac\uc6a9\ud558\ub294 pod\uac00 \uc0ad\uc81c\ub418\uac70\ub098 \ud074\ub7ec\uc2a4\ud130\uc758 \ub2e4\ub978 \ub178\ub4dc\ub85c \uc77c\uc815 \ubcc0\uacbd\ub418\ub354\ub77c\ub3c4 \ub370\uc774\ud130\uac00 \uc9c0\uc18d\uc801\uc73c\ub85c \uc720\uc9c0\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc601\uad6c \ubcfc\ub968\uc744 \ub9cc\ub4e4\uace0 \uc774\ub984\uc744 <code>pv.yml<\/code>\ub85c \uc9c0\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/7ad-L7W-VSSsV1aouIP2RqA7mHcjvr9TwzQPSbqKtg5ED_ZQigyZzVmqyM7XeEp343xKGKvQpdOUHTrHloOCsWgP5ufp_q43LK97-2gozI6AZ5iXA1b5aiI8yyvFbVYHxKzFMjwYfX4ELEbuZvUOUWM.png\" width=\"624\" height=\"631\" \/><\/p>\n<p>\uc774 YAML \uad6c\uc131\uc740 <code>postgres-pv<\/code>\ub77c\ub294 PersistentVolume \ub9ac\uc18c\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \uc774 \ub9ac\uc18c\uc2a4\ub294 1GB \uc6a9\ub7c9\uc5d0 <code>ReadWriteOnce<\/code> \uc561\uc138\uc2a4 \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub9c8\uc6b4\ud2b8\ub418\uba70, <code>\/data\/db<\/code>\uc5d0 \uc788\ub294 \ub178\ub4dc\uc758 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc5d0\uc11c \ub85c\uceec \uacbd\ub85c\ub97c \ud1b5\ud574 \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc774 PV\ub294 \ub178\ub4dc\uc758 \ud30c\uc77c \uc2dc\uc2a4\ud15c \ub0b4 \ub514\ub809\ud130\ub9ac\uc5d0 \uc561\uc138\uc2a4\ud574\uc57c \ud558\ub294 pod\uc5d0 \uc601\uad6c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 \ub370 \uc0ac\uc6a9\ub420 \uc218 \uc788\uc73c\uba70, PostgreSQL \ub610\ub294 \uc601\uad6c \uc2a4\ud1a0\ub9ac\uc9c0\uac00 \ud544\uc694\ud55c \uae30\ud0c0 \uc2a4\ud14c\uc774\ud2b8\ud480 \uc11c\ube44\uc2a4\uc640 \uac19\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \uc801\ud569\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud504\ub85c\ub355\uc158\uc758 \uacbd\uc6b0, AWS RDS \ub610\ub294 Google CloudSQL\uacfc \uac19\uc740 \ud074\ub77c\uc6b0\ub4dc \uc194\ub8e8\uc158\uc744 \uc0ac\uc6a9\ud558\uac70\ub098 Kubernetes <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/statefulset\/\" target=\"_blank\" rel=\"noopener\">StatefulSets<\/a>\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">PersistentVolumeClaim<\/h3>\n<p>Kubernetes\uc5d0\uc11c <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-persistent-volume-storage\/#create-a-persistentvolumeclaim\" target=\"_blank\" rel=\"noopener\">PersistentVolumeClaim<\/a>(PVC)\uc740 pod\uac00 PV\ub85c\ubd80\ud130 \ud2b9\uc815 \ud504\ub85c\ud37c\ud2f0\ub97c \uac00\uc9c4 \ud2b9\uc815 \uc6a9\ub7c9\uc758 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc694\uccad\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \ub9ac\uc18c\uc2a4 \uac1d\uccb4\uc785\ub2c8\ub2e4. PVC\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0 \uc778\ud504\ub77c\uc758 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc54c \ud544\uc694 \uc5c6\uc774 \uc2a4\ud1a0\ub9ac\uc9c0 \ub9ac\uc18c\uc2a4\ub97c \uc694\uccad\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n<p>Kubernetes\ub294 PVC\ub97c \uc0dd\uc131\ud558\uace0 \uc0ac\uc6a9\ud558\uc5ec \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0 \uc778\ud504\ub77c\ub97c \ucd94\uc0c1\ud654\ud558\uba74\uc11c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc6a9 \uc2a4\ud1a0\ub9ac\uc9c0 \ub9ac\uc18c\uc2a4\ub97c \ub3d9\uc801\uc73c\ub85c \ud560\ub2f9\ud558\uace0 \uad00\ub9ac\ud558\ub294 \ubc29\ubc95\uc744 \uc81c\uacf5\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ud654\ub41c \ud658\uacbd\uc5d0\uc11c \uc2a4\ud14c\uc774\ud2b8\ud480 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc73c\ub85c \uc791\uc5c5\ud558\uace0 \uc774\ub97c \uad00\ub9ac\ud558\uae30\uac00 \ub354 \uc26c\uc6cc\uc9d1\ub2c8\ub2e4.<\/p>\n<p>PVC\ub97c \uc0dd\uc131\ud558\uace0 \uc774\ub984\uc744 <code>pvc.yml<\/code>\ub85c \uc9c0\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/X_Td_1FR8BElq2OK1mODusNTDcPHevnlT18IkCN8E08fT2rfkfsIY2iawyk3dcl7Dxlpr2NeDimz-RtJQbeH5QPqmM0nHWggq-fU4zw_dDbeH-2utnnKWGusBWt-CXO9-BM3M5ygvErDHfOlZtoWh7w-3.png\" width=\"624\" height=\"577\" \/><\/p>\n<p>PVC\ub294 \uc2a4\ud1a0\ub9ac\uc9c0 \ub9ac\uc18c\uc2a4\ub97c \uc694\uccad\ud558\uace0 \uc2e4\uc81c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 PV\uc5d0 \ubc14\uc778\ub529\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774 YAML \uad6c\uc131\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4 \ub0b4\uc5d0\uc11c <code>postgres-pvc<\/code>\ub77c\ub294 PersistentVolumeClaim\uc744 \uc815\uc758\ud569\ub2c8\ub2e4. \uc774 \uad6c\uc131\uc740 <code>ReadWriteOnce<\/code> \uc561\uc138\uc2a4 \ubaa8\ub4dc\ub85c \uae30\uac00\ubc14\uc774\ud2b8\uc758 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc694\uccad\ud558\uba70, <code>manual<\/code> StorageClass\ub97c \uba85\uc2dc\uc801\uc73c\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4. \uc774 PVC\ub294 <code>postgres-pv<\/code>\ub77c\ub294 \uae30\uc874 PV\uc5d0 \ubc14\uc778\ub529\ub418\uc5b4 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4 \ub0b4\uc5d0\uc11c \uc774 PVC\ub97c \ucc38\uc870\ud558\ub294 pod\uac00 \ud574\ub2f9 \ubcfc\ub968\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud6a8\uacfc\uc801\uc73c\ub85c \uc608\uc57d\ud569\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">ConfigMap<\/h3>\n<p>Kubernetes\uc5d0\uc11c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/configmap\/\" target=\"_blank\" rel=\"noopener\">ConfigMap<\/a>\uc740 \ud0a4-\uac12 \uc30d\uc73c\ub85c \uad6c\uc131 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 API \uac1d\uccb4\uc785\ub2c8\ub2e4. ConfigMap\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucf54\ub4dc\uc5d0\uc11c \uad6c\uc131 \ub370\uc774\ud130\ub97c \ubd84\ub9ac\ud558\ub294 \ubc29\ubc95\uc744 \uc81c\uacf5\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ub97c \uc218\uc815\ud558\uac70\ub098 \ub2e4\uc2dc \ubc30\ud3ec\ud558\uc9c0 \uc54a\uace0\ub3c4 \uad6c\uc131\uc744 \uc27d\uac8c \uad00\ub9ac\ud558\uace0 \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \uc774\ub294 Kubernetes \ud074\ub7ec\uc2a4\ud130 \ub0b4\uc5d0\uc11c \uc560\ud50c\ub9ac\ucf00\uc774\uc158, \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \ubc0f \uae30\ud0c0 \uad6c\uc131 \uc694\uc18c\ub97c \uc124\uc815\ud558\ub294 \ub370 \ud2b9\ud788 \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>ConfigMap\uc744 \uc0dd\uc131\ud558\uace0 \uc774\ub984\uc744 <code>cm.yml<\/code>\ub85c \uc9c0\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/wvDyPcHd888DKzevEdpSAURy5e6IzinJthTUHK5z58-BnPhFx0bXrnaexUXpzJkhbXkbZa-zgdjcttbKIvI01hznnCrw9-E9LAmSlMD4o1GDQ-99rjgKgqIF9vXsacJ3_K_XPckDmAWrpEvFDYmOw_Y-3.png\" width=\"624\" height=\"524\" \/><\/p>\n<p>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc5d0\uc11c\ub294 ConfigMap\uc744 \uc0ac\uc6a9\ud558\uc9c0\ub9cc, \ubcf4\uc548\uc0c1 \uc911\uc694\ud55c \uc790\uaca9 \uc99d\uba85\uc740 Kubernetes <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/\" target=\"_blank\" rel=\"noopener\">\uc2dc\ud06c\ub9bf(Secret)<\/a>\uc5d0 \uc800\uc7a5\ud558\uac70\ub098 Bitnami Sealed Secrets, AWS Parameter Store, HashiCorp Vault\uc640 \uac19\uc740 \ub300\uc548\uc744 \uace0\ub824\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\ub514\ud50c\ub85c\uc774\uba3c\ud2b8<\/h3>\n<p>Kubernetes\uc5d0\uc11c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/deployment\/\" target=\"_blank\" rel=\"noopener\">\ub514\ud50c\ub85c\uc774\uba3c\ud2b8(Deployment)<\/a>\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubc30\ud3ec \ubc0f \ud655\uc7a5\uc744 \uad00\ub9ac\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 \ub9ac\uc18c\uc2a4 \uac1d\uccb4\uc785\ub2c8\ub2e4. Kubernetes API \uadf8\ub8f9\uc758 \uc77c\ubd80\uc774\uba70 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc6d0\ud558\ub294 \uc0c1\ud0dc\ub97c \uc815\uc758\ud558\uace0 \uad00\ub9ac\ud558\ub294 \uc120\uc5b8\uc801 \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/fu5av6IILewmdL6cpFurozbGqH6gWdutfRmxwUb-0FGPs6j05xNSE4jwYeDsD2BKA_GE8WOaTqx2C85DX2mkz21LPzBFl_BHcSD-lIXthE0zaYSgUEWZ-gIQB07qIZ0V-iIm0cWiBCpmHcqvlpuirso-3.png\" width=\"624\" height=\"735\" \/><\/p>\n<p>\ub514\ud50c\ub85c\uc774\uba3c\ud2b8\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 pod\ub97c \uad00\ub9ac\ud558\uace0 \ud655\uc7a5\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 \uc0c1\uc704 \uc218\uc900\uc758 Kubernetes \ub9ac\uc18c\uc2a4\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 YAML \uad6c\uc131\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0\uc11c <code>postgres<\/code>\ub77c\ub294 \ub514\ud50c\ub85c\uc774\uba3c\ud2b8\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc601\uad6c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc0ac\uc6a9\ud558\ub294 PostgreSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4(16.0 \ubc84\uc804)\uc758 \ub2e8\uc77c \ubcf5\uc81c\ubcf8\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4. \ub370\uc774\ud130\ubca0\uc774\uc2a4 pod\ub294 <code>app: postgresdb<\/code>\ub85c \ub77c\ubca8\uc774 \uc9c0\uc815\ub418\uc5b4 \uc788\uc73c\uba70, \uc2a4\ud1a0\ub9ac\uc9c0\ub294 <code>postgres-pvc<\/code>\ub77c\ub294 PVC\uc5d0\uc11c \uc81c\uacf5\ud569\ub2c8\ub2e4. PostgreSQL \ucee8\ud14c\uc774\ub108\uc5d0 \ub300\ud55c \uad6c\uc131 \ubc0f \uc790\uaca9 \uc99d\uba85\uc740 <code>db-secret-credentials<\/code>\ub77c\ub294 \uc774\ub984\uc758 ConfigMap\uc744 \ud1b5\ud574 \uc81c\uacf5\ub429\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\uc11c\ube44\uc2a4<\/h3>\n<p>Kubernetes\uc5d0\uc11c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/\" target=\"_blank\" rel=\"noopener\">\uc11c\ube44\uc2a4(Service)<\/a>\ub294 pod \uc9d1\ud569\uc744 \ub124\ud2b8\uc6cc\ud06c \uc11c\ube44\uc2a4\ub85c \ub178\ucd9c\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 \ub9ac\uc18c\uc2a4 \uac1d\uccb4\uc785\ub2c8\ub2e4. \uc11c\ube44\uc2a4\ub294 Kubernetes \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc5ec\ub7ec \ubd80\ubd84 \uac04\uc758 \ub124\ud2b8\uc6cc\ud06c \ud1b5\uc2e0\uc744 \uac00\ub2a5\ud558\uac8c \ud558\uace0 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ud574\ub2f9 \ubd80\ubd84\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 \uc548\uc815\uc801\uc778 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc11c\ube44\uc2a4\ub294 \uae30\ubcf8 \ub124\ud2b8\uc6cc\ud06c \uc778\ud504\ub77c\ub97c \ucd94\uc0c1\ud654\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uad6c\uc131 \uc694\uc18c\ub97c \ub354 \uc27d\uac8c \uc5f0\uacb0\ud558\uace0 \uac80\uc0c9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/p4NneUHgkfOqr2cp1bIZVYEH1weBKgZ5cWjPOgnATHQGdQwULM9BlzPRJXyPqf0v3FqHrztZ9rmL6P3RSInOE6vNC21UenOjGz-872-KzklWAQGm2Rr3uOKIQMRMlLvCIHiswccwGtI-eVeBI7b61EI-3.png\" width=\"624\" height=\"525\" \/><\/p>\n<p>\uc774 YAML \uad6c\uc131\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4 \ub0b4\uc5d0 <code>postgres-service<\/code>\ub77c\ub294 NodePort \uc11c\ube44\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. &#8216;<code>app: postgresdb<\/code>&#8216;\ub85c \ub77c\ubca8\uc774 \uc9c0\uc815\ub41c pod\uc5d0\uc11c \uc2e4\ud589 \uc911\uc778 PostgreSQL \uc11c\ube44\uc2a4\ub97c \ud074\ub7ec\uc2a4\ud130 \ub0b4 \ud3ec\ud2b8 5432\uc5d0 \ub178\ucd9c\ud569\ub2c8\ub2e4. \uc678\ubd80 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ud3ec\ud2b8 30004\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubaa8\ub4e0 \ub178\ub4dc\uc758 IP \uc8fc\uc18c\uc5d0\uc11c \uc11c\ube44\uc2a4\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc11c\ube44\uc2a4\ub294 Kubernetes \ud074\ub7ec\uc2a4\ud130 \uc678\ubd80\uc5d0\uc11c PostgreSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc704\ud55c YAML \uad6c\uc131 \ub9cc\ub4e4\uae30<\/h2>\n<h3 class=\"wp-block-heading\">PersistentVolume<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/FJCpL5-QEQHMI7w0j2XnboyV-y6NOoRZPzOd3GXJju2CLizk2kmnXEBcDaUSAOuvHfFrOcKel3VcVs0fimdgovM9NSn5aw31hDTYSkyAgYSK14EqO-bj2CgL2p-6h20IDY0Ei-szg63ZKYIr77kIOZs-3.png\" width=\"624\" height=\"525\" \/><\/p>\n<p>\uc774 YAML\uc740 1GB\uc758 \uc800\uc7a5 \uc6a9\ub7c9\uc744 \uac00\uc9c4 <code>staticfiles-pv<\/code>\ub77c\ub294 PersistentVolume\uc744 \uc815\uc758\ud558\uc5ec \uc5ec\ub7ec pod\uac00 \ub3d9\uc2dc\uc5d0 \uc77d\uace0 \uc4f8 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc2a4\ud1a0\ub9ac\uc9c0\ub294 <code>\/data\/static<\/code>\uc5d0 \uc788\ub294 \ub85c\uceec \ud638\uc2a4\ud2b8 \uacbd\ub85c\uc5d0\uc11c \uc81c\uacf5\ub429\ub2c8\ub2e4. Django \uc815\uc801 \ud30c\uc77c\uc740 \uc774 \uc704\uce58\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">PersistentVolumeClaim<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/01PqOjeQXzeBx4RIkSdTRXttHzaEZexNL_OsQPfaCiOqbLTY85QhXOSCx0ojmGxSINUpuO4FhcZLk4Sl5YosJISr4GBMWeecUeObtbGiGXR9k_uQftED-89TurtbyVoaujef1ixQ4FQ8zSoa8j2MWp4-3.png\" width=\"624\" height=\"504\" \/><\/p>\n<p>\uc774 YAML\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0 <code>staticfiles-pvc<\/code>\ub77c\ub294 PVC\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. &#8216;manual&#8217; StorageClass\ub97c \uac00\uc9c4 PV\uc5d0\uc11c \ucd5c\uc18c 1GB \uc6a9\ub7c9\uc758 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc694\uccad\ud558\uba70, <code>ReadWriteMany<\/code> \uc561\uc138\uc2a4\uac00 \ud544\uc694\ud568\uc744 \uba85\uc2dc\ud569\ub2c8\ub2e4. \uc774 \uc694\uccad\uc740 \uc2a4\ud1a0\ub9ac\uc9c0 \uc694\uad6c \uc0ac\ud56d\uc744 \ucda9\uc871\ud558\uae30 \uc704\ud574 <code>staticfiles-pv<\/code>\ub77c\ub294 \uae30\uc874 PV\uc5d0 \uba85\uc2dc\uc801\uc73c\ub85c \ubc14\uc778\ub529\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 pod\uac00 \uc774 PVC\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc5f0\uacb0\ub41c PV\uac00 \uc81c\uacf5\ud558\ub294 \uc2a4\ud1a0\ub9ac\uc9c0\uc5d0 \uc561\uc138\uc2a4\ud558\uace0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">ConfigMap<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/zWM1NlnXZNXcXFBqcJo2iDvVn1HsVKmSqrrWASDo8g7iQFtHKQksufKcirqeKrpNKhLPw-EBLT5BPAapQDSvNTRF1Z9yzZlTO2bxOs2PdQNJYSwMdkDKXnMQJekawNLJe7FzJXuhAcyjKIZ6wjBw28c-3.png\" width=\"624\" height=\"459\" \/><\/p>\n<p>\uc774 YAML\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0 <code>app-cm<\/code>\uc774\ub77c\ub294 ConfigMap\uc744 \uc815\uc758\ud558\uba70, \uad6c\uc131 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 \ub2e4\uc591\ud55c \ud0a4-\uac12 \uc30d\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4. \uc774 ConfigMap\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4 \ub0b4\uc758 pod \ub610\ub294 \uae30\ud0c0 \ub9ac\uc18c\uc2a4\uac00 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\uacb0 \uc815\ubcf4 \ubc0f \uc815\uc801 \ud30c\uc77c \uacbd\ub85c\uc640 \uac19\uc740 \uad6c\uc131 \uc124\uc815\uc5d0 \uc561\uc138\uc2a4\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\ub514\ud50c\ub85c\uc774\uba3c\ud2b8<\/h3>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-456835\" style=\"aspect-ratio: 0.7497020262216925; width: 582px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/deploy.png\" alt=\"\" width=\"1258\" height=\"1678\" \/><\/figure>\n<p>\uc774 YAML\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0 <code>django-app-deploy<\/code>\ub77c\ub294 \ub514\ud50c\ub85c\uc774\uba3c\ud2b8\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \ud2b9\uc815 Docker \uc774\ubbf8\uc9c0 \ubc0f \uad6c\uc131\uc73c\ub85c \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud558\ub294 \ub2e8\uc77c \ubcf5\uc81c\ubcf8(pod)\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774 pod\ub294 PVC\ub85c \ubc31\uc5c5\ub418\ub294 \ub450 \uac1c\uc758 \ubcfc\ub968, <code>postgres-db-storage<\/code> \ubc0f <code>staticfiles<\/code>\uc640 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ucee8\ud14c\uc774\ub108\ub294 <code>app-cm<\/code>\uc774\ub77c\ub294 ConfigMap\uc758 \ud658\uacbd \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uad6c\uc131\ub418\uba70 \ud3ec\ud2b8 8000\uc5d0\uc11c \uc218\uc2e0 \ub300\uae30\ud569\ub2c8\ub2e4. \ubcfc\ub968\uc740 \ucee8\ud14c\uc774\ub108 \ub0b4\uc758 \ud2b9\uc815 \uacbd\ub85c\uc5d0 \ub9c8\uc6b4\ud2b8\ub418\uc5b4 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc2a4\ud1a0\ub9ac\uc9c0 \ubc0f \uc815\uc801 \ud30c\uc77c\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub514\ud50c\ub85c\uc774\uba3c\ud2b8\ub294 Kubernetes\ub97c \uc0ac\uc6a9\ud558\uc5ec Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud558\ub294 \uc77c\ubc18\uc801\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n<p>\ube44\uacf5\uac1c \ub808\uc9c0\uc2a4\ud2b8\ub9ac\uc5d0\uc11c \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc624\ub294 \ub370 \uad00\uc2ec\uc774 \uc788\ub2e4\uba74 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/pull-image-private-registry\/\" target=\"_blank\" rel=\"noopener\">\uc5ec\uae30<\/a>\ub97c \uc77d\uc5b4\ubcf4\uc138\uc694.<\/p>\n<h3 class=\"wp-block-heading\">\uc11c\ube44\uc2a4<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/Z0wfNZT1VrOT-9FznBYsl1LGu_b635fuSFtpoLRacsqfBiLAOi_tw7p87Ao8p9ZPx8-84e5NFerr3krbB5OsW2Vo9ps_hAvlaXV-2ga2RBLsm7vfPJ0rUUyzvvBg4NoQ0c_K7BO8I4u5vOgbUT1BBU-3.png\" width=\"624\" height=\"577\" \/><\/p>\n<p>\uc11c\ube44\uc2a4\ub294 \ud3ec\ud2b8 8000\uc5d0\uc11c \uc218\uc2e0 \ub300\uae30\ud558\uba70, \ub4e4\uc5b4\uc624\ub294 \ud2b8\ub798\ud53d\uc744 <code>app: django-application<\/code>\uc73c\ub85c \ub77c\ubca8\uc774 \uc9c0\uc815\ub41c pod\ub85c \ub9ac\ub514\ub809\uc158\ud569\ub2c8\ub2e4. \uc774\ub294 \ub3d9\uc77c\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc5ec\ub7ec \uc778\uc2a4\ud134\uc2a4\uac00 \uc2e4\ud589 \uc911\uc778 Kubernetes \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub178\ucd9c\ud558\uace0 \ub85c\ub4dc \ubc38\ub7f0\uc2f1\ud558\uae30 \uc704\ud55c \uc77c\ubc18\uc801\uc778 \uad6c\uc131\uc785\ub2c8\ub2e4. \uc11c\ube44\uc2a4\ub294 \ud2b8\ub798\ud53d\uc774 \uc774\ub4e4 \uc0ac\uc774\uc5d0 \uace0\ub974\uac8c \ubd84\uc0b0\ub418\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">NGINX<\/h2>\n<p><a href=\"https:\/\/www.nginx.com\/\" target=\"_blank\" rel=\"noopener\">NGINX<\/a>\ub294 \uc18d\ub3c4, \uc548\uc815\uc131, \ud655\uc7a5\uc131\uc73c\ub85c \uc798 \uc54c\ub824\uc9c4 \uace0\uc131\ub2a5 \uc6f9 \ubc0f \uc5ed\ubc29\ud5a5 \ud504\ub85d\uc2dc \uc11c\ubc84\uc785\ub2c8\ub2e4. \uc6f9 \ud2b8\ub798\ud53d, \ub85c\ub4dc \ubc38\ub7f0\uc2f1, \ucf58\ud150\uce20 \uc804\uc1a1\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\uc5ec \uc6f9\uc0ac\uc774\ud2b8\uc640 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc81c\uacf5\ud558\ub294 \ub370 \ub110\ub9ac \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">ConfigMap<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/Itj5_NS6IlHVlnJ49MnCsE2Hu8x0X7X2EW_Nm3qy7ujShq1mBmawFBCFk4iKbsDZ890n2xTJFGs1TlmRrZ0QDqL35IC6mj07cq8tz1GVisueNR4cDsqPZW1gTD5j7ZoTBJcWba5VpFXXZAwagXE0y60-3.png\" width=\"624\" height=\"460\" \/><\/p>\n<p>\uc774 YAML\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0 <code>nginx-cm<\/code>\uc774\ub77c\ub294 Kubernetes ConfigMap\uc744 \uc815\uc758\ud558\uba70, \ud0a4\ub294 <code>default.conf<\/code>\uc774\uace0 \uac12\uc740 \ubc31\uc5d4\ub4dc \uc11c\ubc84\ub85c \uc694\uccad\uc744 \ud504\ub85d\uc2dc \ucc98\ub9ac\ud558\ub294 \uc5ec\ub7ec \uc904\uc758 NGINX \uad6c\uc131 \ud30c\uc77c\uc778 \ud0a4-\uac12 \uc30d\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\ub514\ud50c\ub85c\uc774\uba3c\ud2b8<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/4ErlDKYewor2Owj0YrtS7O01WkXzFkTBHoN5LGlEGBfvX_MGUzXgxF0ur0eDSIBD2HdJlbg4zpAE1v1OwT_LkSYR3RS4hQFnW3jwX_wEjE_L4cCIeuHI-wspyiTGaw6z8JnHXw8buX0yvbWsr3eSNDo-3.png\" width=\"624\" height=\"727\" \/><\/p>\n<p>\uc774 YAML\uc740 \ud2b9\uc815 \ubcfc\ub968 \ubc0f \uad6c\uc131\uc73c\ub85c NGINX \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud558\ub294 pod\ub97c \uc0dd\uc131\ud558\uace0 \uad00\ub9ac\ud558\ub294 \ub514\ud50c\ub85c\uc774\uba3c\ud2b8\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \uc774 \ub514\ud50c\ub85c\uc774\uba3c\ud2b8\ub294 \uc774 pod\uc758 \ub2e8\uc77c \ubcf5\uc81c\ubcf8\uc774 \ud56d\uc0c1 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0\uc11c \uc2e4\ud589\ub418\ub3c4\ub85d \ud569\ub2c8\ub2e4. \ub610\ud55c <code>nginx-cm<\/code> ConfigMap\uc73c\ub85c \ub300\uccb4\ud558\uc5ec \ub514\ud3f4\ud2b8 NGINX \uad6c\uc131\uc744 \uc7ac\uc815\uc758\ud569\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\uc11c\ube44\uc2a4<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/PqinRZHVtGiapAjd5aD4-mA4sRmxTlRnfkSl5y6GRrPY4KpD2MsuMkkKspX1J-JHNwEdSlxb_Vtuex3SRd0caY4x-zI744KCZ-AKgjYc976FWHiEZVl9dM-oyJuPgE-DoEyU46RLokubkL-otadMZ40-3.png\" width=\"624\" height=\"631\" \/><\/p>\n<p>\uc774 YAML \uad6c\uc131\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0 <code>nginx-service<\/code>\ub77c\ub294 Kubernetes \uc11c\ube44\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \ub610\ud55c, \ud074\ub7ec\uc2a4\ud130 \ub0b4\uc758 \ud3ec\ud2b8 80\uc5d0 <code>app:nginx<\/code> \ub77c\ubca8\uc774 \uc9c0\uc815\ub41c pod\ub97c \ub178\ucd9c\ud558\uace0 \uac01 \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\uc758 NodePort 30005\uc5d0\uc11c \uc11c\ube44\uc2a4\uac00 \uc561\uc138\uc2a4 \uac00\ub2a5\ud558\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \uc678\ubd80 \ud2b8\ub798\ud53d\uc774 NodePort \uc11c\ube44\uc2a4\ub97c \ud1b5\ud574 NGINX \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud558\ub294 pod\uc5d0 \ub3c4\ub2ec\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">Kubernetes \uc7a1\uc73c\ub85c \ubc30\uce58 \uc6cc\ud06c\ub85c\ub4dc \uad00\ub9ac<\/h2>\n<p>Kubernetes\uc5d0\uc11c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/job\/\" target=\"_blank\" rel=\"noopener\">\uc7a1(Job)<\/a>\uc740 \ub2e8\uc77c \uc791\uc5c5 \ub2e8\uc704 \ub610\ub294 \uc720\ud55c\ud55c \uc791\uc5c5\uc744 \ub098\ud0c0\ub0b4\ub294 \ub9ac\uc18c\uc2a4 \uac1d\uccb4\uc785\ub2c8\ub2e4. \uc7a1\uc740 \uc9c0\uc815\ub41c \ud69f\uc218\ub9cc\ud07c \uc131\uacf5\uc801\uc73c\ub85c \uc644\ub8cc\ub420 \ub54c\uae4c\uc9c0 \uc791\uc5c5\uc744 \uc2e4\ud589\ud558\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ub9c8\uc774\uadf8\ub808\uc774\uc158<\/h3>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-456823\" style=\"aspect-ratio: 0.9512195121951219; width: 597px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/migration.png\" alt=\"\" width=\"1326\" height=\"1394\" \/><\/figure>\n<p>\uc774 YAML \uad6c\uc131\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0 <code>django-db-migrations<\/code>\ub77c\ub294 Kubernetes \uc7a1\uc744 \uc815\uc758\ud569\ub2c8\ub2e4. \uc774 \uc7a1\uc740 Django \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc704\ud574 \uc0ac\uc6a9\uc790 \uc9c0\uc815 Docker \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud558\uace0 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uad00\ub828 \ud30c\uc77c\uc744 \uc704\ud55c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\uae30 \uc704\ud574 PVC\ub97c \ub9c8\uc6b4\ud2b8\ud569\ub2c8\ub2e4. \uc7a1\uc774 \uc2e4\ud328\ud558\uba74 \ucd5c\ub300 15\ubc88\uae4c\uc9c0 \uc7ac\uc2dc\ub3c4\ud560 \uc218 \uc788\uc73c\uba70, \uc644\ub8cc \ud6c4 100\ucd08 \ub3d9\uc548 \ud574\ub2f9 pod\uac00 \uc720\uc9c0\ub429\ub2c8\ub2e4. \uc774 \uc7a1\uc740 PostgreSQL\uc5d0 \uc0c8 \ud14c\uc774\ube14\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<h3 class=\"wp-block-heading\">\uc815\uc801 \ud30c\uc77c<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/41sZvQpth3_7rpCpoCuUY0k588q9aANJoVs6DxWJSGF2qvZQDo0u9jcxEbjjEb9IQ3oLUTNkboM61EoKbGOxsnsJFHfzLYjlwFqq8TXtuYNLZne2h358Yn-MyoNrk8JVGRpu0erDPr4yHqevTlXzxtY-3.png\" width=\"624\" height=\"643\" \/><\/p>\n<p>\uc774 YAML \uad6c\uc131\uc740 <code>django-app<\/code> \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc5d0 <code>django-staticfiles<\/code>\ub77c\ub294 Kubernetes \uc7a1\uc744 \uc815\uc758\ud569\ub2c8\ub2e4. \uc774 \uc7a1\uc740 Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc815\uc801 \ud30c\uc77c\uc744 \uc218\uc9d1\ud558\uae30 \uc704\ud574 \uc0ac\uc6a9\uc790 \uc9c0\uc815 Docker \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud558\uace0 \uc815\uc801 \ud30c\uc77c\uc744 \uc704\ud55c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\uae30 \uc704\ud574 PVC\ub97c \ub9c8\uc6b4\ud2b8\ud569\ub2c8\ub2e4. \uc7a1\uc774 \uc2e4\ud328\ud558\uba74 \ucd5c\ub300 3\ubc88\uae4c\uc9c0 \uc7ac\uc2dc\ub3c4\ud560 \uc218 \uc788\uc73c\uba70, \ub514\ubc84\uadf8\ub97c \uc704\ud574 \uc644\ub8cc \ud6c4 100\ucd08 \ub3d9\uc548 \ud574\ub2f9 pod\uac00 \uc720\uc9c0\ub429\ub2c8\ub2e4. \uc774 \uc7a1\uc740 \uc815\uc801 \ud30c\uc77c\uc744 mountPath\uc778 <code>\/data\/static<\/code>\uc5d0 \ubcf5\uc0ac\ud569\ub2c8\ub2e4.<\/p>\n<h2 class=\"wp-block-heading\">\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc2dc\uc791<\/h2>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2dc\uc791\ud558\ub824\uba74 <code>k8s<\/code> \ub514\ub809\ud130\ub9ac\ub85c \uc774\ub3d9\ud558\uc5ec \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/t7jeYgU4ZqFBXc-2WwudXN8V4cibZZt5M0Tob6-0zV570MXlHkql6QBw4Oxibl5WWdGnfB9510sYpfjnIhsjvs9AObRuhIrR91r8b3Q8Vu2pJYuLfFhm2ixDw7Oddkvh-5tP3nUADGAu5DX725cJ6YI-3.png\" width=\"624\" height=\"392\" \/><\/p>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubc30\ud3ec\ud55c \ud6c4, \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\ud589 \uc911\uc778 pod\uc758 \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<p><code>kubectl get pods -n django-app -w<\/code><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/PiIyWEPFMtnrTpvspZ6gc65Z81xUgAbiqSQ2XgphxJ229PKgASge2sNzU0_YG_vC-k_hFBMNH1lF1CTBbY5oDWnNDne1Cf3nI809BP6bIUr0xHvRbNsOI_TkLwLwu7QFmcnKBarHlsK7tu8dBsqjgMA-3.png\" width=\"624\" height=\"108\" \/><\/p>\n<h3 class=\"wp-block-heading\">Django\uc5d0\uc11c superuser \ub9cc\ub4e4\uae30<\/h3>\n<p>\ubaa8\ub4e0 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc2e4\ud589\ub418\uace0 \ub098\uba74 superuser\ub97c \ub9cc\ub4e4\uc5b4 Django \uad00\ub9ac\uc790\uc5d0 \ub85c\uadf8\uc778\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uc5ec \uc2e4\ud589 \uc911\uc778 pod \ubaa9\ub85d\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.<\/p>\n<p><code>kubectl get pods -n django-app<\/code><\/p>\n<p>\ucee8\ud14c\uc774\ub108 \uc178 \ub0b4\ubd80\ub85c \ub4e4\uc5b4\uac00\ub824\uba74 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p><code>kubectl exec -it  -n django-app -- sh<\/code><\/p>\n<p>\uc774\ud6c4, \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p><code>python manage.py createsuperuser<\/code><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/y65m6YcxuejXhXIdGCr7_aqy_gGj4FhrtWsddWZgxWv2nBEnCedmQoPNupQQ0JRn7sMMwElFo09TMoPImbR6v2Sc3rirDBW6sLK2daaNbh3NDfvT83DrtTDHPiutsdc3vKC-V5nfXNYjrIzt26igd_o-3.png\" width=\"624\" height=\"197\" \/><\/p>\n<p>superuser\ub97c \uc131\uacf5\uc801\uc73c\ub85c \ub9cc\ub4e4\uc5c8\uc73c\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c <a href=\"http:\/\/127.0.0.1:30005\" target=\"_blank\" rel=\"noopener\">http:\/\/127.0.0.1:30005<\/a>\ub97c \uc5fd\ub2c8\ub2e4. \ub514\ud3f4\ud2b8 \uc2dc\uc791 \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ub429\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/tpozSD_EtSgHLFQ1ud5EV4_OJFdmgSUGlS6u4iEMI9rVrduVIlaJS1NHoD4D6WhjCdC7oASEobsfm9ar0cWUxEydoSVsTfuoOWTJw-5usNmJrusEyD50SGJYbKUWU_BLgdbipbfYeeKBcW1ecK8_gsQ-3.png\" width=\"624\" height=\"321\" \/><\/p>\n<p>\uadf8\ub7f0 \ub2e4\uc74c <a href=\"http:\/\/127.0.0.1:30005\/admin\" target=\"_blank\" rel=\"noopener\">http:\/\/127.0.0.1:30005\/admin<\/a>\uc744 \ud1b5\ud574 Django \uad00\ub9ac\uc790\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/WcwAvYrT3499Hr32HybiT6VuuanZh8keoS95n0N3-lasuJ8z4rsmQydIp4MLCGVORtQLZnECw2y3IKB9e2J8Mg8ScRF1HpvD-bu68MSYv_Ti_GBr3P4Y0gtc8B6aaUfg2kRF2VLj0NXUWLDRCiy3sjg-3.png\" width=\"624\" height=\"447\" \/><\/p>\n<p>\ubc29\uae08 \uc0dd\uc131\ud55c \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc778\uc99d\uc774 \uc644\ub8cc\ub418\uba74 Django \uad00\ub9ac\uc790 \ud398\uc774\uc9c0\ub85c \ub9ac\ub514\ub809\uc158\ub429\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/u4my3QzTYVifPI-wEPH__wlI6M7tUITtpDeoPnoK6bM6NC2nSAutEumLtR3CScqWcEFrnH8KrkH3k2QMna_Yyz2mnTO1qF8idfFOiG263r8k7Y_6wU-QsbihmY7Av08sRX_05wSc72Nw9DKnFiYOgeE-4.png\" width=\"624\" height=\"400\" \/><\/p>\n<p>localhost:30005\/admin\uc744 \ud1b5\ud574 \ub85c\uadf8\uc778\uc744 \uc2dc\ub3c4\ud558\uba74 <em>403 Forbidden<\/em>(CSRF) \uc624\ub958\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>CSRF_TRUSTED_ORIGINS<\/code>\uc5d0 \uc788\ub294 <code>settings.py<\/code> \ud30c\uc77c\uc5d0\uc11c \uc774\ub97c \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>CSRF_TRUSTED_ORIGINS<\/code>\ub294 \uad50\ucc28 \uc0ac\uc774\ud2b8 \uc694\uccad \uc704\uc870(CSRF) \ubcf4\ud638\ub97c \uc704\ud574 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \ucd9c\ucc98 \ubaa9\ub85d\uc744 \uc9c0\uc815\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 Django\uc758 <a href=\"https:\/\/docs.djangoproject.com\/en\/4.2\/ref\/settings\/#std-setting-CSRF_TRUSTED_ORIGINS\" target=\"_blank\" rel=\"noopener\">\uc124\uc815 <\/a>\uc785\ub2c8\ub2e4. CSRF\ub294 \uacf5\uaca9\uc790\uac00 \uc0ac\uc6a9\uc790\ub97c \uc18d\uc5ec \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \uc6d0\uce58 \uc54a\ub294 \uc694\uccad\uc744 \uc790\uc2e0\ub3c4 \ubaa8\ub974\uac8c \ubcf4\ub0b4\ub3c4\ub85d \uc720\ub3c4\ud560 \ub54c \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \ubcf4\uc548 \ucde8\uc57d\uc810\uc785\ub2c8\ub2e4. \uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574 Django\uc5d0\ub294 CSRF \ubcf4\ud638 \uae30\ub2a5\uc774 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>CSRF_TRUSTED_ORIGINS<\/code>\ub97c \uc0ac\uc6a9\ud558\uba74 CSRF \ubcf4\ud638 \uc694\uccad\uc774 \ud5c8\uc6a9\ub418\ub294 \ucd9c\ucc98(\uc6f9\uc0ac\uc774\ud2b8) \ubaa9\ub85d\uc744 \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubaa9\ub85d\uc5d0 \ud3ec\ud568\ub418\uc9c0 \uc54a\uc740 \ucd9c\ucc98\uc5d0\uc11c \ubc1c\uc0dd\ud55c \ubaa8\ub4e0 \uc694\uccad\uc740 \uc7a0\uc7ac\uc801\uc73c\ub85c \uc545\uc758\uc801\uc778 \uac83\uc73c\ub85c \uac04\uc8fc\ub418\uc5b4 \ucc28\ub2e8\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc124\uc815\uc740 CSRF \uacf5\uaca9\uc5d0 \ub300\ud55c \ubcf4\uc548\uc744 \uc720\uc9c0\ud558\uba74\uc11c Django \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \ub300\ud55c \ud2b9\uc815 \uad50\ucc28 \ucd9c\ucc98 \uc694\uccad\uc744 \ud5c8\uc6a9\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ub2e4\ub978 \ub3c4\uba54\uc778\uc5d0\uc11c \ud638\uc2a4\ud305\ub418\ub294 \ub2e4\ub978 \uc6f9 \uc11c\ube44\uc2a4 \ub610\ub294 API\uc640 \uc0c1\ud638 \uc791\uc6a9\ud574\uc57c \ud558\ub294 \uc0c1\ud669\uc5d0\uc11c \ud2b9\ud788 \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/DTDVeAkR8-rHFCbeoMqWHHSSCBDNjQ96OLDPcexK0TVmbzk9bRgHajXVqFiy4r_yTd6mE1GM7TGuCwYcTJ0owbKhhjLxaJlgE9_KjgEk6APxHsHsPXtdRtJwRbYgejaoHuxpWzUEsaUAt3oHjzrTvVM-5.png\" width=\"624\" height=\"428\" \/><\/p>\n<p><a href=\"https:\/\/kubernetes.io\/docs\/tasks\/access-application-cluster\/web-ui-dashboard\/\" target=\"_blank\" rel=\"noopener\">Kubernetes Dashboard<\/a>\uc640 \uac19\uc740 GUI \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc2e4\ud589 \uc911\uc778 pod, \ub514\ud50c\ub85c\uc774\uba3c\ud2b8, \uc601\uad6c \ubcfc\ub968 \ub4f1\uc744 \uc27d\uac8c \uc2dc\uac01\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/2lssXclYX6wG01Kf5SX7hng9Yxd0JuqeFAYR-UDdEBIXJyzNZItFQFGMT1UxAifh3FywhRmaWzrwafuv0L9nciqBE7yf09hf7sYmpijHkrZoe_MXeBIow9q_CrlZAUHLmNHDzMTcO8XZqWHOxjZHcnw-5.png\" width=\"624\" height=\"325\" \/><\/p>\n<h2 class=\"wp-block-heading\">PyCharm\uc758 Kubernetes \uc9c0\uc6d0<\/h2>\n<p>PyCharm\uc740 Kubernetes\uc5d0 \ucd5c\uc801\ud654\ub41c \ud5a5\uc0c1\ub41c \uc5d0\ub514\ud130 \ubc0f \ub7f0\ud0c0\uc784 \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud558\uba70, \ub2e4\uc74c\uacfc \uac19\uc740 \ub2e4\uc591\ud55c \uae30\ub2a5\uc744 \ud1b5\ud574 Kubernetes \uad00\ub9ac\ub97c \uac04\uc18c\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\ud074\ub7ec\uc2a4\ud130 \uac1d\uccb4 \ud0d0\uc0c9, \uad6c\uc131 \ucd94\ucd9c\/\ud3b8\uc9d1 \ubc0f \uc124\uba85.<\/li>\n<li>\uc774\ubca4\ud2b8 \ubcf4\uae30.<\/li>\n<li>pod \ub85c\uadf8 \ubcf4\uae30 \ubc0f \ub2e4\uc6b4\ub85c\ub4dc.<\/li>\n<li>pod \ucf58\uc194 \uc5f0\uacb0.<\/li>\n<li>pod\uc5d0\uc11c \uc178 \uc2e4\ud589.<\/li>\n<li>\ud3ec\ud2b8\ub97c pod\ub85c \ud3ec\uc6cc\ub529.<\/li>\n<li>\uc5d0\ub514\ud130\uc5d0\uc11c \ub9ac\uc18c\uc2a4 YAML \uad6c\uc131 \uc801\uc6a9.<\/li>\n<li>\ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \ub9ac\uc18c\uc2a4 \uc0ad\uc81c.<\/li>\n<li>\ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c ConfigMap \ubc0f Secret \ud56d\ubaa9 \uc644\uc131.<\/li>\n<li><code>kubectl<\/code> \uacbd\ub85c \uad6c\uc131.<\/li>\n<li>\uc804\uc5ed \ubc0f \ud504\ub85c\uc81d\ud2b8\ubcc4\ub85c \uc0ac\uc6a9\uc790 \uc9c0\uc815 <code>kubeconfig<\/code> \ud30c\uc77c \uad6c\uc131.<\/li>\n<li>\ucee8\ud14d\uc2a4\ud2b8 \ubc0f \ub124\uc784\uc2a4\ud398\uc774\uc2a4 \uc804\ud658.<\/li>\n<li>\ud65c\uc131 \ud074\ub7ec\uc2a4\ud130\uc758 API \uc2a4\ud0a4\ub9c8(CRD \ud3ec\ud568)\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub9ac\uc18c\uc2a4 \ub9e4\ub2c8\ud398\uc2a4\ud2b8 \ud3b8\uc9d1.<\/li>\n<\/ul>\n<p>\uc774 <a href=\"https:\/\/www.youtube.com\/watch?v=NqotF4kRvTc\" target=\"_blank\" rel=\"noopener\">\ub3d9\uc601\uc0c1<\/a>\uc744 \uc2dc\uccad\ud558\uc5ec PyCharm Professional\uc5d0\uc11c Kubernetes\ub85c \uc791\uc5c5\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uc138\uc694.<\/p>\n<p>Kubernetes \uc791\uc5c5\uc5d0 PyCharm\uc744 \ubb34\ub8cc\ub85c \uc0ac\uc6a9\ud574 \ubcf4\uc138\uc694!<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/ko-kr\/pycharm\/download\/\" target=\"\" rel=\"noopener\">PYCHARM \ub2e4\uc6b4\ub85c\ub4dc<\/a><\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">\ucc38\uc870<\/h2>\n<p>\uc774\ubbf8 Kubernetes\ub97c \uc798 \uc54c\uace0 \uacc4\uc2e0\uac00\uc694? \uadf8\ub807\ub2e4\uba74 \ud074\ub77c\uc6b0\ub4dc \uc194\ub8e8\uc158\uc744 \ud0d0\uc0c9\ud558\uc5ec \ud504\ub85c\uadf8\ub798\ubc0d \uc5ec\uc815\uc744 \ud55c \ub2e8\uacc4 \ub354 \ubc1c\uc804\uc2dc\ucf1c \ubcf4\uc138\uc694. \ub610\ud55c, <a href=\"https:\/\/www.jetbrains.com\/pycharm\/guide\/tutorials\/fastapi-aws-kubernetes\/\" target=\"_blank\" rel=\"noopener\">AWS EKS<\/a> \ubc0f <a href=\"https:\/\/www.jetbrains.com\/pycharm\/guide\/tutorials\/cloud-code-pycharm\/\" target=\"_blank\" rel=\"noopener\">Google Kubernetes Engine<\/a>\uc5d0 \ub300\ud55c \ud29c\ud1a0\ub9ac\uc5bc\ub3c4 \ud655\uc778\ud574 \ubcf4\uc138\uc694.<\/p>\n<p><em>\uac8c\uc2dc\ubb3c \uc6d0\ubb38 \uc791\uc131\uc790<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/mukul-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Mukul Mantosh\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Mukul Mantosh<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":964,"featured_media":565882,"comment_status":"closed","ping_status":"closed","template":"","categories":[8377],"tags":[963,5635,154],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm\/565853"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=565853"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm\/565853\/revisions"}],"predecessor-version":[{"id":602672,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/pycharm\/565853\/revisions\/602672"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/565882"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=565853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=565853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=565853"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=565853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}