์ค๋ต๊น ๐ช - ํ์ ํธ #2: PR ์์ฑ ์ ๋ฆฌ๋ทฐ์ด ์๋ ์ง์ ํ๋ ๋ฒ (CODEOWNERS ํ์ฉ)
by its_TIMI๐น GitHub PR ์์ฑ ์ ๋ฆฌ๋ทฐ์ด ์๋ ์ง์ ํ๋ ๋ฒ ๐
1๏ธโฃ ๋งค๋ฒ ๋ฆฌ๋ทฐ์ด๋ฅผ ์ง์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋กญ๋ค๋ฉด?
GitHub์์ PR์ ์์ฑํ ๋ ๋งค๋ฒ ๋ฆฌ๋ทฐ์ด๋ฅผ ์ง์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ท์ฐฎ๊ฑฐ๋ ๊น๋จน๋๋ค๋ฉด
CODEOWNERS ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ฆฌ๋ทฐ์ด๋ฅผ ์๋์ผ๋ก ๋ฐฐ์ ํ ์ ์๋ค.
“๋ด๊ฐ ์์ ํ ํ์ผ์ ๋ํด ์๋์ผ๋ก ์ฝ๋ ๋ฆฌ๋ทฐ์ด๋ฅผ ์ง์ ํ ์ ์์๊น?”
“๋งค๋ฒ ์๋์ผ๋ก ๋ฆฌ๋ทฐ์ด๋ฅผ ์ถ๊ฐํ๋ ๊ณผ์ ์ด ๋ฒ๊ฑฐ๋ก์ด๋ฐ, ์๋ํํ๋ ๋ฐฉ๋ฒ์ด ์์๊น?”
โ ๊ทธ ํด๋ต์ด ๋ฐ๋ก GitHub์ CODEOWNERS ๊ธฐ๋ฅ์ด๋ค.
์ด ๊ธ์์๋ CODEOWNERS ํ์ผ์ ์ค์ ํ์ฌ PR ์์ฑ ์ ๋ฆฌ๋ทฐ์ด๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.
2๏ธโฃ CODEOWNERS๋?
GitHub์ CODEOWNERS ํ์ผ์ ํน์ ๋๋ ํ ๋ฆฌ๋ ํ์ผ์ ๋ํด
PR์ด ์์ฑ๋ ๋ ์๋์ผ๋ก ๋ฆฌ๋ทฐ์ด๋ฅผ ๋ฐฐ์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฆ, “์ด ํ์ผ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก ์ด ์ฌ๋์๊ฒ ๋ฆฌ๋ทฐ ์์ฒญ์ ๋ณด๋ธ๋ค!” ๋ผ๊ณ ์ค์ ํ๋ ๊ฒ์ด๋ค.
โ ์๋ฅผ ๋ค์ด ์ด๋ฐ ์ํฉ์์ ์ ์ฉํ๋ค.
• backend/ ๋๋ ํ ๋ฆฌ์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ๋ฐฑ์๋ ํ์ด ์๋์ผ๋ก ๋ฆฌ๋ทฐ ์์ฒญ์ ๋ฐ์
• frontend/ ๋๋ ํ ๋ฆฌ๋ ํ๋ก ํธ์๋ ํ์๊ฒ ๋ฆฌ๋ทฐ ์์ฒญ์ด ๊ฐ๋๋ก ์ค์
• config/ ํ์ผ์ด ๋ณ๊ฒฝ๋๋ฉด DevOps ๋ด๋น์์๊ฒ ์๋ ํ ๋น
• README.md ํ์ผ์ด ์์ ๋๋ฉด ๋ฌธ์ ๋ด๋น์์๊ฒ ์๋ ๋ฆฌ๋ทฐ ์์ฒญ
์ฆ, ํ ํ์ ์ ์งํํ ๋ ํน์ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ํ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ด๋น์๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
์ด์ ์ค์ ๋ก ์ด๋ป๊ฒ ์ค์ ํ๋์ง ์์๋ณด์.
3๏ธโฃ CODEOWNERS ์ค์ ๋ฐฉ๋ฒ
(1) CODEOWNERS ํ์ผ ์์ฑํ๊ธฐ
CODEOWNERS ํ์ผ์ ํ๋ก์ ํธ์ .github/ ๋๋ ํ ๋ฆฌ์ ์์นํด์ผ ํ๋ค.
mkdir -p .github
touch .github/CODEOWNERS
โ ๊ธฐ์กด์ .github ํด๋๊ฐ ์๋ค๋ฉด ์๋ตํ๊ณ ํ์ผ๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
(2) CODEOWNERS ํ์ผ ์์ฑํ๊ธฐ
์ด์ CODEOWNERS ํ์ผ์ ์ด์ด, ์๋ ๋ฆฌ๋ทฐ์ด ์ง์ ๊ท์น์ ์ถ๊ฐํ๋ค.
# ํน์ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์ ๋ํ ์๋ ๋ฆฌ๋ทฐ์ด ์ง์
# ๋ฐฑ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ์ด ์๋ ์ง์
/backend/ @backend-team
# ํ๋ก ํธ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ์ด ์๋ ์ง์
/frontend/ @frontend-team
# DevOps ๋ด๋น์ ์๋ ์ง์
/config/ @devops-team
# ํน์ ํ์ผ ๋ด๋น์ ์ง์
README.md @docs-team
๐ ์ค์ ๊ท์น ์ ๋ฆฌ
โ backend/ ๋๋ ํ ๋ฆฌ๊ฐ ์์ ๋๋ฉด @backend-team์ด ์๋ ๋ฆฌ๋ทฐ์ด๋ก ์ถ๊ฐ๋จ
โ config/ ํด๋์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด @devops-team์ด ๋ฆฌ๋ทฐ์ด๋ก ์ถ๊ฐ๋จ
โ README.md ํ์ผ์ด ์์ ๋๋ฉด @docs-team์ด ๋ฆฌ๋ทฐ์ด๋ก ์๋ ์ง์ ๋จ
๐ก ํน์ ํ์ด ์๋๋ผ ๊ฐ์ธ ์ฌ์ฉ์๋ ์ง์ ํ ์ ์๋ค.
/backend/ @backend-team @itstimi-XD
โ ๋ฐฑ์๋ ํ ์ ์ฒด + itstimi-XD ์ฌ์ฉ์์๊ฒ ๋ฆฌ๋ทฐ ์์ฒญ
๐ ํ(@backend-team)๊ณผ ๊ฐ์ธ(@username) ๋ชจ๋ ์ง์ ๊ฐ๋ฅํ๋ค.
(3) CODEOWNERS ํ์ผ ์ปค๋ฐํ๊ณ ์ ์ฉํ๊ธฐ
ํ์ผ์ ์ ์ฅํ ํ, Git์ ๋ฐ์ํ๋ค.
git add .github/CODEOWNERS
git commit -m "Add CODEOWNERS for auto reviewer assignment"
git push origin main
โ ์ด์ GitHub์์ PR์ ์์ฑํ๋ฉด, ์๋์ผ๋ก ๋ฆฌ๋ทฐ์ด๊ฐ ๋ฐฐ์ ๋๋ค! ๐
4๏ธโฃ ์ค์ ๋ก ์ด๋ป๊ฒ ๋์ํ ๊น?
์ด์ PR์ ์์ฑํด๋ณด๋ฉด, ์ค๋ฅธ์ชฝ Reviewers ์น์ ์ ์๋์ผ๋ก ๋ฆฌ๋ทฐ์ด๊ฐ ์ถ๊ฐ๋๋ค.
๐ ์๋ ๋ฆฌ๋ทฐ์ด ์ง์ ์์
โ ๋ฐฑ์๋ ์ฝ๋ ์์ → @backend-team์ด ์๋ ๋ฆฌ๋ทฐ์ด๋ก ์ถ๊ฐ๋จ
โ config/ ๋๋ ํ ๋ฆฌ ์์ → @devops-team์ด ์๋ ๋ฆฌ๋ทฐ์ด๋ก ์ถ๊ฐ๋จ
โ README.md ์์ → @docs-team์ด ๋ฆฌ๋ทฐ์ด๋ก ์๋ ์ง์ ๋จ
๐ก ์ด์ ๋ฆฌ๋ทฐ์ด๋ฅผ ์ผ์ผ์ด ์ถ๊ฐํ ํ์ ์์ด GitHub๊ฐ ์์์ ํด์ค๋ค!
5๏ธโฃ CODEOWNERS ํ์ผ์ ํ์ฉํ ๋ ์ฃผ์ํ ์
๐จ CODEOWNERS๊ฐ ์ ์์ ์ผ๋ก ์ ์ฉ๋์ง ์๋๋ค๋ฉด?
CODEOWNERS ํ์ผ์ด ์ ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ, ์๋ ์ฌํญ์ ํ์ธํด๋ณด์.
โ ํ์ผ ์์น๊ฐ .github/CODEOWNERS์ ์ ํํ๊ฒ ์ ์ฅ๋์๋๊ฐ?
โ ์ง์ ํ ๋ฆฌ๋ทฐ์ด(@username ๋๋ @team)๊ฐ ํด๋น ํ๋ก์ ํธ์ Collaborator ๋๋ Team์ผ๋ก ๋ฑ๋ก๋์ด ์๋๊ฐ?
โ ํ์ผ ํ์์ด ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑ๋์๋๊ฐ? (ํญ์ด ์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ, ํน์๋ฌธ์ ์์ด ์์ฑ)
๐ GitHub์ ๊ถํ ์ ์ฑ ์ ๋ฐ๋ผ CODEOWNERS ๊ธฐ๋ฅ์ด ์ผ๋ถ ์ ํ๋ ์๋ ์์ผ๋, ์ค์ ํ ํ ์คํธํด๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค.
6๏ธโฃ CODEOWNERS๋ฅผ ํ์ฉํ ์ฝ๋ ๋ฆฌ๋ทฐ ์๋ํ
์ด์ CODEOWNERS ํ์ผ์ ํ์ฉํ์ฌ PR ๋ฆฌ๋ทฐ์ด ์๋ ๋ฐฐ์ ์ ์ค์ ํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์์ฒญํ ๋๋ ์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น? ๐ค
โ PR ์์ฑ ์ ๋ฆฌ๋ทฐ์ด์๊ฒ ์ง์ค์ ์ผ๋ก ํ์ธํ ๋ถ๋ถ์ ์์ฒญํ๋ ๊ฒ์ด ์ค์ํ๋ค.
โ ๊ด๋ จ ๋ด์ฉ์ “GitHub์์ ๋ฆฌ๋ทฐ์ด ์์ฒญํ๋ ๋ฒ๊ณผ ํจ๊ณผ์ ์ธ ์ฝ๋ ๋ฆฌ๋ทฐ ์์ฒญ ๊ฐ์ด๋” (ํ์ ํธ #1)์์ ์์ธํ ๋ค๋ฃจ๊ณ ์๋ค.
๐ PR ์๋ ๋ฆฌ๋ทฐ์ด ์ง์ + ํจ๊ณผ์ ์ธ ๋ฆฌ๋ทฐ ์์ฒญ์ ํจ๊ป ์ ์ฉํ๋ฉด ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค๋ฅผ ๋์ฑ ์ํํ๊ฒ ๋ง๋ค ์ ์๋ค! ๐
๐ ๊ฒฐ๋ก
โ CODEOWNERS ํ์ผ์ ํ์ฉํ๋ฉด PR ์์ฑ ์ ์๋์ผ๋ก ๋ฆฌ๋ทฐ์ด๊ฐ ๋ฐฐ์ ๋ ์ ์๋ค.
โ ํน์ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ํด ๋ด๋น์๋ฅผ ๋ฏธ๋ฆฌ ์ค์ ํ์ฌ, ํ์ ์ ๋์ฑ ์ํํ๊ฒ ํ ์ ์๋ค.
โ GitHub์ ํ์ ๊ธฐ๋ฅ์ ์ ๊ทน ํ์ฉํ๋ฉด ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค!
๐ฅ ์๋ํ๋ ๋ฆฌ๋ทฐ์ด ์ง์ ์ผ๋ก GitHub ํ์ ์ ๋์ฑ ์ค๋งํธํ๊ฒ ์ฌ์ฉํด๋ณด์! ๐
'์ค๋ต ๊น๐ช > ํ์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Dev_TIMI
its_TIMI