Git ์๊ฐ: ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ(DVCS) ํ ๋ฒ์ ์ดํดํ๊ธฐ

๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ๋ ํ์ผ(๋ฌธ์, ์ฝ๋ ๋ฑ)์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ธฐ๋กํ๊ณ , ํ์ํ๋ฉด ํน์ ์์ ์ผ๋ก ๋๋๋ฆด ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์
๋๋ค.
๊ทธ์ค์์๋ Git์ ์ํํธ์จ์ด ์์ค ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ํ์ ์ธ ๋๊ตฌ๋ก, ์คํ ์์ค ํ๋ก์ ํธ์ ๊ธฐ์
๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฌ์ค์ ํ์ค์ฒ๋ผ ์ฌ์ฉ๋ฉ๋๋ค.
Git์ 2005๋
๋ฆฌ๋์ค ํ ๋ฅด๋ฐ์ค(Linus Torvalds)๊ฐ ๋ฆฌ๋
์ค ์ปค๋ ๊ฐ๋ฐ์ ์ํด ๋ง๋ ์คํ ์์ค ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
(DVCS) ์
๋๋ค.
๋ถ์ฐํ(DVCS)์ด๋ผ๋ ๊ฑด ์ค์ ์๋ฒ์๋ง ์์กดํ์ง ์๊ณ , ๊ฐ ์ฌ์ฉ์์ ์ปดํจํฐ์ ์ ์ฅ์(repo) ์ ์ฒด๋ฅผ ๋ณต์ ํด ๋ณด๊ดํ๋ค๋ ๋ป์
๋๋ค.
์ฆ, ์ธํฐ๋ท์ด ์์ด๋ ๋ก์ปฌ์์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ด๋ฆฌํ ์ ์๊ณ , ํ์ํ ๋ ์๊ฒฉ ์ ์ฅ์์ ๋๊ธฐํํ ์ ์์ต๋๋ค.
Git์ ์ฃผ์ ํน์ง
1) ์ค๋ ์ท(Snapshot) ๊ธฐ๋ฐ ๊ธฐ๋ก
Git์ ํ์ผ์ ๋ณ๊ฒฝ ๋ด์ฉ์ “์ฐจ์ด(diff)”๋ง ์๋ ๋ฐฉ์์ด ์๋๋ผ, ์ปค๋ฐ ์์ ์ ํ๋ก์ ํธ ์ ์ฒด ์ํ๋ฅผ ์ค๋
์ท์ฒ๋ผ ์ ์ฅํฉ๋๋ค.
๊ทธ๋์ ๊ณผ๊ฑฐ ํน์ ์์ ์ ์ํ๋ฅผ ๊ทธ๋๋ก ๋ณต์ํ๊ธฐ ์ฝ์ต๋๋ค.
2) ๋ก์ปฌ ์ค์ฌ ์์
๋ชจ๋ ๋ฒ์ ์ ๋ณด๊ฐ ๋ด PC(๋ก์ปฌ)์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์, ์ธํฐ๋ท ์์ด๋ ์ปค๋ฐ/๋๋๋ฆฌ๊ธฐ/๋ธ๋์น ์์
์ด ๊ฐ๋ฅํฉ๋๋ค.
์๊ฒฉ ์ ์ฅ์๋ก์ ์
๋ก๋(push)๋ ๋๊ธฐํ๋ ํ์ํ ๋๋ง ํ๋ฉด ๋ฉ๋๋ค.
3) ๋ธ๋์น(Branch)
๋ธ๋์น๋ “๊ฐ์ง์น๊ธฐ”์ฒ๋ผ ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ๋ถ๊ธฐํ์ฌ ๋
๋ฆฝ์ ์ธ ์์
๊ณต๊ฐ์ ๋ง๋๋ ๊ธฐ๋ฅ์
๋๋ค.
์คํ์ ์ธ ๋ณ๊ฒฝ์ ๋ณ๋ ๋ธ๋์น์์ ์งํํ๊ณ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด **๋ณํฉ(merge)**ํ์ฌ ๋ฉ์ธ ์ฝ๋์ ๋ฐ์ํ ์ ์์ต๋๋ค.
4) ์ปค๋ฐ(Commit)
์ปค๋ฐ์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ํ ๋จ์๋ฅผ ๊ธฐ๋กํ๋ ๋์์
๋๋ค.
ํ์ผ ๋ณ๊ฒฝ์ ์คํ
์ด์ง ์์ญ์ ์ฌ๋ฆฐ ๋ค ์ปค๋ฐํ๋ฉด, ๊ทธ ์์ ์ ์ค๋
์ท์ด ์ ์ฅ์์ ์๊ตฌ์ ์ผ๋ก ๊ธฐ๋ก๋ฉ๋๋ค(์ปค๋ฐ ๋ฉ์์ง์ ํจ๊ป).
Git์ ๋์ ๋ฐฉ์: “3๊ฐ์ง ์์ญ”์ ์ดํดํ๋ฉด ๋
Git์ ํ์ผ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์ 3๊ฐ์ง ์์ญ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
Working Directory → Staging Area → Local Repository
1) ์์ ๋๋ ํฐ๋ฆฌ(Working Directory)
- ์ค์ ๋ก ํ์ผ์ ์์ฑ/์์ ํ๋ ๊ณต๊ฐ(ํ๋ก์ ํธ ํด๋)
- ์ต์ ์ํ์ ํ์ผ์ด ์์น
2) ์คํ ์ด์ง ์์ญ(Staging Area / Index)
- ๋ค์ ์ปค๋ฐ์ ํฌํจ์ํฌ ๋ณ๊ฒฝ์ฌํญ์ “์์๋ก ๋ชจ์๋๋ ์ฅ์”
- git add๋ก Working Directory์ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ฌ๋ฆผ
3) ๋ก์ปฌ ์ ์ฅ์(Local Repository)
- git commit์ ์คํํ๋ฉด, ์คํ ์ด์ง์ ๋ชจ์ธ ๋ณ๊ฒฝ์ฌํญ์ด ์ค๋ ์ท์ผ๋ก ์ ์ฅ๋๋ ๊ณต๊ฐ
- ๋ด๋ถ์ ์ผ๋ก .git ํด๋๊ฐ ์ด ์ญํ ์ ๋ด๋น
์ด 3๋จ๊ณ ๊ตฌ์กฐ ๋๋ถ์, ์์ ๋ด์ฉ์ ์๊ฒ ๋๋์ด ์ปค๋ฐ ๋จ์๋ฅผ ๊ด๋ฆฌํ ์ ์๊ณ , ์ค์ํด๋ ๋จ๊ณ๋ณ๋ก ๋๋๋ฆฌ๊ธฐ๊ฐ ์ฌ์์ง๋๋ค.
Git์ ์ฌ์ฉํ๋ ์ด์
๊ฐ์ธ ํ๋ก์ ํธ์์ ์ข์ ์
ํผ์ ๊ฐ๋ฐํ ๋๋ Git์ ์ฌ์ฉํ๋ฉด, ์ฝ๋ ๋ฐ์ ๊ณผ์ ์ ๋ฒ์ ๋ณ๋ก ๊ธฐ๋กํ ์ ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ์ด์ ๋จ๊ณ๋ก ์ฝ๊ฒ ๋์๊ฐ ์ ์๊ณ , ์ฌ๋ฌ ์คํ์ ํด๋ “์ฝ๋ ํ์๋จธ์ ”์ฒ๋ผ ๋๋๋ฆด ์ ์์ต๋๋ค.
ํ ํ๋ก์ ํธ์์ ๋ ๊ฐ๋ ฅํด์ง๋ ์ด์
ํ์ ํ๊ฒฝ์์๋ Git์ ์ง๊ฐ๊ฐ ๋ ์ ๋๋ฌ๋ฉ๋๋ค.
- ๊ฐ ๊ฐ๋ฐ์๊ฐ ์์ ์ ๋ธ๋์น์์ ๋ ๋ฆฝ์ ์ผ๋ก ์์
- ํ ์คํธ/๋ฆฌ๋ทฐ ํ main ๋ธ๋์น๋ก ๋ณํฉ(merge)
- ๋์์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
์ฆ, ์ถฉ๋์ ์ต์ํํ๋ฉด์๋ “๋๊ฐ ๋ฌด์์ ์ธ์ ๋ฐ๊ฟจ๋์ง”๊ฐ ์ ๋ช ํ๊ฒ ๋จ์ต๋๋ค.
GitHub ์๊ฐ: ์๊ฒฉ ์ ์ฅ์ ํธ์คํ ํ๋ซํผ
GitHub๋ Git ์ ์ฅ์๋ฅผ ์ธํฐ๋ท ์์์ ์๊ฒฉ(remote)์ผ๋ก ํธ์คํ
/๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ์น ํ๋ซํผ์
๋๋ค.
๋ก์ปฌ PC์ ์๋ Git ์ ์ฅ์๋ฅผ GitHub ์๋ฒ์ ์ฌ๋ฆฌ๋ฉด, ๊ทธ ์๊ฐ๋ถํฐ ์๊ฒฉ ์ ์ฅ์๊ฐ ๋์ด ํ์
์๋ค๊ณผ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ ํจ๊ป ์์
ํ ์ ์์ต๋๋ค.
GitHub๋ Git ๊ธฐ๋ฐ ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์, ํ์ ์ ํ์ํ ๋ค์ํ ๋๊ตฌ๋ค์ ์ ๊ณตํฉ๋๋ค.
GitHub์ ์ฃผ์ ๊ธฐ๋ฅ
1) ์๊ฒฉ ์ ์ฅ์(์จ๋ผ์ธ ๋ฐฑ์ )
- ๋ก์ปฌ ์ ์ฅ์๋ฅผ GitHub์ ์ ๋ก๋ํ๋ฉด ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅ
- PC๊ฐ ๊ณ ์ฅ ๋๊ฑฐ๋ ํ์ผ์ด ์ฌ๋ผ์ ธ๋ ๋ณต์์ด ์ฌ์
2) ํ์ ๊ธฐ๋ฅ
- Pull Request(๋ณ๊ฒฝ์ฌํญ ๋ณํฉ ์์ฒญ)
- ์ด์(๋ฒ๊ทธ/์์ ํญ๋ชฉ) ๊ด๋ฆฌ
- ์ฝ๋ ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ
3) ์๊ฐํ๋ ์ด๋ ฅ
- ์น UI์์ ์ปค๋ฐ ๊ธฐ๋ก, ๋ธ๋์น ๊ตฌ์กฐ, ๋ณ๊ฒฝ ๋น๊ต ๋ฑ์ ์ง๊ด์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅ
4) ์ด์/๊ด๋ฆฌ ํ์ฅ
- ๊ถํ ๊ด๋ฆฌ, ๋ณด์ ์ค์ , CI ์ฐ๋ ๋ฑ ํ ์ด์์ ํ์ํ ๊ธฐ๋ฅ ์ง์
- ์คํ์์ค๋ฟ ์๋๋ผ ๊ธฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ํ์ค์ฒ๋ผ ์ฌ์ฉ๋จ
Question about Git & GitHub
โช Q1. GitHub ๋ง ์์ผ๋ฉด Git์ ์ธ ์ ์๋์?
์๋์. GitHub๋ Git ์ ์ฅ์๋ฅผ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋์น ํ๋ซํผ์ผ๋ฟ์
๋๋ค.
GitHub๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด๋ฐ๋์Git์ด ๋ก์ปฌ ์ปดํจํฐ์์ค์น๋์ด์์ด์ผํ๋ฉฐ,
Git ๋ช
๋ น์ด๋ฅผ์ฌ์ฉํด ๋ก์ปฌ ์์
์ํ๊ณ GitHub์ ์ฐ๊ฒฐํ์ฌ์
๋ก๋(Push)ํฉ๋๋ค.
โช Q2. Git์ ์ฌ์ฉํ๋ฉด ์ GitHub๊ฐ ํ์ํ์ฃ ?
Git๋ง์ผ๋ก๋๋ฒ์ ๊ด๋ฆฌ๋ ๊ฐ๋ฅํ์ง๋ง, ๋ค๋ฅธ ์ฌ๋๊ณผ ํ์
ํ๊ณ ์ถ๊ฑฐ๋, ์ ์ฅ์๋ฅผ๋ฐฑ์
ํ๊ฑฐ๋, ์ฝ๋ ๋ฆฌ๋ทฐ, ์ด์ ๊ด๋ฆฌ,
ํ ๊ด๋ฆฌ ๋ฑ์ ์จ๋ผ์ธ ํ์
๋๊ตฌ๊ฐํ์ํ ๊ฒฝ์ฐ GitHub๊ฐ ํ์์ ์
๋๋ค.
โช Q3. GitHub ๋ง๊ณ ๋ค๋ฅธ ์๋น์ค๋ ์๋์?
๋ค, GitHub ์ธ์๋Git์ ์ง์ํ๋์น ์๋น์ค๋ค์ด์์ต๋๋ค.
-GitLab: GitHub์ ๋น์ทํ์ง๋ง์์ฒด ์๋ฒ ์ค์น ๊ฐ๋ฅ
-Bitbucket: Jira ์ ์ฐ๋ ๊ฐ๋ฅ, ๋น๊ณต๊ฐ์ ์ฅ์์๊ฐ์
-Azure DevOps, AWS CodeCommit ๋ฑ
๐ ํต์ฌ ์์ฝ
Git์ ๋ด ์ปดํจํฐ ์์์ ์ผ์ด๋๋ ๋ชจ๋ ์ฝ๋ ๋ณํ๋ฅผ ๊ธฐ๋กํ๋ '์์ง'๊ณผ ๊ฐ์ต๋๋ค.
GitHub์ ๊ทธ ๊ธฐ๋ก๋ค์ ์ธํฐ๋ท์ ์ฌ๋ ค์ ๋ค๋ฅธ ์ฌ๋๊ณผ ๋๋๊ณ ํจ๊ป ์์ ํ๋ '์ ์๊ด ๊ฒธ ํ์์ค'์ ๋๋ค.
| ํญ๋ชฉ | Git (๋ก์ปฌ ๋๊ตฌ) | GitHub (ํด๋ผ์ฐ๋ ํ๋ซํผ) |
| ๐ง ์ ์ | ๋ก์ปฌ์์ ์ฝ๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ด๋ฆฌํ๋ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ | Git ์ ์ฅ์๋ฅผ ์จ๋ผ์ธ์์ ๊ณต์ ํ๊ณ ํ์ ํ ์ ์๋ ์น ๊ธฐ๋ฐ ํ๋ซํผ |
| ๐ ์ค์น ์์น | ์ฌ์ฉ์์ ๋ก์ปฌ ์ปดํจํฐ์ ์ค์น | ์น์ฌ์ดํธ(github.com)์์ ๊ณ์ ์์ฑ ํ ์ฌ์ฉ |
| ๐ฆ ์ญํ | ์ฝ๋์ ๋ณ๊ฒฝ์ฌํญ ์ถ์ , ์ ์ฅ, ๋๋๋ฆฌ๊ธฐ, ๋ณํฉ ๊ฐ๋ฅ | ์ ์ฅ์๋ฅผ ํด๋ผ์ฐ๋์ ์ ์ฅ, ํ์ ๋ฐ ์ด๋ ฅ ์๊ฐ์ ๊ด๋ฆฌ |
| ๐งฉ ์ฐ๊ฒฐ ๋ฐฉ์ | ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ (GitHub ์์ด๋ ์ฌ์ฉ ๊ฐ๋ฅ) | Git์ด ์์ด์ผ ์ฌ์ฉ ๊ฐ๋ฅ. Git ์ ์ฅ์๋ฅผ ์ ๋ก๋ํ๋ ๊ณณ |
| โ๏ธ ๊ธฐ๋ฅ ์์ | add, commit, branch, merge, log ๋ฑ | ์ ์ฅ์ ํธ์คํ , Pull Request, ์ด์ ๊ด๋ฆฌ, ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฑ |
| ๐ฅ ํ์ ์ง์ | ๊ธฐ๋ณธ์ ์ผ๋ก ํผ์ ์ฐ๊ธฐ์ ์ ํฉ | ํ์๊ณผ ํจ๊ป ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ํ์ ๋๊ตฌ ์ ๊ณต |
| ๐พ ๋ฐฑ์ ๊ธฐ๋ฅ | ๋ก์ปฌ ์ ์ฅ์ผ๋ก ์ธํ ๋ฐ์ดํฐ ์์ค ์ํ ์กด์ฌ | ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋ฐฑ์ ์ผ๋ก ๋์ ์์ ์ฑ |
| ๐ ์ธํฐ๋ท ํ์ | ์คํ๋ผ์ธ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ (๋ก์ปฌ ์คํ) | ์จ๋ผ์ธ ์ฌ์ฉ ํ์ (์ ์ ๋ฐ Push/Pull ์ ํ์) |
| ๐ ๊ธฐ๋ก ํ์ธ | git log ๋ช ๋ น์ด๋ก ํ ์คํธ ๊ธฐ๋ฐ ํ์ธ | ์น ํ์ด์ง์์ ์๊ฐ์ ์ผ๋ก ํ์คํ ๋ฆฌ ํ์ ๊ฐ๋ฅ |
| ๐ ๋ผ์ด์ ์ค | ์คํ์์ค ๋ฌด๋ฃ ๋๊ตฌ | ๊ธฐ๋ณธ ๋ฌด๋ฃ, ํ/๊ธฐ์ ์ฉ ์ ๋ฃ ํ๋ ์กด์ฌ |
| ๐ก ๋น์ | ๋ฌธ์ ์์ ๋ด์ฉ์ ๊ธฐ๋กํ๋ ๋ฒ์ ๊ด๋ฆฌ๊ธฐ | ๋ฌธ์๋ฅผ ์จ๋ผ์ธ ๋๋ผ์ด๋ธ์ ์ฌ๋ ค ํ์ ํ๋ ๊ณต๊ฐ |
