{"id":865,"date":"2023-05-02T23:03:00","date_gmt":"2023-05-02T14:03:00","guid":{"rendered":"https:\/\/www.gyuroot.com\/wordpress\/?p=865"},"modified":"2023-07-06T13:17:46","modified_gmt":"2023-07-06T04:17:46","slug":"project-aws-%eb%b0%b0%ed%8f%ac-%ec%9e%90%eb%8f%99%ed%99%94","status":"publish","type":"post","link":"https:\/\/www.gyuroot.com\/wordpress\/?p=865","title":{"rendered":"[Project] AWS ECS \uc11c\ube44\uc2a4 \uc0dd\uc131 \ubc0f GitHub Action\uc744 \ud65c\uc6a9\ud55c \ubc30\ud3ec \uc790\ub3d9\ud654"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_63 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >\ubaa9\ucc28<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EA%B0%9C%EC%9A%94\" title=\"\ud504\ub85c\uc81d\ud2b8 \uac1c\uc694\">\ud504\ub85c\uc81d\ud2b8 \uac1c\uc694<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%F0%9F%A7%A0Devops-04-S2-Team9\" title=\"\ud83e\udde0Devops-04-S2-Team9\">\ud83e\udde0Devops-04-S2-Team9<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Day01_MileStone_13\" title=\"Day01 MileStone 1~3\">Day01 MileStone 1~3<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Day02_MileStone_45\" title=\"Day02 MileStone 4~5\">Day02 MileStone 4~5<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Day03_MileStone_69\" title=\"Day03 MileStone 6~9\">Day03 MileStone 6~9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Day04_MileStone_10\" title=\"Day04 MileStone 10\">Day04 MileStone 10<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EB%AA%A9%ED%91%9C\" title=\"\ud504\ub85c\uc81d\ud2b8 \ubaa9\ud45c\">\ud504\ub85c\uc81d\ud2b8 \ubaa9\ud45c<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#WAS%EB%A5%BC_Docker_image%EB%A1%9C_%EB%B9%8C%EB%93%9C%ED%95%98%EC%97%AC_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%ED%99%94_Docker_YamlAWS_%EC%A7%80%EC%86%8D%EC%A0%81%ED%86%B5%ED%95%A9\" title=\"WAS\ub97c Docker image\ub85c \ube4c\ub4dc\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ud654 (Docker, Yaml,AWS, \uc9c0\uc18d\uc801\ud1b5\ud569)\">WAS\ub97c Docker image\ub85c \ube4c\ub4dc\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ud654 (Docker, Yaml,AWS, \uc9c0\uc18d\uc801\ud1b5\ud569)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%ED%99%94_%ED%95%9C_%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC_AWS%EC%97%90_%EB%B0%B0%ED%8F%ACDocker_AWS\" title=\"\ucee8\ud14c\uc774\ub108\ud654 \ud55c \uc774\ubbf8\uc9c0\ub97c AWS\uc5d0 \ubc30\ud3ec(Docker, AWS)\">\ucee8\ud14c\uc774\ub108\ud654 \ud55c \uc774\ubbf8\uc9c0\ub97c AWS\uc5d0 \ubc30\ud3ec(Docker, AWS)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#AWS_%EB%B0%B0%ED%8F%AC_%EC%9E%90%EB%8F%99%ED%99%94AWS_%EB%B0%B0%ED%8F%AC%EC%9E%90%EB%8F%99%ED%99%94\" title=\"AWS \ubc30\ud3ec \uc790\ub3d9\ud654(AWS, \ubc30\ud3ec\uc790\ub3d9\ud654)\">AWS \ubc30\ud3ec \uc790\ub3d9\ud654(AWS, \ubc30\ud3ec\uc790\ub3d9\ud654)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#CDN%EC%9D%84_%ED%86%B5%ED%95%9C_%EC%BA%90%EC%8B%B1_%EB%B0%8F_HTTPS_%EC%A0%81%EC%9A%A9%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC\" title=\"CDN\uc744 \ud1b5\ud55c \uce90\uc2f1 \ubc0f HTTPS \uc801\uc6a9(\ub124\ud2b8\uc6cc\ud06c)\"><span class='tooltipsall tooltipsincontent classtoolTips10'>CDN<\/span>\uc744 \ud1b5\ud55c \uce90\uc2f1 \ubc0f HTTPS \uc801\uc6a9(\ub124\ud2b8\uc6cc\ud06c)<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EC%A7%84%ED%96%89\" title=\"\ud504\ub85c\uc81d\ud2b8 \uc9c4\ud589\">\ud504\ub85c\uc81d\ud2b8 \uc9c4\ud589<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_01\" title=\"Milestone_01\">Milestone_01<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_02\" title=\"Milestone_02\">Milestone_02<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_03\" title=\"Milestone_03\">Milestone_03<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_04\" title=\"Milestone_04\">Milestone_04<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#ECS_Task_Definition\" title=\"ECS Task Definition\">ECS Task Definition<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%EC%84%9C%EB%B9%84%EC%8A%A4_%EC%83%9D%EC%84%B1\" title=\"\uc11c\ube44\uc2a4 \uc0dd\uc131\">\uc11c\ube44\uc2a4 \uc0dd\uc131<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_05\" title=\"Milestone_05\">Milestone_05<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_06\" title=\"Milestone_06\">Milestone_06<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%EC%84%9C%EB%B2%84_%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%98_HTTPS_%EC%A0%81%EC%9A%A9\" title=\"\uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 HTTPS \uc801\uc6a9\">\uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 HTTPS \uc801\uc6a9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#%EB%A6%AC%EC%8A%A4%EB%84%88_%EC%88%98%EC%A0%95_HTTP_%E2%86%92_HTTPS\" title=\"\ub9ac\uc2a4\ub108 \uc218\uc815 (HTTP \u2192 HTTPS)\">\ub9ac\uc2a4\ub108 \uc218\uc815 (HTTP \u2192 HTTPS)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_07\" title=\"Milestone_07\">Milestone_07<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_08\" title=\"Milestone_08\">Milestone_08<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\/#Milestone_09\" title=\"Milestone_09\">Milestone_09<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EA%B0%9C%EC%9A%94\"><\/span>\ud504\ub85c\uc81d\ud2b8 \uac1c\uc694<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/Park-ChanKyu\/Devops-04-S2-Team9\" data-type=\"URL\" data-id=\"https:\/\/github.com\/Park-ChanKyu\/Devops-04-S2-Team9\" target=\"_blank\" rel=\"noreferrer noopener\">Github Repository<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%F0%9F%A7%A0Devops-04-S2-Team9\"><\/span>\ud83e\udde0Devops-04-S2-Team9<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Day01_MileStone_13\"><\/span><a href=\"https:\/\/github.com\/cs-devops-bootcamp\/Devops-04-S2-Team9#day01-milestone-13\"><\/a>Day01 MileStone 1~3<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/user-images.githubusercontent.com\/126568560\/235590974-df7decc1-5301-4fc4-82a3-7247e705f5c1.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/user-images.githubusercontent.com\/126568560\/235590974-df7decc1-5301-4fc4-82a3-7247e705f5c1.png\" alt=\"image\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Day02_MileStone_45\"><\/span><a href=\"https:\/\/github.com\/cs-devops-bootcamp\/Devops-04-S2-Team9#day02-milestone-45\"><\/a>Day02 MileStone 4~5<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/user-images.githubusercontent.com\/126568560\/235591096-6d67997d-3d2d-4a93-97cd-b7eeaa12cb2c.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/user-images.githubusercontent.com\/126568560\/235591096-6d67997d-3d2d-4a93-97cd-b7eeaa12cb2c.png\" alt=\"image\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Day03_MileStone_69\"><\/span><a href=\"https:\/\/github.com\/cs-devops-bootcamp\/Devops-04-S2-Team9#day03-milestone-69\"><\/a>Day03 MileStone 6~9<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/user-images.githubusercontent.com\/126568560\/235591166-4886cfc1-30ba-408e-8765-c0e816b2ef97.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/user-images.githubusercontent.com\/126568560\/235591166-4886cfc1-30ba-408e-8765-c0e816b2ef97.png\" alt=\"image\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Day04_MileStone_10\"><\/span><a href=\"https:\/\/github.com\/cs-devops-bootcamp\/Devops-04-S2-Team9#day04-milestone-10\"><\/a>Day04 MileStone 10<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul>\n<li>\ucf54\ub529 \ud6c4 \uc644\ub8cc<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EB%AA%A9%ED%91%9C\"><\/span>\ud504\ub85c\uc81d\ud2b8 \ubaa9\ud45c<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"WAS%EB%A5%BC_Docker_image%EB%A1%9C_%EB%B9%8C%EB%93%9C%ED%95%98%EC%97%AC_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%ED%99%94_Docker_YamlAWS_%EC%A7%80%EC%86%8D%EC%A0%81%ED%86%B5%ED%95%A9\"><\/span>WAS\ub97c Docker image\ub85c \ube4c\ub4dc\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ud654 (Docker, Yaml,AWS, \uc9c0\uc18d\uc801\ud1b5\ud569)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul>\n<li>was\ub97c \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub85c \ube4c\ub4dc\ud558\uc5ec \ucee8\ud14c\uc774\ub108 \ud654 \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\ube4c\ub4dc\ud55c \uc774\ubbf8\uc9c0\ub97c \ub808\uc9c0\uc2a4\ud2b8\ub9ac\ub85c \ud478\uc2dc \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uae43\ud5d9 \uc561\uc158\uc744 \ud1b5\ud574\uc11c \ub808\uc9c0\uc2a4\ud2b8\ub9ac \ud478\uc2dc\ub97c \uc790\ub3d9\ud654 \ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%ED%99%94_%ED%95%9C_%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC_AWS%EC%97%90_%EB%B0%B0%ED%8F%ACDocker_AWS\"><\/span>\ucee8\ud14c\uc774\ub108\ud654 \ud55c \uc774\ubbf8\uc9c0\ub97c AWS\uc5d0 \ubc30\ud3ec(Docker, AWS)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul>\n<li>aws ECR \uc11c\ube44\uc2a4\ub97c \uc774\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubc30\uc6c1\ub2c8\ub2e4.<\/li>\n\n\n\n<li>was \ubc0f mongoDB \uc774\ubbf8\uc9c0\ub97c AWS ECS\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AWS_%EB%B0%B0%ED%8F%AC_%EC%9E%90%EB%8F%99%ED%99%94AWS_%EB%B0%B0%ED%8F%AC%EC%9E%90%EB%8F%99%ED%99%94\"><\/span>AWS \ubc30\ud3ec \uc790\ub3d9\ud654(AWS, \ubc30\ud3ec\uc790\ub3d9\ud654)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul>\n<li>WAS\uc758 \uc774\ubbf8\uc9c0 \ubc30\ud3ec \uc790\ub3d9\ud654\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\ud504\ub860\ud2b8\uc5d4\ub4dc\uc758 \ubc30\ud3ec \uc790\ub3d9\ud654\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class='tooltipsall tooltipsincontent classtoolTips10'>CDN<\/span>\uc744 \ud1b5\ud55c \uce90\uc2f1 \ubc0f HTTPS \uc801\uc6a9(\ub124\ud2b8\uc6cc\ud06c)<\/h4>\n\n\n\n<ul>\n<li><span class='tooltipsall tooltipsincontent classtoolTips10'>CDN<\/span>\uc744 \ud1b5\ud574 \ud504\ub860\ud2b8\uc5d4\ub4dc\ub97c \uce90\uc2f1\ud558\uace0, HTTPS\ub97c \uc801\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\ud504\ub860\ud2b8\uc5d4\ub4dc\uc640 WAS\ub97c \uc5f0\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\ud504\ub860\ud2b8\uc5d4\ub4dc\uac00 \uc798 \uc791\ub3d9\ud558\uae30 \uc704\ud574 WAS\ub97c \uad6c\ud604\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_%EC%A7%84%ED%96%89\"><\/span>\ud504\ub85c\uc81d\ud2b8 \uc9c4\ud589<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_01\"><\/span>Milestone_01<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul>\n<li>WAS \uad6c\ucd95<\/li>\n\n\n\n<li>(Local)Node.js \uae30\ubc18 Fastify \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc774\uc6a9<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"npm -i global fastify-cli  # fastify \uc124\uce58\nfastify generate helloworld-was # helloword-was \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131\ncd helloworld-was\nhelloworld-was$ tree\n\u251c\u2500\u2500 plugins\n\u251c\u2500\u2500 routes\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 example\n\u251c\u2500\u2500 test\n\u251c\u2500\u2500 app.js\n\u251c\u2500\u2500 package.json\n\u2514\u2500\u2500 README.md\nhelloworld-was$ npm install\nhelloworld-was$ npm run start # Fastify \ub3d9\uc791\nhelloworld-was$ curl http:\/\/localhost:3000 # Fastify \uc815\uc0c1 \ub3d9\uc791 \ud655\uc778\n{&quot;root&quot;:true}%    # root.js \ud30c\uc77c\uc548\uc758 \ucf54\ub4dc\uc5d0\uc11c \ub9ac\ud134\nhelloworld-was$ \" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">npm<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-i<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">global<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">fastify-cli<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\"># fastify \uc124\uce58<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">fastify<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">generate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">helloworld-was<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># helloword-was \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">cd<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">helloworld-was<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">helloworld-was$<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">tree<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\u251c\u2500\u2500<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">plugins<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\u251c\u2500\u2500<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">routes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\u2502\u00a0\u00a0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">\u2514\u2500\u2500<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">example<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\u251c\u2500\u2500<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">test<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\u251c\u2500\u2500<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">app.js<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\u251c\u2500\u2500<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">package.json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\u2514\u2500\u2500<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">README.md<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">helloworld-was$<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">npm<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">install<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">helloworld-was$<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">npm<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">run<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">start<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># Fastify \ub3d9\uc791<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">helloworld-was$<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">curl<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">http:\/\/localhost:3000<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># Fastify \uc815\uc0c1 \ub3d9\uc791 \ud655\uc778<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #88C0D0\">&quot;root&quot;<\/span><span style=\"color: #88C0D0\">:true}%<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\"># root.js \ud30c\uc77c\uc548\uc758 \ucf54\ub4dc\uc5d0\uc11c \ub9ac\ud134<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">helloworld-was$<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul>\n<li>Was Docker Container\ud654<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#\/DockerFile\nFROM node:18-alpine\nWORKDIR \/app\nCOPY [&quot;package.json&quot;, &quot;package-lock.json*&quot;, &quot;.\/&quot;]\nRUN npm install\nCOPY . .\nEXPOSE 3000\nCMD npm run start\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">#\/DockerFile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">FROM<\/span><span style=\"color: #D8DEE9FF\"> node:18-alpine<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">WORKDIR<\/span><span style=\"color: #D8DEE9FF\"> \/app<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">COPY<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #A3BE8C\">&quot;package.json&quot;<\/span><span style=\"color: #D8DEE9FF\">, <\/span><span style=\"color: #A3BE8C\">&quot;package-lock.json*&quot;<\/span><span style=\"color: #D8DEE9FF\">, <\/span><span style=\"color: #A3BE8C\">&quot;.\/&quot;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">RUN<\/span><span style=\"color: #D8DEE9FF\"> npm install<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">COPY<\/span><span style=\"color: #D8DEE9FF\"> . .<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">EXPOSE<\/span><span style=\"color: #D8DEE9FF\"> 3000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">CMD<\/span><span style=\"color: #D8DEE9FF\"> npm run start<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul>\n<li>\uc704\uc640 \uac19\uc774 DockerFile \uc791\uc131\ud6c4 <code>sudo docker build --tag backend:1.0 . <\/code>\ub3c4\ucee4 \ube4c\ub4dc \uc9c4\ud589 \ud6c4 AWS CLI \ub85c\uadf8\uc778 \ud6c4 ECR \uc774\ubbf8\uc9c0 push<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"aws configure\nAWS Access Key ID [****************V552]:\nAWS Secret Access Key [****************jvqK]:\nDefault region name [ap-northeast-2]:\nDefault output format [none]:\naws ecr get-login-password --region ap-northeast-2 | \nsudo docker login --username AWS --password-stdin 123456789.dkr.ecr.ap-northeast-2.amazonaws.com\/[image]\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">aws<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">configure<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">AWS<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Access<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Key<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ID<\/span><span style=\"color: #D8DEE9FF\"> [****************V552]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">AWS<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Secret<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Access<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Key<\/span><span style=\"color: #D8DEE9FF\"> [****************jvqK]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">Default<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">region<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #D8DEE9FF\"> [ap-northeast-2]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">Default<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">output<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">format<\/span><span style=\"color: #D8DEE9FF\"> [none]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">aws<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ecr<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">get-login-password<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">--region<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ap-northeast-2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">sudo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">login<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">--username<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">AWS<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">--password-stdin<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">123456789<\/span><span style=\"color: #A3BE8C\">.dkr.ecr.ap-northeast-2.amazonaws.com\/[image]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_02\"><\/span>Milestone_02<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul>\n<li>Database \uad6c\uc131<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"sudo docker run --name mongodb -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=***** mongo:4.4.21\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">sudo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">run<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">--name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mongodb<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-e<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MONGO_INITDB_ROOT_USERNAME=root<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-e<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MONGO_INITDB_ROOT_PASSWORD=<\/span><span style=\"color: #81A1C1\">*****<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mongo:4.4.21<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_03\"><\/span>Milestone_03<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul>\n<li>Github Action \uc790\ub3d9\ud654<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"name: Push Docker image to ECR\n\non:\n  push:\n    branches:\n      - chankyu\n\njobs:\n  build-and-push:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions\/checkout@v2\n\n      - name: Configure AWS credentials\n        uses: aws-actions\/configure-aws-credentials@v1\n        with:\n          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n          aws-region: ${{ secrets.AWS_REGION }}\n\n      - name: Login to Amazon ECR\n        id: login-ecr\n        run: echo $(aws ecr get-login-password --region ${{ secrets.AWS_REGION }}) | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_REGISTRY }}\n\n      - name: Build and push Docker image\n        env:\n          ECR_REGISTRY: ${{ secrets.AWS_ECR_REGISTRY }}\n          IMAGE_TAG: ${{ github.sha }}\n        run: |\n          docker build -t $ECR_REGISTRY\/pck:$IMAGE_TAG .\/helloworld-was\n          docker push $ECR_REGISTRY\/pck:$IMAGE_TAG\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Push Docker image to ECR<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">on<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">push<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">branches<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">chankyu<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">jobs<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">build-and-push<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">runs-on<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ubuntu-latest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">steps<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Checkout repository<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">actions\/checkout@v2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Configure AWS credentials<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">aws-actions\/configure-aws-credentials@v1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">with<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">aws-access-key-id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.AWS_ACCESS_KEY_ID }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">aws-secret-access-key<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.AWS_SECRET_ACCESS_KEY }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">aws-region<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.AWS_REGION }}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Login to Amazon ECR<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">login-ecr<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">echo $(aws ecr get-login-password --region ${{ secrets.AWS_REGION }}) | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_REGISTRY }}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Build and push Docker image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">env<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">ECR_REGISTRY<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.AWS_ECR_REGISTRY }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">IMAGE_TAG<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ github.sha }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">          docker build -t $ECR_REGISTRY\/pck:$IMAGE_TAG .\/helloworld-was<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">          docker push $ECR_REGISTRY\/pck:$IMAGE_TAG<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_04\"><\/span>Milestone_04<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-3\">\n<div class=\"wp-block-column is-layout-flow\">\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"ECS_Task_Definition\"><\/span>ECS Task Definition<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-123-493x1024.png?v=1688305400\" alt=\"\" class=\"wp-image-866\" width=\"669\" height=\"1390\" srcset=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-123-493x1024.png 493w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-123-145x300.png 145w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-123.png 700w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow\">\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%EC%84%9C%EB%B9%84%EC%8A%A4_%EC%83%9D%EC%84%B1\"><\/span>\uc11c\ube44\uc2a4 \uc0dd\uc131<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul>\n<li>\ubc30\ud3ec \uc644\ub8cc \ud6c4 \ud574\ub2f9 ALB DNS\ub85c \uc811\uc18d\ud558\uc5ec \uc815\uc0c1\ub3d9\uc791\uc744 \ud655\uc778<\/li>\n\n\n\n<li>\ub3d9\uc77c\ud55c \ubc29\ubc95\uc73c\ub85c MongoDB \ubc30\ud3ec \ud6c4 \uc811\uc18d\ud558\uc5ec \uc815\uc0c1\ub3d9\uc791 \ud655\uc778<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-124-279x1024.png?v=1688305451\" alt=\"\" class=\"wp-image-867\" width=\"617\" height=\"2264\" srcset=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-124-279x1024.png 279w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-124-82x300.png 82w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-124-768x2818.png 768w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-124-419x1536.png 419w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-124-558x2048.png 558w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-124.png 1080w\" sizes=\"(max-width: 617px) 100vw, 617px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_05\"><\/span>Milestone_05<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul>\n<li>Fastify(WAS) \u2192 MongoDB \uc811\uc18d<\/li>\n\n\n\n<li>WAS \uc11c\ubc84 \ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354\uc5d0\uc11c <code>npm i @fastify\/mongodb<\/code> \uba85\ub839\uc744 \ud1b5\ud574 mongoDB \ud50c\ub7ec\uadf8\uc778 \uc124\uce58<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ \/plugins\/mongodb.js \ud30c\uc77c \uc0dd\uc131 \ud6c4 \uc544\ub798 \ucf54\ub4dc \uc0dd\uc131\n'use strict'\n\nconst fp = require('fastify-plugin')\n\nconst { MONGO_HOSTNAME, MONGO_USERNAME, MONGO_PASSWORD } = process.env\n\nmodule.exports = fp(async function (fastify, opts) {\n  const url = `mongodb:\/\/${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOSTNAME}:27017\/?authMechanism=DEFAULT`\n  console.log(url)\n\n  fastify.register(require('@fastify\/mongodb'), {\n    forceClose: true,\n    url: url\n  })\n})\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ \/plugins\/mongodb.js \ud30c\uc77c \uc0dd\uc131 \ud6c4 \uc544\ub798 \ucf54\ub4dc \uc0dd\uc131<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">use strict<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">fp<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">require<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">fastify-plugin<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">MONGO_HOSTNAME<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">MONGO_USERNAME<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">MONGO_PASSWORD<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">process<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">env<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">module<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #8FBCBB\">exports<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">fp<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">async<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">function<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">fastify<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">opts<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\"><span class='tooltipsall tooltipsincontent classtoolTips11'>URL<\/span><\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">`<\/span><span style=\"color: #A3BE8C\">mongodb:\/\/<\/span><span style=\"color: #81A1C1\">${<\/span><span style=\"color: #D8DEE9\">MONGO_USERNAME<\/span><span style=\"color: #81A1C1\">}<\/span><span style=\"color: #A3BE8C\">:<\/span><span style=\"color: #81A1C1\">${<\/span><span style=\"color: #D8DEE9\">MONGO_PASSWORD<\/span><span style=\"color: #81A1C1\">}<\/span><span style=\"color: #A3BE8C\">@<\/span><span style=\"color: #81A1C1\">${<\/span><span style=\"color: #D8DEE9\">MONGO_HOSTNAME<\/span><span style=\"color: #81A1C1\">}<\/span><span style=\"color: #A3BE8C\">:27017\/?authMechanism=DEFAULT<\/span><span style=\"color: #ECEFF4\">`<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">console<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">log<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\"><span class='tooltipsall tooltipsincontent classtoolTips11'>URL<\/span><\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">fastify<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">register<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #88C0D0\">require<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@fastify\/mongodb<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">forceClose<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\"><span class='tooltipsall tooltipsincontent classtoolTips11'>URL<\/span><\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\"><span class='tooltipsall tooltipsincontent classtoolTips11'>URL<\/span><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul>\n<li>Fastify(WAS) \u2192 MongoDB \uc811\uc18d \uc2dc \uc811\uc18d \uc815\ubcf4\ub97c \uc554\ud638\ud654 \ud558\uc5ec \ubcf4\uc548\uc744 \uac15\ud654 \ud544\uc694 SecretManager\ub85c \ud0a4\/\uac12\uc744 \uc554\ud638\ud654<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-125-519x1024.png?v=1688305892\" alt=\"\" class=\"wp-image-869\" width=\"564\" height=\"1113\" srcset=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-125-519x1024.png 519w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-125-152x300.png 152w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-125.png 720w\" sizes=\"(max-width: 564px) 100vw, 564px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-127.png\" alt=\"\" class=\"wp-image-871\" width=\"563\" height=\"300\" srcset=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-127.png 697w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-127-300x160.png 300w\" sizes=\"(max-width: 563px) 100vw, 563px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_06\"><\/span>Milestone_06<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-6\">\n<div class=\"wp-block-column is-layout-flow\">\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%EC%84%9C%EB%B2%84_%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%98_HTTPS_%EC%A0%81%EC%9A%A9\"><\/span>\uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 HTTPS \uc801\uc6a9<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"360\" height=\"639\" src=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-128.png\" alt=\"\" class=\"wp-image-872\" srcset=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-128.png 360w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-128-169x300.png 169w\" sizes=\"(max-width: 360px) 100vw, 360px\" \/><\/figure><\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow\">\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%EB%A6%AC%EC%8A%A4%EB%84%88_%EC%88%98%EC%A0%95_HTTP_%E2%86%92_HTTPS\"><\/span>\ub9ac\uc2a4\ub108 \uc218\uc815 (HTTP \u2192 HTTPS)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul>\n<li>WAS\uc758 \ubd80\ud558\ubd84\uc0b0\uc744 \ud574\uc8fc\ub294 ALB\uc5d0\uc11c SSL\/TLS \uc778\uc99d\uc11c\ub97c \ucd94\uac00\ud558\uc5ec \uc124\uc815<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"1024\" src=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-130-579x1024.png?v=1688306129\" alt=\"\" class=\"wp-image-874\" srcset=\"https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-130-579x1024.png 579w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-130-170x300.png 170w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-130-768x1358.png 768w, https:\/\/www.gyuroot.com\/wordpress\/wp-content\/uploads\/image-130.png 812w\" sizes=\"(max-width: 579px) 100vw, 579px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_07\"><\/span>Milestone_07<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul>\n<li>FrontEnd \ubc30\ud3ec \uc790\ub3d9\ud654<\/li>\n\n\n\n<li>\uc2e4\uc2b5\uc6a9 Frontend Repository master branch \uc5d0 push\uc2dc<code> npm run build<\/code> \u2192 S3 \uc790\ub3d9\ubc30\ud3ec(GitHub Action)<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"name: Node.js CI, AWS S3 CD\n\non:\n  push:\n    branches: [ &quot;master&quot; ]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x]\n        # See supported Node.js release schedule at https:\/\/nodejs.org\/en\/about\/releases\/\n\n    steps:\n    - uses: actions\/checkout@v3\n    - name: Use Node.js ${{ matrix.node-version }}\n      uses: actions\/setup-node@v3\n      with:\n        node-version: ${{ matrix.node-version }}\n        cache: 'npm'\n    - run: npm install\n    - run: npm run build || exit 0\n\n\n    - name: Configure AWS Credentials\n      uses: aws-actions\/configure-aws-credentials@v2\n      with:\n        aws-access-key-id: ${{ secrets.PCK_AWS_ACCESS_KEY_ID }}\n        aws-secret-access-key: ${{ secrets.PCK_AWS_SECRET_ACCESS_KEY }}\n        aws-region: ap-northeast-2\n    - name: Copy files to the production website with the AWS CLI\n      run: |\n        aws s3 sync .\/build s3:\/\/bigheadck-front\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Node.js CI, AWS S3 CD<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">on<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">push<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">branches<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">master<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">jobs<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">build<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">runs-on<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ubuntu-latest<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">strategy<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">matrix<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">node-version<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #A3BE8C\">18.x<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\"># See supported Node.js release schedule at https:\/\/nodejs.org\/en\/about\/releases\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">steps<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">actions\/checkout@v3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Use Node.js ${{ matrix.node-version }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">actions\/setup-node@v3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">with<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">node-version<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ matrix.node-version }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">cache<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">npm<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">npm install<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">npm run build || exit 0<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Configure AWS Credentials<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">aws-actions\/configure-aws-credentials@v2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">with<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">aws-access-key-id<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.PCK_AWS_ACCESS_KEY_ID }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">aws-secret-access-key<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.PCK_AWS_SECRET_ACCESS_KEY }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">aws-region<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ap-northeast-2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Copy files to the production website with the AWS CLI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">        aws s3 sync .\/build s3:\/\/bigheadck-front<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_08\"><\/span>Milestone_08<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul>\n<li>CloudFront\uc5d0\uc11c \uc544\ub798\uc640 \uac19\uc774 \ubc30\ud3ec \uc0dd\uc131<\/li>\n\n\n\n<li>\uc0dd\uc131\uc774 \uc644\ub8cc \ub418\uba74 CNAME \ub808\ucf54\ub4dc\ub85c \ud574\ub2f9 Cloudfront \uc8fc\uc18c\ub85c \ub808\ucf54\ub4dc \ucd94\uac00<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Milestone_09\"><\/span>Milestone_09<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul>\n<li>FrontEnd \u2192 Fastify(WAS) \uc5f0\uacb0\uc2dc CORS \uc5d0\ub7ec \ud574\uacb0<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ \/plugins\/cors.js \ud30c\uc77c \ucd94\uac00\ud558\uc5ec \uc544\ub798 \ucf54\ub4dc \uc0bd\uc785\n\n'use strict'\n\nconst fp = require('fastify-plugin')\n\nmodule.exports = fp(async function (fastify, opts) {\n  fastify.register(require('@fastify\/cors'), {\n    origin: &quot;www.domain.click&quot;, methods: ['GET', 'POST']\n  })\n})\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ \/plugins\/cors.js \ud30c\uc77c \ucd94\uac00\ud558\uc5ec \uc544\ub798 \ucf54\ub4dc \uc0bd\uc785<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">use strict<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">fp<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">require<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">fastify-plugin<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">module<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #8FBCBB\">exports<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">fp<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #81A1C1\">async<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">function<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">fastify<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">opts<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">fastify<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">register<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #88C0D0\">require<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@fastify\/cors<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">origin<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">www.domain.click<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">methods<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">GET<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">POST<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span><\/code><\/pre><\/div>\n<script type=\"text\/javascript\"> toolTips('.classtoolTips10','\uc11c\ubc84\uc640 \uc0ac\uc6a9\uc790 \uc0ac\uc774\uc758 \ubb3c\ub9ac\uc801\uc778 \uac70\ub9ac\ub97c \uc904\uc5ec \ucf58\ud150\uce20 \ub85c\ub529\uc5d0 \uc18c\uc694\ub418\ub294 \uc2dc\uac04\uc744 \ucd5c\uc18c\ud654\ud569\ub2c8\ub2e4. <span class='tooltipsall tooltipsincontent classtoolTips10'>CDN<\/span>\uc740 \uac01 \uc9c0\uc5ed\uc5d0 \uce90\uc2dc \uc11c\ubc84(PoP, Points of presence)\ub97c \ubd84\uc0b0 \ubc30\uce58\ud574, \uadfc\uc811\ud55c \uc0ac\uc6a9\uc790\uc758 \uc694\uccad\uc5d0 \uc6d0\ubcf8 \uc11c\ubc84\uac00 \uc544\ub2cc \uce90\uc2dc \uc11c\ubc84\uac00 \ucf58\ud150\uce20\ub97c \uc804\ub2ec<br\/>(\ud55c\ub9c8\ub514\ub85c \ud504\ub85d\uc2dc \uc11c\ubc84\uc5d0\uc11c \ucd9c\ubc1c\ud55c \uc6f9 \uce90\uc2dc\uc758 \ud074\ub77c\uc6b0\ub4dc\ud654)'); <\/script><script type=\"text\/javascript\">jQuery(\"document\").ready(function(){ if (typeof(bulletscreentoolTips10content) == 'undefined'){ var bulletscreentoolTips10content  = [\"Content Delivery Network\"] ; var bulletscreenindex10content = 0;jQuery(document).ready(function($) {\t$('.classtoolTips10').mouseout(function(e) {\t\tvar x = e.pageX,\t\ty = e.pageY; bulletscreenindex10content = (bulletscreenindex10content + 1) % bulletscreentoolTips10content.length; $(\"<span class='bulletscreenfortoolTips' \/>\").text(bulletscreentoolTips10content[bulletscreenindex10content]).css({\"z-index\": \"555555\",\"top\": y - 10,\"left\": x+10,\"color\": \"#bf316f\",\"font-size\": \"24px\",  \"font-weight\": \"bolder\",\"position\": \"absolute\"}).appendTo(\"body\").animate({\"top\": y - 380,\"opacity\": 1},2500,function() {this.remove();});});});}}); <\/script><script type=\"text\/javascript\"> toolTips('.classtoolTips11','<span class=\"notion-enable-hover\" data-token-index=\"0\">Uniform Resource Locator<br\/><\/span><br\/><br\/><a href=\"\/wordpress\/?p=65\">Detail<\/a>'); <\/script>","protected":false},"excerpt":{"rendered":"<p>\ud504\ub85c\uc81d\ud2b8 \uac1c\uc694 Github Repository \ud83e\udde0Devops-04-S2-Team9 Day01 MileStone 1~3 Day02 MileStone 4~5 Day03 MileStone 6~9 Day04 MileStone 10 \ud504\ub85c\uc81d\ud2b8 \ubaa9\ud45c WAS\ub97c Docker image\ub85c \ube4c\ub4dc\ud558\uc5ec \ucee8\ud14c\uc774\ub108\ud654 (Docker, Yaml,AWS, \uc9c0\uc18d\uc801\ud1b5\ud569) \ucee8\ud14c\uc774\ub108\ud654 \ud55c \uc774\ubbf8\uc9c0\ub97c AWS\uc5d0 \ubc30\ud3ec(Docker, AWS) AWS \ubc30\ud3ec \uc790\ub3d9\ud654(AWS, \ubc30\ud3ec\uc790\ub3d9\ud654) CDN\uc744 \ud1b5\ud55c \uce90\uc2f1 \ubc0f HTTPS \uc801\uc6a9(\ub124\ud2b8\uc6cc\ud06c) \ud504\ub85c\uc81d\ud2b8 \uc9c4\ud589 Milestone_01 Milestone_02 Milestone_03 Milestone_04 ECS Task Definition \uc11c\ube44\uc2a4 \uc0dd\uc131 Milestone_05 &#8230; <a title=\"[Project] AWS ECS \uc11c\ube44\uc2a4 \uc0dd\uc131 \ubc0f GitHub Action\uc744 \ud65c\uc6a9\ud55c \ubc30\ud3ec \uc790\ub3d9\ud654\" class=\"read-more\" href=\"https:\/\/www.gyuroot.com\/wordpress\/?p=865\" aria-label=\"More on [Project] AWS ECS \uc11c\ube44\uc2a4 \uc0dd\uc131 \ubc0f GitHub Action\uc744 \ud65c\uc6a9\ud55c \ubc30\ud3ec \uc790\ub3d9\ud654\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":876,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":""},"categories":[37],"tags":[],"_links":{"self":[{"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/865"}],"collection":[{"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=865"}],"version-history":[{"count":5,"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/865\/revisions"}],"predecessor-version":[{"id":1220,"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/865\/revisions\/1220"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/876"}],"wp:attachment":[{"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gyuroot.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}