์›๋”์›” ํ…ŒํฌํŒ€ ์ฝ”๋“œ๋ฆฌ๋ทฐ์˜ ์—ญ์‚ฌ

kimsg
  • #wonderwall
  • #fromm
  • #code review
  • #์ฝ”๋“œ๋ฆฌ๋ทฐ
  • #github
  • #codestream
  • #jira

๋“ค์–ด๊ฐ€๋ฉฐ

์›๋”์›” ํ…ŒํฌํŒ€์€ ํƒœ์ดˆ๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์—…๋ฌด์— ์žˆ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฐฉ์‹์œผ๋กœ ์ด์–ด์ ธ ์˜จ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.
ํ•ญ์ƒ ๋” ๋‚˜์€ ๋ฐฉํ–ฅ๊ณผ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋ณ€ํ™”ํ•˜๊ณ ๋ฅผ ๋ฐ˜๋ณต ์ค‘ ์ž…๋‹ˆ๋‹ค.
์ฝ”๋“œ๋ฆฌ๋ทฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ช‡ ๋…„์— ๊ฑธ์ณ ๋ณ€ํ™”๋˜์–ด ์™”์œผ๋ฉฐ, ์•ž์œผ๋กœ๋„ ๋งŽ์€ ๋ณ€ํ™”๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ํ˜„์žฌ๊นŒ์ง€์˜ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ณด๊ณ  ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

ํƒœ์ดˆ

ํƒœ์ดˆ์— 1์ธ ๊ฐœ๋ฐœ ์ฒด๊ณ„์—์„œ๋Š” ์ฝ”๋“œ๋ฆฌ๋ทฐ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜ผ์ž ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๋œฏ์–ด๋ณด๊ฑฐ๋‚˜ ํšŒ๊ณ ๋ฅผ ํ•ด๋ณด๊ฑฐ๋‚˜ ํ•  ์ˆ˜๋Š” ์žˆ์—ˆ์ง€๋งŒ, ํŒ€์›์ด ์—†์—ˆ์œผ๋‹ˆ ์Šฌํ”„์ง€๋งŒ ๋‹น์—ฐํ•˜๊ฒŒ๋„ ํŒ€ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋Š” ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์œ ๋…„๊ธฐ (์‹œ์ž‘)

๋‘ ๋ช…์ด ํ•ฉ๋ฅ˜ํ•ด, ํŒ€์ด ์„ธ ๋ช…์ด ๋˜์—ˆ์„ ๋•Œ ํŒ€ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹œ์— ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ๋งŒ ํ•œ ์ฝ”๋“œ๋ฆฌ๋ทฐ ํˆด์„ ์ฐพ์•„๋‹ค๋‹ˆ๋˜ ์ค‘, New Relic CodeStream ์ด๋ผ๋Š” ์˜คํ”ˆ์†Œ์Šค๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
CodeStream์€ VSCode ์ต์Šคํ…์…˜, JetBrains ๊ณ„์—ด IDE์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ œ๊ณต๋˜์–ด ๋‹น์‹œ ํŒ€์›๋“ค์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์†์‰ฝ๊ฒŒ ์ ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ IDE์—์„œ ๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ๋“œ๋ž˜๊ทธํ•ด์„œ ์ด์Šˆ๋ฅผ ๋‚จ๊ธฐ๊ณ , ๋ˆ„๊ตฐ๊ฐ€ ๋‚จ๊ธด ์ด์Šˆ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฐ”๋กœ ์ฝ”๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜๊ณ ,
์ต์Šคํ…์…˜ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜์–ด IDE์— ๋ถ™์–ด์žˆ๋‹ค๋ณด๋‹ˆ ์ฝ”๋”ฉ์ค‘์—๋„ ์•Œ๋ฆผ์„ ๋†“์น˜์ง€ ์•Š๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ๋น ๋ฅธ ์—…๋ฌด ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

(์ถœ์ฒ˜: codestream.com)

์„ฑ์žฅ๊ธฐ (๋ณ€ํ™”)

์„œ๋น„์Šค๊ฐ€ 2๋…„์ฐจ ์ •๋„ ๋˜๊ณ , ๊ฐ ํŒ€๋ณ„๋กœ 2 ~ 3์ธ ์ผ ๋•Œ ๊นŒ์ง€๋Š” CodeStream์œผ๋กœ ๊ทธ๋Ÿญ์ €๋Ÿญ ๋ฒ„ํ‹ธ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํšŒ์‚ฌ๊ฐ€ ์„ฑ์žฅํ•˜๋ฉฐ ์„œ๋น„์Šค๊ฐ€ ์ปค์ง€๊ณ  ์™ธ๋ถ€ํŒ€(๊ธฐํš, ์šด์˜, ๋””์ž์ธ ๋“ฑ)๊ณผ๋„ ์ฒด๊ณ„์ ์œผ๋กœ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์ด ์ƒ๊ฒผ๊ณ 
ํ…ŒํฌํŒ€ ๋‚ด๋ถ€์—์„œ๋„ ์ƒˆ๋กœ์šด ํŒ€์ด ์ƒ๊ธฐ๊ณ , ํŒ€์›์ด ๋Š˜์–ด๋‚˜๊ณ , ์—…๋ฌด๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์Œ“์—ฌ๊ฐ์— ๋”ฐ๋ผ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ํŒ€๊ณผ์˜ ํ˜‘์—…์„ ์œ„ํ•ด Jira ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , Jira ํ‹ฐ์ผ“๊ณผ GitHub ๋ธŒ๋žœ์น˜๋ฅผ ์—ฐ๊ฒฐํ•˜๊ฒŒ ํ•˜๋ฉด์„œ ์ด ์‹œ๊ธฐ์— ๋งž์ถฐ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋„ GitHub Pull Request(PR)๋กœ ์˜ฎ๊ธฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ CodeStream ์—์„œ๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ค์› ๊ณ , ๋ฆฌ๋ทฐ ํ›„์— ์•„์นด์ด๋ธŒ๊ฐ€ ๋˜๊ธดํ–ˆ์ง€๋งŒ ํŒ€๋‚ด์—์„  ํœ˜๋ฐœ๋˜๋Š” ๋Š๋‚Œ์ด ๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
(์ €ํฌํŒ€์ด ์ œ๋Œ€๋กœ ์‚ฌ์šฉ์„ ๋ชปํ–ˆ๊ฑฐ๋‚˜, ํ˜„์žฌ๋Š” ๋งŽ์ด ๊ฐœ์„ ๋˜์—ˆ์„ ์ˆ˜ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)
ํ•˜์ง€๋งŒ GitHub PR์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ์ฝ”๋“œ์™€ ๋ฆฌ๋ทฐ๊ฐ€ ํ•œ ๊ณณ์— ์‘์ง‘๋˜๊ณ , ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ณ  ์ƒˆ๋กœ์šด ํŒ€์›์ด ๋“ค์–ด์™€๋„ ํžˆ์Šคํ† ๋ฆฌ ์ถ”์ ์ด ํŽธํ•ด์ง‘๋‹ˆ๋‹ค.

GitHub ๋ธŒ๋žœ์น˜ ์‚ฌ์šฉ ์ „๋žต, Jira ์‚ฌ์šฉ ์ „๋žต, ์ฝ”๋“œ๋ฆฌ๋ทฐ ๊ทœ์น™ ๋“ฑ์„ ๋ฌธ์„œ๋กœ ์ •๋ฆฝํ–ˆ๊ณ  ๋ชจ๋“  ํŒ€์›์ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฆฌ๋ทฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋•Œ ์ •๋ง ๋งŽ์€ ์กฐ์‚ฌ๋ฅผ ํ•˜๊ณ  ๋‹ค๋ฅธ ํšŒ์‚ฌ์˜ ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉฐ ์šฐ๋ฆฌํŒ€์— ๋งž๋Š” ์ข‹์€ ์ ๋“ค์„ ๋„์ž…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๊นŒ์ง€ ์‚ฌ์šฉ ์ค‘์ธ ๋ช‡ ๊ฐ€์ง€ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๊ทœ์น™์„ ์†Œ๊ฐœํ•˜์ž๋ฉด

  1. 300์ค„ ์ดํ•˜์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋ฆฌ๋ทฐ ์š”์ฒญ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถˆ๊ฐ€ํ”ผํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ตœ๋Œ€ํ•œ 300์ค„ ์ดํ•˜๋กœ ๋ฆฌ๋ทฐ๋ฅผ ์š”์ฒญํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐํ•  ์ฝ”๋“œ์˜ ์–‘์ด ๋งŽ์„ ์ˆ˜๋ก ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ  ์ง‘์ค‘๋ ฅ์ด ๋–จ์–ด์ง€๋ฉฐ ์ฝ”๋“œ๋ฆฌ๋ทฐ ํ’ˆ์งˆ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.
  1. ๋ฆฌ๋ทฐ ์š”์ฒญ์ž๋Š” ๋ฆฌ๋ทฐ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ผ๋ฒจ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • priority: hotfix
  • priority: high
  • priority: medium
  • priority: low

์ด ์™ธ์—๋„ ๊ฐ ํŒ€์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋ผ๋ฒจ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฆฌ๋ทฐ ์ž‘์„ฑ์ž๋Š” ๋ฆฌ๋ทฐ ์ค‘์š”๋„(Wn)๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • W1 : ์˜ค๋ฅ˜๋‚˜ ๋ฒ„๊ทธ ๋“ฑ ๊ผญ ๋ฐ˜์˜ํ•ด์•ผํ•˜๋Š” ๋ฆฌ๋ทฐ (Request Changes)
  • W2 : ์ ๊ทน์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜๊ธธ ๋ฐ”๋ผ๋Š” ๋ฆฌ๋ทฐ (Request Changes)
  • W3 : ์›ฌ๋งŒํ•˜๋ฉด ๋ฐ˜์˜ํ•˜๊ธธ ๋ฐ”๋ผ๋Š” ๋ฆฌ๋ทฐ (Comment)
  • W4 : ๋ฐ˜์˜ํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์€ ๋ฆฌ๋ทฐ (Approve)
  • W5 : ์‚ฌ์†Œํ•œ ์˜๊ฒฌ (Approve)

W1, W2๊ฐ€ ํฌํ•จ๋˜๋ฉด Request Changes๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ๋ฆฌ๋ทฐ ์ž‘์„ฑ์ž๊ฐ€ ์ˆ˜์ •์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ณ  resolve ํ•ฉ๋‹ˆ๋‹ค.


W3๊ฐ€ ํฌํ•จ๋˜๋ฉด Comment, W4, W5๊ฐ€ ํฌํ•จ๋˜๋ฉด Approve๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒ๊ธด๊ฒฝ์šฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์ž๊ฐ€ ์ˆ˜์ •์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ณ  resolve ํ•˜๊ณ , ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฆฌ๋ทฐ ์š”์ฒญ์ž๊ฐ€ ๊ฐ„๋‹จํ•œ ์ฝ”๋ฉ˜ํŠธ ํ›„ resolve ํ•ฉ๋‹ˆ๋‹ค.

  1. PR ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ
  • ๊ธฐํš์„œ, ํ”ผ๊ทธ๋งˆ, ์ง€๋ผ ๋“ฑ์˜ ๋งํฌ
  • ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ
  • ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„
  • ์ตœ์ข… ๋ฐฐํฌ ์ผ์ •

์ด ์™ธ์—๋„ ๊ฐ ํŒ€์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•ญ๋ชฉ์„ ํ…œํ”Œ๋ฆฟ(.github/PULL_REQUEST_TEMPLATE.md)์— ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ (๊ณ„์† ๋ณ€ํ™” ์ค‘)

์•ž ๋ถ€๋ถ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์›๋”์›” ํ…ŒํฌํŒ€์˜ ์—…๋ฌด ๋ฐฉ์‹์€ ๊ณ„์†ํ•ด์„œ ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ญ์ƒ ์˜ณ์€ ๋ฐฉํ–ฅ์ผ ์ˆ˜๋Š” ์—†๋”๋ผ๋„ ๊ณ„์† ๋ณ€ํ™”ํ•˜๊ณ  ๋” ๋‚˜์€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋ ค๋Š” ๋งˆ์Œ๊ฐ€์ง์ด ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์š”์ฆ˜์€ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์ž๊ฐ€ ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์น™์ด๋‚˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์— ๋Œ€ํ•ด ์—ฐ๊ตฌ ์ค‘ ์ž…๋‹ˆ๋‹ค.
์ •๋ฆฌ๊ฐ€ ๋œ๋‹ค๋ฉด ์ถ”ํ›„์— ๋˜ ์ƒˆ๋กœ์šด ๊ธ€๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Art Changes Life

๋…ธ๋จธ์Šค์™€ ํ•จ๊ป˜ ์—”ํ„ฐํ…Œํฌ ์‚ฐ์—…์„ ํ˜์‹ ํ•ด๋‚˜๊ฐˆ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ์ค‘์ธ ๊ณต๊ณ  ๋ณด๊ธฐ