{"id":191,"date":"2024-04-19T09:52:54","date_gmt":"2024-04-19T00:52:54","guid":{"rendered":"https:\/\/redutan.synology.me\/wordpress\/?p=191"},"modified":"2024-04-20T00:26:01","modified_gmt":"2024-04-19T15:26:01","slug":"git-flow-%eb%b0%b0%ed%8f%ac-%ec%a0%84%eb%9e%b5","status":"publish","type":"post","link":"https:\/\/redutan.synology.me\/wordpress\/2024\/04\/19\/git-flow-%eb%b0%b0%ed%8f%ac-%ec%a0%84%eb%9e%b5\/","title":{"rendered":"git-flow \ubcc4 \ubc30\ud3ec \uc804\ub7b5"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h2 id=\"git-flow\">git-flow<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"773\" height=\"1024\" src=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-6-773x1024.png\" alt=\"\" class=\"wp-image-214\" srcset=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-6-773x1024.png 773w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-6-226x300.png 226w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-6-768x1018.png 768w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-6.png 1150w\" sizes=\"(max-width: 773px) 100vw, 773px\" \/><\/figure>\n\n\n\n<h2 id=\"git-flow\">git-flow<\/h2>\n\n\n\n<p><strong>Development<\/strong><\/p>\n\n\n\n<ol>\n<li><code>dev<\/code>&nbsp;\ube0c\ub79c\uce58\uc5d0\uc11c feature \ube0c\ub79c\uce58 \uc0dd\uc131:&nbsp;<code>feature\/DV-0000<\/code><\/li>\n\n\n\n<li>\uac1c\ubc1c\uc790 Local\uc5d0\uc11c \uad6c\ud604<\/li>\n\n\n\n<li>\uc791\uc5c5 \uc644\ub8cc \ud6c4 \ud478\uc2dc: push&nbsp;<code>feature\/DV-0000<\/code><\/li>\n\n\n\n<li>merge to&nbsp;<code>dev<\/code>&nbsp;from&nbsp;<code>feature\/DV-0000<\/code>\n<ol>\n<li>\ucde8\ud569 \uc804\uc5d0 PR\ub85c \ucf54\ub4dc \ub9ac\ubdf0 \uac00\ub2a5<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Dev \ud658\uacbd \ubc30\ud3ec(\uc790\ub3d9, \uc218\ub3d9)&nbsp;<code>dev<\/code><\/li>\n\n\n\n<li>delete branch&nbsp;<code>feature\/DV-0000<\/code><\/li>\n<\/ol>\n\n\n\n<h2 id=\"git-flow\">git-flow<\/h2>\n\n\n\n<h3 id=\"QA\">QA<\/h3>\n\n\n\n<ol>\n<li>\ucf54\ub4dc \ud504\ub9ac\uc9d5\ub41c&nbsp;<code>dev<\/code>&nbsp;\ube0c\ub79c\uce58\uc5d0\uc11c release \ube0c\ub79c\uce58 \uc0dd\uc131:&nbsp;<code>release\/7.1.0<\/code><\/li>\n\n\n\n<li>QA \ud658\uacbd \ubc30\ud3ec(\uc790\ub3d9, \uc218\ub3d9) on&nbsp;<code>release\/7.1.0<\/code><\/li>\n\n\n\n<li>\ubc84\uadf8 \uc218\uc815\uc744 \uc704\ud55c feature \ube0c\ub79c\uce58 \uc0dd\uc131:&nbsp;<code>feature\/QA-0000<\/code>&nbsp;from&nbsp;<code>release\/7.1.0<\/code><\/li>\n\n\n\n<li>\ubc84\uadf8 \uc218\uc815: merge to&nbsp;<code>release\/7.1.0<\/code>&nbsp;from&nbsp;<code>feature\/QA-0000<\/code>\n<ol>\n<li>\ucde8\ud569 \uc804\uc5d0 PR\ub85c \ucf54\ub4dc \ub9ac\ubdf0 \uac00\ub2a5<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>QA \ud658\uacbd \ubc30\ud3ec(\uc790\ub3d9, \uc218\ub3d9) on&nbsp;<code>release\/7.1.0<\/code><\/li>\n\n\n\n<li>QA Sign-off<\/li>\n<\/ol>\n\n\n\n<h3 id=\"Release\">Release<\/h3>\n\n\n\n<ol start=\"8\">\n<li><code>release\/7.1.0<\/code>&nbsp;merge to&nbsp;<code>main<\/code><\/li>\n\n\n\n<li><code>7.1.0<\/code>&nbsp;Tagging = Versioning<\/li>\n\n\n\n<li>Staging \ubc30\ud3ec<\/li>\n\n\n\n<li>Staging QA<\/li>\n\n\n\n<li>Production \ubc30\ud3ec<\/li>\n\n\n\n<li><code>release\/7.1.0<\/code>&nbsp;merge to&nbsp;<code>dev<\/code><\/li>\n\n\n\n<li>delete branch&nbsp;<code>release\/7.1.0<\/code><\/li>\n<\/ol>\n\n\n\n<h2 id=\"Staging-%EB%B0%B0%ED%8F%AC-%EC%A0%84%EB%9E%B5\">Staging \ubc30\ud3ec \uc804\ub7b5<\/h2>\n\n\n\n<h3 id=\"main\"><code>main<\/code>&nbsp;&lt;-&nbsp;<code>release\/7.1.0<\/code><\/h3>\n\n\n\n<p>Production \ud658\uacbd\uc5d0 \ub098\uac00\uae30 \uc804\uc5d0 \uac00\uc7a5 \uc644\ubcbd\ud55c \ubc29\ubc95\uc73c\ub85c \ud14c\uc2a4\ud2b8 \uac00\ub2a5<br>Staging \ud658\uacbd QA \uc911 \ubc84\uadf8\uac00 \ubc1c\uacac\ub418\uba74 \ubc84\uc800\ub2dd\uc744 \ub2e4\uc2dc \ud574\uc57c\ud568.<br>\ucda9\ub3cc \uac00\ub2a5\uc131 \uc874\uc7ac<\/p>\n\n\n\n<h3 id=\"release\/7.1.0\"><code>release\/7.1.0<\/code>&nbsp;&lt;-&nbsp;<code>main<\/code><\/h3>\n\n\n\n<p>Staging \ud658\uacbd QA \uc911 \ubc84\uadf8\uac00 \ubc1c\uacac\ub418\uc5b4\ub3c4 \ube0c\ub79c\uce6d \ud53c\ub85c\uac10\uc774 \uc5c6\uc74c<br>\ucd94\ud6c4&nbsp;<code>release\/7.1.0<\/code>&nbsp;-merge-&gt;&nbsp;<code>main<\/code>&nbsp;\uc2dc \ucda9\ub3cc \uc5c6\uc74c.<\/p>\n\n\n\n<h2 id=\"git-flow\">git-flow<\/h2>\n\n\n\n<p><strong>Hotfix<\/strong><\/p>\n\n\n\n<ol>\n<li><code>main<\/code>&nbsp;\ube0c\ub79c\uce58\uc5d0\uc11c&nbsp;<code>hotifx<\/code>&nbsp;\ube0c\ub79c\uce58 \uc0dd\uc131:&nbsp;<code>hotfix\/7.1.1<\/code>\n<ol>\n<li>QA \ud658\uacbd \ubc30\ud3ec \ud6c4 \uac80\uc99d<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>merge to&nbsp;<code>main<\/code>&nbsp;from&nbsp;<code>hotfix\/7.1.1<\/code><\/li>\n\n\n\n<li>Production \ud658\uacbd \ubc30\ud3ec(\uc790\ub3d9, \uc218\ub3d9)<\/li>\n\n\n\n<li><code>7.1.1<\/code>&nbsp;Tagging = Versioning<\/li>\n\n\n\n<li>merge to&nbsp;<code>dev<\/code>&nbsp;from&nbsp;<code>hotfix\/7.1.1<\/code><\/li>\n\n\n\n<li>delete branch&nbsp;<code>hotfix\/7.1.1<\/code><\/li>\n<\/ol>\n\n\n\n<h2 id=\"git-flow-on-Sourcetree\">git-flow on Sourcetree<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"884\" height=\"728\" src=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-7.png\" alt=\"\" class=\"wp-image-215\" srcset=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-7.png 884w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-7-300x247.png 300w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-7-768x632.png 768w\" sizes=\"(max-width: 884px) 100vw, 884px\" \/><\/figure>\n\n\n\n<p>Keymap:&nbsp;<code>CMD + OPT + F<\/code><\/p>\n\n\n\n<h2 id=\"github-flow\">github-flow<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"576\" src=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-8-1024x576.png\" alt=\"\" class=\"wp-image-216\" srcset=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-8-1024x576.png 1024w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-8-300x169.png 300w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-8-768x432.png 768w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-8.png 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><br><em>\ucd9c\ucc98:&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=cP0I9w2coGU\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.youtube.com\/watch?v=cP0I9w2coGU<\/a><\/em><\/p>\n\n\n\n<p><code>main<\/code>: \uae30\ubcf8 \ube0c\ub79c\uce58\uc774\uba74\uc11c Production \ubc30\ud3ec \ube0c\ub79c\uce58<\/p>\n\n\n\n<ol>\n<li><code>feature<\/code>&nbsp;\ube0c\ub79c\uce58 \uc0dd\uc131 \ud6c4 \uac1c\ubc1c\uc790\uac00 \uad6c\ud604:&nbsp;<code>feature\/DV-0000<\/code><\/li>\n\n\n\n<li>PR \uc0dd\uc131 \ubc0f \ubcc0\uacbd: Lint, Test, \uc815\uc801 \ubd84\uc11d \ub4f1<\/li>\n\n\n\n<li>\ucf54\ub4dc \ub9ac\ubdf0\n<ol>\n<li>\ub9ac\ubdf0 \ud6c4 \uc218\uc815\uc0ac\ud56d\uc774 \uc788\uc73c\uba74 \ucd94\uac00 \uc218\uc815\uc0ac\ud56d \ucee4\ubc0b \ud6c4 \ud478\uc2dc<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>PR \uc2b9\uc778<\/li>\n\n\n\n<li><code>main<\/code>&nbsp;\ube0c\ub79c\uce58\ub85c \ucde8\ud569: Production \ubc30\ud3ec\n<ol>\n<li><code>feature<\/code>&nbsp;\ube0c\ub79c\uce58 \uc0ad\uc81c<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<h2 id=\"github-flow\">github-flow<\/h2>\n\n\n\n<ul>\n<li>\uc77c\ubc18\uc801\uc73c\ub85c \ubc84\uc800\ub2dd \uc5c6\uc74c.<\/li>\n\n\n\n<li>CI\/CD Pipeline \uac00 \ud544\uc218\ub85c \uc694\uad6c\ub428.\n<ul>\n<li>\uc0c1\uc2dc \ubc30\ud3ec \uccb4\uacc4<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Dev, QA \ud658\uacbd\uc5d0 \ub300\ud55c \uace0\ubbfc: Tagging?<\/li>\n\n\n\n<li>\ube60\ub974\uac8c \ubc30\ud3ec\ud558\ub294 Start-up \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc720\ub9ac<\/li>\n\n\n\n<li><code>main<\/code>&nbsp;\ube0c\ub79c\uce58\uc5d0 Protection Rule \uc801\uc6a9 \ud544\uc218!<\/li>\n<\/ul>\n\n\n\n<h2 id=\"gitlab-flow\">gitlab-flow<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"802\" height=\"415\" src=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-9.png\" alt=\"\" class=\"wp-image-217\" srcset=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-9.png 802w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-9-300x155.png 300w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-9-768x397.png 768w\" sizes=\"(max-width: 802px) 100vw, 802px\" \/><\/figure>\n\n\n\n<p><br><em>\ucd9c\ucc98:&nbsp;<a href=\"https:\/\/blog.programster.org\/git-workflows\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/blog.programster.org\/git-workflows<\/a><\/em><\/p>\n\n\n\n<h2 id=\"gitlab-flow-hotfix\">gitlab-flow hotfix<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"707\" src=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-10-1024x707.png\" alt=\"\" class=\"wp-image-218\" srcset=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-10-1024x707.png 1024w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-10-300x207.png 300w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-10-768x531.png 768w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-10-1536x1061.png 1536w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-10.png 1740w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><br><em>\ucd9c\ucc98:&nbsp;<a href=\"https:\/\/www.linkedin.com\/pulse\/gitlab-flow-jadson-santos\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.linkedin.com\/pulse\/gitlab-flow-jadson-santos<\/a><\/em><\/p>\n\n\n\n<ul>\n<li>\uac1c\uc778\uc801\uc73c\ub85c \uc774\ud574\uac00 \uc798 \uc548\ub418\ub294 \ubd80\ubd84\uc740&nbsp;<strong>pre-production\uc5d0\uc11c \uac80\uc99d<\/strong>\uc774 \uc5c6\uc74c.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"Trunk-Based-Development\">Trunk-Based Development<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"508\" src=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-11-1024x508.png\" alt=\"\" class=\"wp-image-219\" srcset=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-11-1024x508.png 1024w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-11-300x149.png 300w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-11-768x381.png 768w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-11.png 1400w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><br><em>\ucd9c\ucc98:&nbsp;<a href=\"https:\/\/launchdarkly.com\/blog\/git-branching-strategies-vs-trunk-based-development\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/launchdarkly.com\/blog\/git-branching-strategies-vs-trunk-based-development\/<\/a><\/em><\/p>\n\n\n\n<p>github-flow \uc804\ub7b5\uc5d0\uc11c \ub354 \uac04\ub7b5\ud788 \ud574\uc11c \ub2e8 \ud558\ub098\uc758&nbsp;<code>main<\/code>&nbsp;(or&nbsp;<code>trunk<\/code>)\ube0c\ub79c\uce58\ub85c\ub9cc \uac1c\ubc1c<\/p>\n\n\n\n<ul>\n<li>\uc544\uc608 Branching\ub97c \ud558\uc9c0 \uc54a\uc74c.&nbsp;<code>feature<\/code>&nbsp;(or&nbsp;<code>topic<\/code>)\ube0c\ub79c\uce58 \uc870\ucc28 \ub9cc\ub4e4\uc9c0\ub3c4 \uc54a\uc74c.<\/li>\n\n\n\n<li>\ub85c\uceec\uc5d0\uc11c&nbsp;<code>main<\/code>&nbsp;\ube0c\ub79c\uce58\uc5d0\uc11c \ubc14\ub85c \uac1c\ubc1c\ud558\uace0 \ubc14\ub85c \ud478\uc2dc!<\/li>\n\n\n\n<li>Release \uc2dc\uc5d0\ub294 \ud0dc\uae45\uacfc \ub3d9\uc2dc\uc5d0 CI\/CD Pipelline\uac00 \uc791\ub3d9\ub428.<\/li>\n\n\n\n<li>\uc77c\ubc18\uc801\uc73c\ub85c TDD, \uce74\ub098\ub9ac \ubc30\ud3ec, Blue\/Green \ubc30\ud3ec, Feature Flag \uae30\ub2a5\uc774 \uc694\uad6c\ub428.<\/li>\n\n\n\n<li>\uc131\uc219\ud55c \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1 \uc2e4\ub825\uacfc \ubb38\ud654!<\/li>\n<\/ul>\n\n\n\n<h2 id=\"Trunk-Based-Development-%EC%9E%A5\/%EB%8B%A8%EC%A0%90\">Trunk-Based Development \uc7a5\/\ub2e8\uc810<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\uc7a5 \uc810<\/th><th>\ub2e8 \uc810<\/th><\/tr><\/thead><tbody><tr><td>\uc0c1\uc2dc \ubc30\ud3ec \uac00\ub2a5(\ud558\ub8e8\uc5d0\ub3c4 N\ubc88)<\/td><td>\ud070 \uae30\ub2a5 \ubc30\ud3ec\uac00 \uc5b4\ub824\uc6c0(\ud1b5\ud569 \ud14c\uc2a4\ud2b8&#8230;)<\/td><\/tr><tr><td>\uc791\uc740 \ub2e8\uc704 \ubc30\ud3ec(\ubd84\ud560\uc815\ubcf5!. \uc624\ub958 \ud655\ub960 \ub0ae\uc544\uc9d0)<\/td><td>\ub300\uae30\uc2dc\uac04\uc774 \uae34 \uacbd\uc6b0.(\ub2e4\ub978 \uae30\ub2a5\uc5d0 \uc758\uc874\ud574\uc11c \ub300\uae30)<\/td><\/tr><tr><td>\ucd08 \ube60\ub978 \ubc30\ud3ec \uac00\ub2a5<\/td><td>\ubc84\uadf8\uac00 \ubc30\ud3ec\ub420 \ud655\ub960\uc774 \ub192\uc544\uc9d0(QA \uc5c6\uc74c)<\/td><\/tr><tr><td>TDD(or Test) \ud544\uc218<\/td><td>\ucf54\ub4dc \ub9ac\ubdf0\ub294 \uc5b4\ub5bb\uac8c?<br>QA \uc804\ub7b5\uc5d0 \ub300\ud55c \uace0\ubbfc(\uce74\ub098\ub9ac\ub85c \ucee4\ubc84\ud558\ub098?)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>\ubc30\ud3ec \ud06c\uae30\uac00 \uc791\uc73c\ub2c8 \ubb38\uc81c\ub3c4 \uc791\ub2e4! \ube68\ub9ac \ubc30\ud3ec\ud574\uc11c \ub098\uac00\uc790!<\/p>\n<\/blockquote>\n\n\n\n<h2 id=\"%EA%B7%B8-%EC%99%B8-%EC%A0%84%EB%9E%B5%EB%93%A4\">\uadf8 \uc678 \uc804\ub7b5\ub4e4<\/h2>\n\n\n\n<ul>\n<li>Multi production brach\n<ul>\n<li>\ud328\ud0a4\uc9c0 \ucabd\uc5d0\uc11c \ub9ce\uc774 \uc0ac\uc6a9\ud568.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 id=\"forking-%EC%A0%84%EB%9E%B5-vs-branching-%EC%A0%84%EB%9E%B5\">forking \uc804\ub7b5 vs branching \uc804\ub7b5<\/h2>\n\n\n\n<ul>\n<li>forking \uc804\ub7b5\n<ul>\n<li>\ud504\ub85c\uc81d\ud2b8 \uba64\ubc84\uac00 \uc544\ub2c8\uc5ec\ub3c4 \ucc38\uc5ec(\uae30\uc5ec) \uac00\ub2a5<\/li>\n\n\n\n<li>\uc624\ud508\uc18c\uc2a4<\/li>\n\n\n\n<li>\ube0c\ub79c\uce58 \uad00\ub9ac\ub97c \uc704\ud55c \ud53c\ub85c\ub3c4\uac00 \uc788\uc74c.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>branching \uc804\ub7b5\n<ul>\n<li>\uc870\uc9c1(ex: \ud68c\uc0ac) \ub0b4\uc5d0\uc11c \uad6c\uc131\uc6d0\ub4e4\ub07c\ub9ac \ud611\uc5c5\ud558\ub294 \uacbd\uc6b0<\/li>\n\n\n\n<li>\uad8c\ud55c\uc774 \uc5c6\ub294 \uc0ac\ub78c\uc740 \uba40 \ud560 \uc218\uac00 \uc5c6\uc74c.<\/li>\n\n\n\n<li>\ube0c\ub79c\uce58 \uad00\ub9ac\uac00 \uc0c1\ub300\uc801\uc73c\ub85c \uc26c\uc6c0<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 id=\"Jordand%EC%9D%98-%EA%B2%BD%ED%97%98\">Jordan\uc758 \uacbd\ud5d8<\/h2>\n\n\n\n<ul>\n<li>0: \ubb34\uc804\ub7b5<\/li>\n\n\n\n<li>1: git-flow<\/li>\n\n\n\n<li>2: git-flow(branching \uc804\ub7b5) + PR + CI\/CD Pipeline<\/li>\n<\/ul>\n\n\n\n<h2 id=\"%EC%A7%80%EA%B8%88-GX%EB%8A%94?\">\uc9c0\uae08 \ub2e4\ub2c8\ub294 \ud68c\uc0ac\ub294?<\/h2>\n\n\n\n<p>git-flow + &#8220;PR, Github Actions&#8221; +&nbsp;<code>forking \uc804\ub7b5<\/code>&nbsp;\uc870\ud569 \ud615\ud0dc<\/p>\n\n\n\n<ul>\n<li>\ub9ce\uc740 \ud68c\uc0ac\ub4e4\uc774 \uc774 \uc870\ud569\uc73c\ub85c \uc6b4\uc601\ub418\uace0 \uc788\uc74c.<\/li>\n\n\n\n<li>dev -&gt; qa -&gt; staging -&gt; production(&lt;- hotfix) \ub9cc\uc871\ud560\ub824\uba74 git-flow\uac00 \uc798 \ub9de\uc544 \ubcf4\uc784<\/li>\n<\/ul>\n\n\n\n<h2 id=\"GX%EC%97%90%EC%84%9C-%EC%83%9D%EA%B0%81%ED%95%A0-%EC%A0%90\">\uc9c0\uae08 \ub2e4\ub2c8\ub294 \ud68c\uc0ac\uc5d0\uc11c \uc0dd\uac01\ud560 \uc810<\/h2>\n\n\n\n<ul>\n<li>dev -&gt; qa -&gt; staging -&gt; production(&lt;- hotfix)<\/li>\n\n\n\n<li>dev2, qa2 \ud658\uacbd \ubcc4\ub85c \ube0c\ub79c\uce58\uac00 \uc874\uc7ac<\/li>\n\n\n\n<li><code>release<\/code>&nbsp;\ube0c\ub79c\uce58\ub97c \uc801\uc808\ud558\uac8c \uc774\uc6a9\ud558\uc9c0 \ubabb\ud558\uace0 \uc788\uc74c.\n<ul>\n<li>QA \ubc84\uadf8 \ud53d\uc2a4 \uc2dc&nbsp;<code>dev<\/code>\uac00 \uc544\ub2cc&nbsp;<code>release<\/code>\uc5d0 \uc791\uc5c5\ud558\ub294 \uac83\uc744 \uc88b\uc744 \uac83 \uac19\uc74c.<\/li>\n\n\n\n<li>Staging \ubc30\ud3ec \uc2dc \uace0\ubbfc(<code>release<\/code>&nbsp;vs&nbsp;<code>main<\/code>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>forking \uc804\ub7b5<\/code>&nbsp;\uc774\uc81c \uadf8\ub9cc&nbsp;<code>branching \uc804\ub7b5<\/code>\uc73c\ub85c \uac00\ub294 \uac83\uc774 \ub0ab\ub2e4.\n<ul>\n<li>\ud68c\uc0ac\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8 \ud558\ub294\ub370 \uad73\uc774&nbsp;<code>forking<\/code>\ub85c \ud560 \uc2dc \uc7a5\uc810\uc774 \uc5c6\uc74c.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 id=\"%EC%A0%95%EB%8B%B5%EC%9D%80-%EC%97%86%EB%8B%A4.\">\uc815\ub2f5\uc740 \uc5c6\ub2e4.<\/h2>\n\n\n\n<p>\ubb38\ud654, \uc0c1\ud669, \ucf54\ub4dc, \uad6c\uc131\uc6d0\ub4e4 \uc870\ud569\uc5d0 \ub530\ub77c\uc11c \ub2ec\ub77c\uc9d0<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>\uc798 Research \ud574\uc11c \uc0ac\uc6a9\ud558\uc790~<\/p>\n<\/blockquote>\n\n\n\n<h2 id=\"Refs.\">Refs.<\/h2>\n\n\n\n<ul>\n<li><a target=\"_blank\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/comparing-workflows\/gitflow-workflow\" rel=\"noreferrer noopener\">https:\/\/www.atlassian.com\/git\/tutorials\/comparing-workflows\/gitflow-workflow<\/a><\/li>\n\n\n\n<li><a target=\"_blank\" href=\"https:\/\/docs.github.com\/en\/get-started\/using-github\/github-flow\" rel=\"noreferrer noopener\">https:\/\/docs.github.com\/en\/get-started\/using-github\/github-flow<\/a><\/li>\n\n\n\n<li><a target=\"_blank\" href=\"https:\/\/www.linkedin.com\/pulse\/gitlab-flow-jadson-santos\" rel=\"noreferrer noopener\">https:\/\/www.linkedin.com\/pulse\/gitlab-flow-jadson-santos<\/a><\/li>\n\n\n\n<li><a target=\"_blank\" href=\"https:\/\/about.gitlab.com\/blog\/2023\/07\/27\/gitlab-flow-duo\/\" rel=\"noreferrer noopener\">https:\/\/about.gitlab.com\/blog\/2023\/07\/27\/gitlab-flow-duo\/<\/a><\/li>\n\n\n\n<li><a target=\"_blank\" href=\"https:\/\/blog.programster.org\/git-workflows\" rel=\"noreferrer noopener\">https:\/\/blog.programster.org\/git-workflows<\/a><\/li>\n\n\n\n<li><a target=\"_blank\" href=\"https:\/\/launchdarkly.com\/blog\/git-branching-strategies-vs-trunk-based-development\/\" rel=\"noreferrer noopener\">https:\/\/launchdarkly.com\/blog\/git-branching-strategies-vs-trunk-based-development\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>git-flow git-flow Development git-flow QA Release Staging \ubc30\ud3ec \uc804\ub7b5 main&nbsp;&lt;-&nbsp;release\/7.1.0 Production \ud658\uacbd\uc5d0 \ub098\uac00\uae30 \uc804\uc5d0 \uac00\uc7a5 \uc644\ubcbd\ud55c \ubc29\ubc95\uc73c\ub85c \ud14c\uc2a4\ud2b8 \uac00\ub2a5Staging \ud658\uacbd QA \uc911 \ubc84\uadf8\uac00 \ubc1c\uacac\ub418\uba74 \ubc84\uc800\ub2dd\uc744 \ub2e4\uc2dc \ud574\uc57c\ud568.\ucda9\ub3cc \uac00\ub2a5\uc131 \uc874\uc7ac release\/7.1.0&nbsp;&lt;-&nbsp;main Staging \ud658\uacbd QA \uc911 \ubc84\uadf8\uac00 \ubc1c\uacac\ub418\uc5b4\ub3c4 \ube0c\ub79c\uce6d \ud53c\ub85c\uac10\uc774 \uc5c6\uc74c\ucd94\ud6c4&nbsp;release\/7.1.0&nbsp;-merge-&gt;&nbsp;main&nbsp;\uc2dc \ucda9\ub3cc \uc5c6\uc74c. git-flow Hotfix git-flow on Sourcetree Keymap:&nbsp;CMD + OPT + F github-flow \ucd9c\ucc98:&nbsp;https:\/\/www.youtube.com\/watch?v=cP0I9w2coGU main: \uae30\ubcf8 &#8230; <a title=\"git-flow \ubcc4 \ubc30\ud3ec \uc804\ub7b5\" class=\"read-more\" href=\"https:\/\/redutan.synology.me\/wordpress\/2024\/04\/19\/git-flow-%eb%b0%b0%ed%8f%ac-%ec%a0%84%eb%9e%b5\/\" aria-label=\"Read more about git-flow \ubcc4 \ubc30\ud3ec \uc804\ub7b5\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":217,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[28],"tags":[34,35,11,30,31,32,33],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/191"}],"collection":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/comments?post=191"}],"version-history":[{"count":12,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/191\/revisions"}],"predecessor-version":[{"id":231,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/191\/revisions\/231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/media\/217"}],"wp:attachment":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/media?parent=191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/categories?post=191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/tags?post=191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}