๋ค์ด๊ฐ๋ฉฐ
ํ๋ก์ ํธ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฐ๋ฆฌ ๋ชจ๋ Git์ ์ฐ์ง๋ง, ์ ์ .git ํด๋ ์์ ์ด์ด๋ณธ ์ ์ ๋ณ๋ก ์์ ๊ฑฐ์์.
์ฌ์ค ์ ๋ ๊ทธ๋ฌ์ต๋๋ค. git commit ํ๋ฉด ์ ์ฅ๋๊ณ , git push ํ๋ฉด ์ฌ๋ผ๊ฐ๊ณ ๊ทธ ์ ๋๋ง ์๊ณ ๋ ์ฐ๋ ๋ฐ ์ ํ ์ง์ฅ์ด ์์๊ฑฐ๋ ์.
์ด๋ฒ ํฌ์คํธ์์๋ .git ํด๋๋ฅผ ์ดํด๋ณด๋ฉฐ ์ปค๋ฐํ ๋๋ง๋ค ๋ด๋ถ๊ฐ ์ด๋ป๊ฒ ๋ณํด๊ฐ๋์ง ํ๋์ฉ ์ดํด๋ณด๊ฒ ์ต๋๋ค!
Repository ์์ฑ
shu@sHu-MacBook-Pro Source Code % git init
Initialized empty Git repository in /Users/shu/Desktop/Source Code/ossca/.git/
shu@sHus-MacBook-Pro .git % cd git && ll
total 24
drwxr-xr-x 9 shu staff 288 4 23 23:48 ./
drwxr-xr-x 3 shu staff 96 4 23 23:48 ../
-rw-r--r-- 1 shu staff 137 4 23 23:48 config
-rw-r--r-- 1 shu staff 73 4 23 23:48 description
-rw-r--r-- 1 shu staff 21 4 23 23:48 HEAD
drwxr-xr-x 15 shu staff 480 4 23 23:48 hooks/
drwxr-xr-x 3 shu staff 96 4 23 23:48 info/
drwxr-xr-x 4 shu staff 128 4 23 23:48 objects/
drwxr-xr-x 4 shu staff 128 4 23 23:48 refs/
git init ๋ช ๋ น์ด๋ฅผ ํตํด repository๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์ด์ฒ๋ผ .git ํด๋๊ฐ ์์ฑ์ด ๋ฉ๋๋ค.
git ํด๋ ์์๋ ์ฌ๋ฌ ๊ฐ์ ํด๋์ ํ์ผ๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ, ์ด๋ฒ์ ์ง์ค์ ์ผ๋ก ๋ณผ ๊ฑด objects ํด๋์์!
objects ํด๋๋ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณณ์ด์์. ํ์ผ ๋ด์ฉ, ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ, ์ปค๋ฐ ์ ๋ณด๊ฐ ์ ๋ถ ์ฌ๊ธฐ ๋ค์ด์์ด์!
๊ฐ๊ฐ blob, tree, commit ์ด๋ผ๋ ํ์ ์ผ๋ก ๊ตฌ๋ถ๋์ ์ ์ฅ๋์ด์.
refs ํด๋๋ ๋ธ๋์น๋ ํ๊ทธ๊ฐ ์ด๋ค ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋์ง ์ ์ฅํ๋ ๊ณณ์ด์์.
Working Directory → Staging Area
shu@sHus-MacBook-Pro ossca % echo "hello, World" | tee first.txt > /dev/null
shu@sHus-MacBook-Pro ossca % git add first.txt
shu@sHus-MacBook-Pro ossca % git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: first.txt
shu@sHus-MacBook-Pro ossca % cd .git/objects/bd && ll
total 8
drwxr-xr-x 3 shu staff 96 4 26 20:34 ./
drwxr-xr-x 5 shu staff 160 4 26 20:34 ../
-r--r--r-- 1 shu staff 29 4 26 20:34 c395c2a4533f9951b648b5234f435935e526a8
ํ ์คํธ ํ์ผ์ ์์ฑํ๊ณ git add ๋ช ๋ น์ด๋ก ํด๋น ํ์ผ์ Staging Area๋ก ์ฌ๋ฆฌ๊ฒ ๋๋ฉด objects ํด๋ ๋ด์ ํ์ผ์ด ์์ฑ๋์ด์
์ด ํ์ผ์ ํด๋น ํ ์คํธ ํ์ผ์ ๋ํ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์์ด์!
ํ์ผ ๋ด์ฉ์ SHA-1 ํด์ฑํ์ฌ ๋์จ 40์๋ฆฌ ์ค ๋งจ ์ฒ์ 2์๋ฆฌ๋ฅผ ํด๋๋ช / ๋๋จธ์ง 38์๋ฆฌ๋ฅผ ํ์ผ๋ช ์ผ๋ก ์ฌ์ฉํด์.
์์ first.txt ํ์ผ์ ๋ํ SHA-1 ํด์ฑ๊ฐ์ "bdc395c2a4533f9951b648b5234f435935e526a8" ๋ผ๊ณ ๋ณผ ์ ์์ด์.
๋ํ, ํด๋น ํ์ผ์ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ์ ์ฝํ๊ธฐ ์ํด zlib ํ์์ผ๋ก ์์ถ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋์ ํ์ด์ฌ ์ฝ๋๋ฅผ ํตํด ์๋ฌธ ๋ด์ฉ์ ํ์ธํ ์ ์์ด์!
import zlib
file_path = "c395c2a4533f9951b648b5234f435935e526a8"
decom_content = zlib.decompress(open(file_path, "rb").read())
print(decom_content)
# [๊ฒฐ๊ณผ] b'blob 13\x00hello, World\n'
ํ ์คํธ ํ์ผ์ 'git restore --staged first.txt' ๋ช ๋ น์ด๋ฅผ ํตํด Working Directory๋ก ๋ฐ๊พธ์ด๋ objects ํด๋ ๋ด ํ์ผ์ ์ญ์ ๋์ง ์์์.
git์ object store๋ 'append-only' ๋ฐฉ์์ ์ทจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ์๊ธด ํ์ผ์ GC์ ์ํด ์ญ์ ๋๊ธฐ ์ ๊น์ง ์ ์ง๋์ด์.
Staging Area → Repository
shu@sHus-MacBook-Pro ossca % git add first.txt
shu@sHus-MacBook-Pro ossca % git commit -m "first commit"
[main (root-commit) fffc3b9] first commit
1 file changed, 1 insertion(+)
create mode 100644 first.txt
shu@sHus-MacBook-Pro ossca % git log
commit fffc3b97302a953e011f55246de5069d8adc2e53 (HEAD -> main)
Author: xxx <xxx@xxxx.xxxx>
Date: Sun Apr 26 20:57:48 2026 +0900
first commit
shu@sHus-MacBook-Pro ossca % cd .git/objects && ll
total 0
drwxr-xr-x 7 shu staff 224 4 26 20:57 ./
drwxr-xr-x 12 shu staff 384 4 26 20:57 ../
drwxr-xr-x 3 shu staff 96 4 26 20:57 60/
drwxr-xr-x 3 shu staff 96 4 26 20:34 bd/
drwxr-xr-x 3 shu staff 96 4 26 20:57 ff/
drwxr-xr-x 2 shu staff 64 4 26 20:33 info/
drwxr-xr-x 2 shu staff 64 4 26 20:33 pack/
shu@sHus-MacBook-Pro objects % ls bd/
c395c2a4533f9951b648b5234f435935e526a8
shu@sHus-MacBook-Pro objects % ls 60/
e8a3a28d414830db8c260a265b5d027fe59fec
shu@sHus-MacBook-Pro objects % ls ff/
fc3b97302a953e011f55246de5069d8adc2e53
git commit ๋ช ๋ น์ด๋ก ์ปค๋ฐ์ ํ๊ฒ ๋๋ฉด objects ํด๋ ๋ด์ 2๊ฐ์ ํ์ผ์ด ๋ ์ถ๊ฐ๋์ด์. (60/, ff/)
์ง๊ธ๊น์ง 'git add + git commit' ์ ํตํด objects ํด๋ ๋ด์ ์ด 3๊ฐ์ง์ ํ์ผ์ด ์์ฑ์ด ๋์๋๋ฐ ๊ฐ ํ์ผ๋ค์ ๋ํด ์์๋ณด์์!
1๏ธโฃ Blob
import zlib
file_path = "c395c2a4533f9951b648b5234f435935e526a8"
decom_content = zlib.decompress(open(file_path, "rb").read())
print(decom_content)
b'blob 13\x00hello, World\n'
gid add ์์ ์ ์์ฑ๋ ํ์ผ์ด์์. ํ์ผ๋ช ์ด๋ ๊ฒฝ๋ก๋ ์ ํ ํฌํจ๋์ด ์์ง ์๊ณ ์ค์ง ํ์ผ ๋ด์ฉ๋ง ์ ์ฅํ๊ณ ์์ด์!
2๏ธโฃ Tree
import zlib
file_path = "e8a3a28d414830db8c260a265b5d027fe59fec"
decom_content = zlib.decompress(open(file_path, "rb").read())
print(decom_content)
b'tree 37\x00100644 first.txt\x00\xbd\xc3\x95\xc2\xa4S?\x99Q\xb6H\xb5#OCY5\xe5&\xa8'
Blob ๋ง์ผ๋ก๋ ์ด ํ์ผ ๋ด์ฉ์ด ์ด๋ค ํ์ผ์ ๋ํ ์ํ๋ฅผ ๊ด๋ฆฌํ๋์ง ์ ์ ์์ด์ Tree๊ฐ ํ์ผ๋ช ๊ณผ Blob์ ์ฐ๊ฒฐํด์ฃผ๋ ๋งคํํ ์ด๋ธ ์ญํ ์ ํด์.
Tree ์ ๋ณด๋ฅผ ์๋์ฒ๋ผ ์ฝ์ ์ ์์ด์!
๐ tree 37 = ์ค๋ธ์ ํธ ํ์ + ํฌ๊ธฐ
๐ \x00 = ๊ตฌ๋ถ์
๐ 100644 = ํ์ผ ๊ถํ
๐ first.txt = ํ์ผ๋ช
๐ \x00 = ๊ตฌ๋ถ์
๐ \xbd\xc3\x95\xc2\xa4S?\x99Q\xb6H\xb5#OCY5\xe5&\xa8 = blob ํด์ (๋ฐ์ด๋๋ฆฌ 20byte)
โ ํ์ผ์ด ์ฌ๋ฌ ๊ฐ๋ฉด ํ์ผ ์๋งํผ ์ค์ด ๋์ด๋๊ณ ํ์ผ์ด ๋ง์์ง์๋ก Tree ์ค๋ธ์ ํธ์ ํฌ๊ธฐ๋ ์ปค์ง๊ฒ ๋์ด์.
โ ๋ํ ํ์ผ์ด ํด๋์ธ ๊ฒฝ์ฐ, blob ๋์ ๋ ๋ค๋ฅธ Tree๋ฅผ ๊ฐ๋ฆฌ์ผ์. (Tree๊ฐ Tree๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐฉ์์ผ๋ก ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํํํด์!)
3๏ธโฃ Commit
import zlib
file_path = "fc3b97302a953e011f55246de5069d8adc2e53"
decom_content = zlib.decompress(open(file_path, "rb").read())
print(decom_content)
b'commit 209\x00tree 60e8a3a28d414830db8c260a265b5d027fe59fec\nauthor \xe1\x84\x87\xe1\x85\xa1\xe1\x86\xa8\xe1\x84\x89\xe1\x85\xa5\xe1\x86\xbc\xe1\x84\x89\xe1\x85\xae <ssp0622@diffchild.com> 1777204668 +0900\ncommitter \xe1\x84\x87\xe1\x85\xa1\xe1\x86\xa8\xe1\x84\x89\xe1\x85\xa5\xe1\x86\xbc\xe1\x84\x89\xe1\x85\xae <xxxxx@xxxxx.xxxxx> 1777204668 +0900\n\nfirst commit\n'
Tree ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๋ฆฌํค๋ฉด์ ์์ฑ์, ์๊ฐ, ์ปค๋ฐ ๋ฉ์์ง ๋ฑ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ด์.
ํํ git log ์์ ๋ณด๋ ์ปค๋ฐ ํด์๊ฐ ๋ฐ๋ก ์ด commit ์ค๋ธ์ ํธ์ ๊ฒฝ๋ก๋ผ๊ณ ๋ณผ์ ์์ด์.
Commit ์ ๋ณด๋ฅผ ์๋์ฒ๋ผ ์ฝ์ ์ ์์ด์!
๐ commit 209 = ์ค๋ธ์ ํธ ํ์ + ํฌ๊ธฐ
๐ \x00 = ๊ตฌ๋ถ์
๐ tree 60e8a3a28d414830db8c260a265b5d027fe59fec = Tree ํด์
๐ author ... = ์์ฑ์ + ์๊ฐ (Unix timestamp)
๐ committer = ์ปค๋ฏธํฐ + ์๊ฐ
๐ first commit = ์ปค๋ฐ ๋ฉ์์ง
์ง๊ธ๊น์ง ์ดํด๋ณธ Blob, Tree, Commit ์ธ ์ค๋ธ์ ํธ์ ๊ด๊ณ๋ฅผ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ด์.

