๊ฐ๋ฐ์ ์ฒ์ ์์ํ๋ฉด, ํ์ผ์ ๋ณต์ฌํด์ "์ต์ข ", "์ง์ง ์ต์ข ", "์ต์ต์ข "... ์ด๋ฐ ์์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํด๋ณธ ์ ์์ผ์ค ๊ฒ๋๋ค.
ํ์ง๋ง ํ ํ๋ก์ ํธ๊ฐ ์์๋๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ง์ฃ . ์ฌ๋ฌ ๋ช ์ด ๋์์ ํ์ผ์ ์์ ํ๊ณ , ๊ธฐ๋ฅ์ ๋๋ ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์ฝ๋ ์ถฉ๋์ ๋ฌผ๋ก ์ด๊ณ "์ด๋ ๋ฒ์ ์ด ์ต์ ์ด์ง?"๋ผ๋ ํผ๋์ด ๋์ด์ง ์์ต๋๋ค.
์ด๋ ํ์ํ ๊ฒ ๋ฐ๋ก ๋ฒ์ ๊ด๋ฆฌ ์์คํ (VCS)์ด๊ณ , ๊ทธ์ค ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ๋๊ตฌ๊ฐ ๋ฐ๋ก Git์ ๋๋ค.
๐น Git์ด๋ ๋ฌด์์ธ๊ฐ?
Git์ ๋ถ์ฐํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
(Distributed Version Control System, DVCS)์
๋๋ค.
๋ฆฌ๋์ค ํ ๋ฅด๋ฐ์ฆ(Linus Torvalds)๊ฐ ๋ฆฌ๋
์ค ์ปค๋ ๊ฐ๋ฐ์ ์ํด 2005๋
์ ๋ง๋ ๋๊ตฌ๋ก, ํ๋ก์ ํธ์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
"Git์ ์ฝ๋ ๋ณ๊ฒฝ์ฌํญ์ ํ์๋จธ์ ์ด์, ํ์ ์ ์ค์ฌ์ ๋๋ค."
Git์ ์ฌ์ฉํ๋ฉด ์ธ์ , ๋๊ฐ, ์ด๋ค ํ์ผ์ ์ด๋ป๊ฒ ์์ ํ๋์ง๋ฅผ ๋ชจ๋ ๊ธฐ๋กํ ์ ์๊ณ , ์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ๋ ๋งค์ฐ ์ฝ์ต๋๋ค.
Git์ ํต์ฌ ํน์ง ๐
- ๋ถ์ฐํ ๊ตฌ์กฐ: ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ ์ฒด ์ ์ฅ์์ ๋ณต์ฌ๋ณธ์ ๋ก์ปฌ์ ๊ฐ์ง
- ํจ์จ์ ์ธ ๋ธ๋์นญ: ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด๋ ๋ฒ๊ทธ ์์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์งํ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: SHA-1 ํด์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ ํ๊ณ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
- ์ค๋ ์ท ๋ฐฉ์: ํ์ผ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ, ์์ ๋ณ ์ ์ฒด ์ํ๋ฅผ ์ ์ฅ
# Git ๋ฒ์ ํ์ธํ๊ธฐ
git --version
# Git ์ ์ฅ์ ์ด๊ธฐํํ๊ธฐ
git init
๐น ๋ฒ์ ๊ด๋ฆฌ์ ํ์์ฑ
๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ด ์๋ค๋ฉด ๋ฐ์ํ ์ ์๋ ๋ํ์ ์ธ ๋ฌธ์ ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
- โ ์ค์๋ก ํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ: ๋ณต๊ตฌ๊ฐ ์ด๋ ค์
- โ ์ด๋ค ๊ธฐ๋ฅ์ด ์ด๋์ ๋ฐ๋์๋์ง ๋ชจ๋ฆ
- โ ํ์ ๊ฐ ํ์ผ ์ถฉ๋ ๋ฐ ์ปค๋ฎค๋์ผ์ด์ ์ง์ฐ
- โ ๊ฐ๋ฐ ๊ณผ์ ์ ๋ฌธ์ํํ๊ธฐ ์ด๋ ค์
- โ ๋์ ์์ ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํจ
Git์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์๊น๋๋ค
- ๐ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฌ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ค (revert, reset)
- ๐ ๋ณ๊ฒฝ ์ด๋ ฅ ์ถ์ ์ด ์ฝ๋ค (๋๊ฐ ๋ฌด์์ ์์ ํ๋์ง)
- ๐ ๋ธ๋์น ๊ธฐ๋ฅ์ผ๋ก ๋ณ๋ ฌ ์์ ์ด ๊ฐ๋ฅํ๋ค
- ๐ ํ์ ๋๊ตฌ์ธ GitHub, GitLab๊ณผ์ ์ฐ๋์ผ๋ก ํ์ ์ด ์์ํ๋ค
- ๐ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํ ํ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค
- ๐ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์ฐ๋ํ์ฌ ์๋ํ๋ ํ ์คํธ ๋ฐ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค
์ค์ ์ฌ๋ก: Git ์์ด ๊ฐ๋ฐํ๋ค๋ฉด? ๐คฏ
๊ฐ๋ฐ์A: "๋ด๊ฐ ์ด์ ์์ ํ ์ฝ๋๊ฐ ์ด๋ ๊ฐ์ง?"
๊ฐ๋ฐ์B: "์, ๋ด๊ฐ ๊ฐ์ ํ์ผ ์์ ํ๋๋ฐ ๋ค ์ฝ๋๋ฅผ ๋ฎ์ด์ผ๋๋ด..."
๊ฐ๋ฐ์A: "์ด๋ฐ... 4์๊ฐ ๋์ ์์
ํ ๊ฑด๋ฐ..."
์ด๋ฐ ์ ๋ชฝ ๊ฐ์ ์ํฉ์ Git์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐ๋ฉ๋๋ค. ๊ฐ์ ๋ธ๋์น์์ ์์ ํ๊ณ , ์ถฉ๋์ด ๋ฐ์ํ๋๋ผ๋ Git์ด ์ด๋์ ์ถฉ๋์ด ๋ฐ์ํ๋์ง ์ ํํ ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ด์ฃ .
๐น Git๊ณผ GitHub์ ์ฐจ์ด์
๋ง์ ๋ถ๋ค์ด Git๊ณผ GitHub๋ฅผ ํผ๋ํ๊ณค ํฉ๋๋ค. ๊ฐ๋จํ ๋งํด
ํญ๋ชฉ | ์ค๋ช |
Git | ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ ์์ฒด (๋ก์ปฌ์์ ์คํ) |
GitHub | Git ์ ์ฅ์๋ฅผ ํด๋ผ์ฐ๋์์ ๊ด๋ฆฌํ๊ณ ๊ณต์ ํ ์ ์๋ ํ๋ซํผ |
Git์ ๋๊ตฌ, GitHub๋ ์๋น์ค์ ๋๋ค.
Git์ ๋ก์ปฌ์์ ํผ์ ๊ฐ๋ฐํด๋ ์ฌ์ฉํ ์ ์๊ณ , GitHub๋ Git์ผ๋ก ๋ง๋ ์ ์ฅ์๋ฅผ ์จ๋ผ์ธ์์ ๊ณต์ ํ๊ณ ํ์ ํ ์ ์๊ฒ ๋์์ค๋๋ค.
GitHub ์ธ์ ๋์๋ค ๐
GitHub๋ง์ด Git ์ ์ฅ์๋ฅผ ํธ์คํ ํ๋ ์ ์ผํ ์๋น์ค๋ ์๋๋๋ค:
- GitLab: CI/CD ํ์ดํ๋ผ์ธ์ด ๋ด์ฅ๋์ด ์์ด DevOps์ ํนํ
- Bitbucket: Atlassian ์ ํ๊ตฐ(Jira, Confluence ๋ฑ)๊ณผ์ ํตํฉ์ด ๊ฐ์
- Azure DevOps: Microsoft์ ๊ฐ๋ฐ ๋๊ตฌ๋ก Windows ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ์ ํตํฉ์ด ์ฐ์
๊ฐ ์๋น์ค๋ง๋ค ์ฅ๋จ์ ์ด ์์ผ๋ฏ๋ก ํ๋ก์ ํธ ์ฑ๊ฒฉ๊ณผ ํ์ ์ํฌํ๋ก์ฐ์ ๋ง๊ฒ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐น ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ๊ณผ์ ์ฐจ์ด์
Git์ ์์ ๋ถํฐ ์กด์ฌํ๋ ์ค์์ง์คํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (Centralized VCS)๊ณผ๋ ๋ค๋ฅธ ๋ถ์ฐํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
์์คํ | ๊ตฌ์กฐ | ํน์ง |
SVN, CVS | ์ค์ ์๋ฒ ๊ธฐ๋ฐ | ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ํ์ ๋ถ๊ฐ |
Git | ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ฒด ํ์คํ ๋ฆฌ ๋ณด์ | ์คํ๋ผ์ธ์์๋ ์์ ๊ฐ๋ฅ |
Git์ ์๋๋ ๋น ๋ฅด๊ณ , ๋ก์ปฌ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ปค๋ฐ/๋ธ๋์น ์์ฑ์ด ๊ฐ๋ฅํด์ ์์ฆ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
Git์ด ๋ ๋์ ์ด์ ๐
- ์คํ๋ผ์ธ ์์ : ์ธํฐ๋ท ์ฐ๊ฒฐ ์์ด๋ ์ปค๋ฐ, ๋ธ๋์น ์์ฑ, ๋ณํฉ ๋ฑ ๋๋ถ๋ถ์ ์์ ์ด ๊ฐ๋ฅ
- ๋ธ๋์น ๊ด๋ฆฌ์ ์ฉ์ด์ฑ: Git์ ๋ธ๋์น๋ ๋จ์ํ ํฌ์ธํฐ๋ก, ์์ฑ๊ณผ ์ ํ์ด ๋งค์ฐ ๋น ๋ฆ
- ์คํ ์ด์ง ์์ญ: ์ปค๋ฐ ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํ์ ์ผ๋ก ์คํ ์ด์ง ํ ์ ์์ด ๋ ์ธ๋ฐํ ์ ์ด ๊ฐ๋ฅ
- ์ฑ๋ฅ: ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๋น ๋ฅธ ์๋ ์ ์ง
- ๊ฐ๋ ฅํ ๋ณํฉ ๋๊ตฌ: ์ถฉ๋ ํด๊ฒฐ๊ณผ ๋ณํฉ ๊ณผ์ ์ด ๋ ์ง๊ด์ ์ด๊ณ ์ ์ฐํจ
# Git์ ๋ธ๋์น ์์ฑ์ ๋งค์ฐ ๋น ๋ฆ
๋๋ค
git branch new-feature
# ๋ธ๋์น ์ ํ๋ ๊ฐ๋จํฉ๋๋ค
git checkout new-feature
# ๋๋ ํ ๋ฒ์: git checkout -b new-feature
๐น Git์ ์๋ ์๋ฆฌ: ์ํคํ ์ฒ ์ดํดํ๊ธฐ
Git์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ฉด ๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. Git์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
์์ ๋๋ ํ ๋ฆฌ(Working Directory) ๐
- ์ค์ ๋ก ํ์ผ์ ์์ ํ๋ ๊ณต๊ฐ์ ๋๋ค. ์ด๊ณณ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์์ ํฉ๋๋ค.
์คํ ์ด์ง ์์ญ(Staging Area) ๐
- ์ปค๋ฐํ ๋ณ๊ฒฝ์ฌํญ์ ์ค๋นํ๋ ์ค๊ฐ ๋จ๊ณ์ ๋๋ค. git add ๋ช ๋ น์ด๋ก ํ์ผ์ ์ด ์์ญ์ ์ถ๊ฐํฉ๋๋ค.
์ ์ฅ์(Repository) ๐พ
- ๋ชจ๋ ๋ฒ์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ผ๋ก, .git ๋๋ ํ ๋ฆฌ์ ์์นํฉ๋๋ค. git commit ๋ช ๋ น์ด๋ก ์คํ ์ด์ง ์์ญ์ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅ์์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํฉ๋๋ค.
Git์ ์ํฌํ๋ก์ฐ: ์์ → ์คํ ์ด์ง → ์ปค๋ฐ
# ํ์ผ ์์ ํ ์คํ
์ด์ง ์์ญ์ ์ถ๊ฐ
git add file.txt
# ์คํ
์ด์ง๋ ๋ณ๊ฒฝ์ฌํญ์ ์ปค๋ฐ
git commit -m "ํ์ผ ๋ด์ฉ ์์ "
โ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
Git์ ๋จ์ํ ๋๊ตฌ ๊ทธ ์ด์์ ๋๋ค. ํ์ ์ ์ค์ฌ์ด์, ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ์ฃผ๋ ํต์ฌ ์ธํ๋ผ์ ๋๋ค.
์ด ๊ธ์์๋ Git์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ํ์์ฑ, GitHub์์ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ๊ณผ ๋น๊ตํ์ต๋๋ค. Git์ ์ฒ์ ์ ํ๋ ๋ถ๋ค๋ ์ด์ ํฐ ๊ทธ๋ฆผ์ ์ดํดํ์ จ์ ๊ฒ๋๋ค.
๐ ๋ค์ ๊ธ์์๋ Git์ ํต์ฌ ๊ฐ๋ ์ธ Working Directory, Staging Area, Repository์ ๋ํด ๋ ๊น์ด ์๊ฒ ์์๋ณด๊ณ ์ค์ ๋ช ๋ น์ด ์ฌ์ฉ๋ฒ์ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค!
๐ก Git Tip: .gitignore ํ์ผ์ ํ์ฉํด ๋ถํ์ํ ํ์ผ(๋น๋ ๊ฒฐ๊ณผ๋ฌผ, ์์ ํ์ผ, IDE ์ค์ ๋ฑ)์ด ์ ์ฅ์์ ํฌํจ๋์ง ์๋๋ก ์ค์ ํ์ธ์. ์ ์ฅ์๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๋ ๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค!