
๋จ์ํ ์ฝ๋๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก Git์ ์ฌ์ฉํ๋ ๋จ๊ณ๋ฅผ ๋์ด, 6๋ช ์ ํ์์ด ์ ๊ธฐ์ ์ผ๋ก ์์ง์ด๋ '์ง์ง ํ๋ก์ ํธ'์ ์ ์ด๋ค๋ฉด ์ฐ๋ฆฌ๋ ํฐ ๊ณ ๋ฏผ์ ๋น ์ง๋๋ค. "๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์นจ๋ฒํ๋ฉด ์ด์ฉ์ง?", "ํ์๋ค์ด ๊ฐ์ ์์ ํ ์์ญ ๊ฐ์ ํ์ผ์ ์ด๋ป๊ฒ ํ๋๋ก ์์ ํ๊ฒ ํฉ์น ์ ์์ง?" ๋ฑ ๊ณผ ๊ฐ์ ์ง๋ฌธ๋ค์ด ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌธ๋ค. ํนํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ฒ๋ผ ํ๋ก ํธ์๋์ ๋ฐฑ์๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ์ด ๋ณต์กํ๊ฒ ์ฝํ ์๋ ํ๋ก์ ํธ๋ผ๋ฉด, ๋๊ตฐ๊ฐ ํ ๋ช ์ ์ค์๋ก ์ธํด ์ ์ฒด ํ๋ก์ ํธ๊ฐ ๊ตฌ๋๋์ง ์๋ ์์ '๋น๋ ๊นจ์ง' ํ์์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๊ณค ํฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 'ํ์ฅ๊ณผ ํ์์ ์ค์ ํ์ ์๋๋ฆฌ์ค'๋ ๋ฐ๋ก ์ด๋ฌํ ๋ถ์ํจ์ ํด์ํ๊ณ , ํ๋ก์ ํธ์ ์์ ์ฑ์๊ทน๋ํํ๊ธฐ ์ํ ํต์ฌ ์ฅ์น์ ๋๋ค. ์ฌ๊ธฐ์ ํ์ฅ๊ณผ ํ์์ ๋จ์ํ ์ง๊ธ์ ์ฐจ์ด๊ฐ ์๋๋ผ, ์ฝ๋ ์์ฐ๊ณผ ํ์ง ๊ด๋ฆฌ๋ผ๋ ๋ช ํํ ์ญํ ๋ถ๋ด์ ์๋ฏธํฉ๋๋ค. ํ์์ ์์ ์ ์ด๋์ ๋ธ๋์น๋ผ๋ ๋ ๋ฆฝ๋ ์คํ์ค์์ ์์ ๋กญ๊ฒ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ํ ์คํธํฉ๋๋ค. ์ด๊ณณ์ ์ธ๋ถ์ ๊ฐ์ญ์ด ์๋ ๊ณต๊ฐ์ด๊ธฐ์ ๊ณผ๊ฐํ ์๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ฉด, ํ์ฅ์ ํ๋ก์ ํธ์ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ธ main ๋ธ๋์น๋ฅผ ์งํค๋ '๋ฌธ์ง๊ธฐ'์ญํ ์ ์ํํฉ๋๋ค. ํ์๋ค์ด ๊ฐ์์ ๊ณต๊ฐ์์ ๋ณด๋ด์จ ์ฝ๋๋ค์ ๊ฒ์ฆํ๊ณ , ํ๋ก์ ํธ์ ์ ์ฒด์ ์ธ ๋ฐฉํฅ์ฑ๊ณผ ์ผ์นํ๋์ง, ๊ธฐ์กด ๊ธฐ๋ฅ๊ณผ ์ถฉ๋์ ์๋์ง๋ฅผ ์ต์ข ์ ์ผ๋ก ํ๋จํ์ฌ ์น์ธํ๋ ๊ถํ์ ๊ฐ์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ ํต์ฌ์ '๊ฒ์ฆ์ ์๋ํ์ ์๊ฐํ'์ ์์ต๋๋ค. ํ์์ด ์์ ์ ๋ธ๋์น์ ์ฝ๋๋ฅผ ์ฌ๋ฆฌ๊ณ ํ์ฅ์๊ฒ ํฉ์ณ๋ฌ๋ผ๊ณ ์์ฒญํ๋ ์๊ฐ, ์ฐ๋ฆฌ๋ ๋จ์ํ ์์ค๋ฅผ ์ฎ๊ธฐ๋ ๊ฒ์ด ์๋๋ผ '์ฝ๋ ๋ฆฌ๋ทฐ'๋ผ๋ ์ค์ํ ํ์ ์ ๋จ๊ณ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ํ์ฅ์ GitHub์ ์ธํฐํ์ด์ค๋ STS์ ๋น๊ต ๋๊ตฌ๋ฅผ ํตํด ์ด๋ค ๋ถ๋ถ์ด ์ถ๊ฐ๋์๊ณ ์ด๋ค ๋ก์ง์ด ์์ ๋์๋์ง ํ๋์ ํ์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ํ ์๋ฌ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ๋์ด, ํ์ ๊ฐ์ ๊ธฐ์ ์ ๊ณต์ ํ๊ณ ์ฝ๋์ ์ผ๊ด์ฑ์ ๋ง์ถ๋ ์์คํ ํ์ต์ ์๊ฐ์ด ๋๊ธฐ๋ ํฉ๋๋ค.
์ด์ ๊ฐ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ด ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋๋์ด ์ค๋ช ํ๊ณ ์ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ๊ฐ๋ฐ ํ์ ์ ํ์ค์ธ GitHub์ Pull Request(PR) ๋ฐฉ์์ ๋๋ค. ์น ํ๊ฒฝ์์ ์ํตํ๋ฉฐ ๊ธฐ๋ก์ ๋จ๊ธฐ๊ธฐ์ ๊ฐ์ฅ ์ต์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ ๋ฒ์งธ๋ ๊ฐ๋ฐ์์๊ฒ ๊ฐ์ฅ ์น์ํ IDE์ธ STS(Spring Tool Suite)์ GUI๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ก์ปฌ ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์ง์ ๋๋ ค๋ณด๋ฉฐ ๋ณํฉํ๊ธฐ์ ์ ๋ฆฌํฉ๋๋ค. ์ธ ๋ฒ์งธ๋ Git Bash ์ปค๋งจ๋๋ผ์ธ์ ์ด์ฉํ ์ ์์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๋ ์๋ฆฌ๋ฅผ ์ดํดํ๋ฉด ์ด๋ค ๋๋ฐฉ ์ํฉ์์๋ ๋นํฉํ์ง ์๊ณ ๋์ฒํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ถ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ํฉ, ํ์์ Push๋ถํฐ ํ์ฅ์ ์ต์ข Merge๊น์ง
ํ์ฅ๊ณผ ํ์์ด ํ์ ์ ํ๊ธฐ ์ํด์๋ ์ํฉ์ด ํ์ํ๋ฐ, ๊ตฌ์ฒด์ ์ธ ์ํฉ์ ์๋์ ๊ฐ์ต๋๋ค.


ํ์ฅ์ main ๋ธ๋์น๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ์๋ค์ ๊ฐ๊ฐ ๋ง๋ค์ด์ง ๋ณธ์ธ๋ค์ member ๋ธ๋์น๋ฅผ ์ด์ฉํด ๋ณธ์ธ์ ์์ ์์ค๋ฅผ Commit & Push๋ฅผ ์งํํฉ๋๋ค. ํ์ฅ์ ํ์๋ค์ ๊ฐ ๋ธ๋์น PR์ ํ์ธ ํ, ์ด์์ด ์๋ค๋ฉด Merge๋ฅผ ์งํํฉ๋๋ค.
Pull Request & Merge ๋ฐฉ๋ฒ
๐ ์ํฉ (ํ์ฅ๊ณผ ํ์)
ํ์ ๐จ๐ป๐ป
- ๋ณธ์ธ์ member1 ๋ธ๋์น์์ ์์ ์ ๋ง์น ํ Pushํฉ๋๋ค.ํ์ฅ ๐ฉ๐ป๐ป :
- ํ์๋ค์ด Pushํ ์์ ๋ณธ PR๋ค์ ํ์ธ ํ, ๋ณ๊ฒฝ๋ ์ฝ๋๋ฅผ ๊ฒ์ฆํ์ฌ ์ด์์ด ์๋ค๋ฉด Mergeํ, ์ต์ข main ๋ธ๋์น์ ๋ฐ์ํฉ๋๋ค.
์ฒซ๋ฒ์งธ. GitHub ํํ์ด์ง์์ Pull Request(PR) ํ์ฉํ๊ธฐ
ํ์์ด ๋ณธ์ธ ๋ธ๋์น(member1)์ ์์ ์ ๋ง์น ์์ค๋ฅผ Commit & Push๋ฅผ ์งํํฉ๋๋ค. ์งํ ํ, GitHub ํํ์ด์ง์ Pull Request ์์ญ์์ ํ์ฅ์๊ฒ '์์ค ํ์ธ ํ Merge ๋ถํ๋๋ฆฝ๋๋ค. ์น์ธํด์ฃผ์ธ์!'๋ฅผ ์งํํฉ๋๋ค.
[ ํ์ STEP ]
1. ํ ํ๋ก์ ํธ์ GitHub Repository๋ก ์ด๋ ํ, 'main' ๋ธ๋์น์์ 'member1' ๋ธ๋์น๋ก ์ด๋ํฉ๋๋ค. ์ด๋ํ๊ฒ๋๋ฉด 'Contribute' select ์์ญ์ด ๋ํ๋ฉ๋๋ค.