๋ง์น๋ฉฐ
.git ํด๋๋ฅผ ์ง์ ๋ฏ์ด๋ณด๊ธฐ ์ ๊น์ง๋ ๊ทธ๋ฅ "์ด๋๊ฐ์ ์ ์ฅ๋๊ฒ ์ง" ํ๊ณ ๋๊ฒผ๋๋ฐ, ์ด๋ฒ ๋ธ๋ก๊น ์ ํตํด ๋ด๋ถ ๋์ ๊ณผ์ ์ ์๊ฒ ๋์ด์.
git add ํ๋ ์๊ฐ ์ด๋ฏธ blob ์ค๋ธ์ ํธ๊ฐ ์๊ธฐ๊ณ , git commit ํ๋ฉด tree, commit ์ค๋ธ์ ํธ๊ฐ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋๊ณ , ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋น์ฐํ๊ฒ ์ฐ๋ ๋ธ๋์น๋ ๊ฒฐ๊ตญ ํน์ ์ปค๋ฐ ํด์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋ถ๊ณผํ๋ค๋ ๊ฒ๋์.
์๊ณ ๋ณด๋ฉด ๋๊ฒ ๋จ์ํ ๊ตฌ์กฐ์ธ๋ฐ, ๊ฒฐ๊ตญ ๋จ์ํจ์ด git์ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ง๋๋ ์ด์ ๋ผ๊ณ ์๊ฐํด์.
๋จ์ํ, ๋ช ๋ น์ด๋ง ์ธ์์ ์ผ๋ ์์ ๊ณผ ๋ฌ๋ฆฌ ์ด์ ๋ ์ ๋๋ก ์ดํดํ๊ณ ์ฐ๋ ๋๋์ด ๋ค์ด์ ์ข์์ต๋๋ค!
'๐ ์ฐ์ฌ ์๋ฆฌ์ฆ > OSSCA ์ฒดํํ ํ๋ก์ ํธ (Valkey)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Valkey๋ ํด๋ผ์ด์ธํธ์ ์ด๋ป๊ฒ ํต์ ํ ๊น? (0) | 2026.05.02 |
|---|