2. 'Open pull request' ๋ฒํผ์ ๋๋ฌ PR์ ์ค๋นํฉ๋๋ค.

PR์ Commit & Push๋ฅผ ์งํํ ๊ณ์ ๊ณผ GitHub์์ PR์ ์์ฒญํ๋ ๊ณ์ ์ด ์ผ์นํ์ฌ์ผ๋ง PR ์น์ธ ์์ฒญ์ ์๊ฑด์ด ์ฑ๋ฆฝ๋ฉ๋๋ค.
3. 'Open a pull reuqest' ํญ๋ชฉ์์ STS์์ Pushํ ๋ ์์ฑํ๋ Comment๊ฐ ๋ณด์ฌ์ง๊ณ , ๊ทธ ์๋๋ก ์ถ๊ฐ์ ์ธ Summary๋ฅผ ์ ๋ ฅ ํ 'Create pull request' ๋ฒํผ์ ํด๋ฆญ ํด ํ์ฅ์๊ฒ ์น์ธ์ ์์ฒญํฉ๋๋ค.

'Add a description' ์ผ๋ก Push ํ ๋น์์ ์์ฑํ๋ Comment ๋ง์ผ๋ก๋ ๋ฌผ๋ก ์ถฉ๋ถํ๊ฒ ์ง๋ง, ํ์ฅ์๊ฒ ์กฐ๊ธ ๋ ์น์ ํ ์ ์ ๋ณด๊ณ ์๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค.
- ์์ ์์ฝ (Summary)
- ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ (Key Changes)
- ํ ์คํธ ๊ฒฐ๊ณผ (Test Results)
- ์ง๋ฌธ ๋ฐ ๊ฒํ ์์ฒญ (To Reviewer)
4. ํ์์ด ์์ฑํ PR ๋ฑ๋ก์ด ์๋ฃ๋์๊ณ , ํ์ฅ์ ์น์ธ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.

[ ํ์ฅ STEP ]
1. ํ๋ก์ ํธ Repository๋ก ์ด๋ ํ, 'Pull Request' ํญ์ผ๋ก ์ด๋ ํฉ๋๋ค. ํ์์ด ์์ฒญํ PR ํญ๋ชฉ์ด ๋ณด์ฌ์ง๋๋ค. PR์ ํ์ธํ๊ธฐ ์ํด, ์๋ ๋ชฉ๋ก์ ํด๋ฆญํฉ๋๋ค.

2. 'File Changed' ํญ์ ํด๋ฆญํฉ๋๋ค.

3. ํ์์ด ์ฌ๋ฆฐ PR์ ๋ด์ฉ๋๋ก ๋ณ๊ฒฝ๋ ์์ค์ ์ด์์ด ์๋์ง ์๋์ง ํ์ธ ํ, 'Review changes' ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

4. ํ์ฅ์ด PR ํ์ธ ํ, ํ์์ด ์ฌ๋ฆฐ ๋ด์ฉ์ ์น์ธํ๊ธฐ ์ํ Comment๋ฅผ ์์ ๋กญ๊ฒ ์์ฑ ํ, 'Approve'๋ฅผ ์ ํํ๊ณ 'Submit review' ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

ํ์์ด ์์ฑํ PR์ ํ์ฅ์ด ํ์ธ ํ, ์น์ธ ์ Review ๋ด์ฉ์ ์์ฑํ๊ณ 'Approve'๋ฅผ ์ ํํ๊ณ Submit review ๋ฒํผ์ ํด๋ฆญํ์ฌ PR์ ๋ํ ์น์ธ์ ์งํํฉ๋๋ค. ์ด๋, ์๋ ๋ผ๋์ค๋ฒํผ์ผ๋ก ์ ๊ณตํ๋ ๊ฐ ์ค์ ์ ๋ฐ๋ผ์ ์น์ธ ํํ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
- Comment (์ผ๋ฐ ์๊ฒฌ)
- ์ฝ๋์ ๋ํด ๊ฐ๋ฒผ์ด ์ง๋ฌธ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. (์: ๋ณ์๋ช ์ด ์ข ๋ ๋ช ํํ๋ฉด ์ข์๊ฒ ๊ฐ๋ค์..)
- PR์ ์ํ(๋นจ๊ฐ์ ๊ฒฝ๊ณ ์ฐฝ)๊ฐ ๋ณํ์ง ์๊ณ ์ฌ์ ํ Merge ๋ฒํผ์ ๋นํ์ฑํ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. - Approve (์น์ธ)
- ํ์์ ์์ค๋ฅผ ๊ฒํ ํด ๋ณด๋ ๋ฒ๊ทธ๊ฐ ์๊ณ ํ๋ก์ ํธ ๊ท์น์ ์ ๋ง์ ๋ ์ฌ์ฉํฉ๋๋ค.
- ๋นจ๊ฐ์ ๊ฒฝ๊ณ ์ฐฝ๋ค์ด ์ด๋ก์ ์ฒดํฌ ํ์๋ก ๋ฐ๋๊ณ Merge pull request ๋ฒํผ์ด ํ์ฑํ๋์ด ์ค์ ๋ฐ์์ด ๊ฐ๋ฅํด์ง๋๋ค. - Request changes (์์ ์์ฒญ)
- ์ฝ๋์ ๋ช ํํ ์๋ฌ๊ฐ ๋ณด์ด๊ฑฐ๋ ๋ณด์์ ์ํํ ์ฝ๋๊ฐ ์๊ฑฐ๋ ๋น์ฆ๋์ค ๋ก์ง์ด ์๊ตฌ์ฌํญ ๋ด์ฉ๊ณผ ๋ค๋ฅด๊ฒ ์์ฑ๋์์ ๋ ์ฌ์ฉํฉ๋๋ค.
- PR ์ํ๊ฐ 'Changes requested'๋ผ๋ ๊ฐ๋ ฅํ ๋นจ๊ฐ ๊ฒฝ๊ณ ๋ก ๋ฐ๋๊ณ ํ์์ด ์ฝ๋๋ฅผ ์์ ํด์ ๋ค์ ์ฌ๋ฆฌ๊ธฐ ์ ๊น์ง๋ ์ ๋๋ก Merge ํ ์ ์๋๋ก ์ฐจ๋จ๋ฉ๋๋ค.
5. ํ์์ PR์ด ์น์ธ๋๊ฑธ ํ์ธํ ์์๊ณ , ์ต์ข Merge๋ฅผ ์ํด 'Merge pull request' ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

6. 'Confirm merge' ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

7. ํด๋น PR ์น์ธ ๋ฐ Merge๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ๊ธฐ ๋๋ฌธ์, ํด๋น ์๋ฌด๋ ์ข ๋ฃํ๊ฒ ๋ค๊ณ ํฉ๋๋ค.

8. ์ต์ข ์ ์ผ๋ก Repository๋ด, ์์ค๋ฅผ ํ์ธํด๋ณด๋ฉด PR ์น์ธ ํ Merge๋ ์ต์ข ์์ค๊ฐ ๋ฐ์๋์ด ์๋ ๋ชจ์ต์ ํ์ธํ ์ ์์ต๋๋ค.

@Junesker