소프트 스킬 · 심화
Git의 객체 데이터베이스를 구성하는 blob, tree, commit 객체가 각각 무엇을 저장하며 서로 어떻게 참조하는지 설명해주세요. 동일한 내용의 파일이 여러 디렉터리에 존재할 때 blob 객체는 어떻게 처리되나요?
힌트 · SHA-1(또는 SHA-256) 해시 기반 콘텐츠 주소 지정과 객체 간 참조 구조 관점에서 접근하세요.
blobtreecommit해시참조
모범답안
Git의 객체 데이터베이스는 blob, tree, commit 세 가지 주요 객체로 구성됩니다.
blob 객체는 파일의 실제 내용을 저장합니다. 파일 내용의 SHA-1(또는 SHA-256) 해시 값을 고유 식별자로 사용하며, 내용이 같으면 해시 값도 같아집니다.
tree 객체는 디렉터리 구조를 나타냅니다. 각 tree 객체는 해당 디렉터리에 포함된 파일(blob 객체)과 하위 디렉터리(다른 tree 객체)의 목록을 저장합니다. 여기서 각 항목은 파일 이름과 해당 blob 또는 tree 객체의 해시 값을 참조합니다.
commit 객체는 특정 시점의 스냅샷을 나타냅니다. 각 commit 객체는 부모 commit 객체(들), 작성자 정보, 커밋 메시지, 그리고 해당 커밋 시점의 루트 tree 객체의 해시 값을 참조합니다.
동일한 내용의 파일이 여러 디렉터리에 존재하더라도, blob 객체는 파일 내용이 동일하면 단 하나의 객체만 생성됩니다. 즉, 내용이 같은 파일은 모두 동일한 blob 객체를 참조하게 되어 저장 공간을 효율적으로 사용합니다. tree 객체는 각 디렉터리 구조에 맞게 해당 blob 객체를 참조하는 방식으로 관리됩니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Git / 협업 면접 질문
- 모노레포(Monorepo)와 멀티레포(Multi-repo)의 차이와 장단점을 설명해주세요.
- Trunk-based Development란 무엇이며, Git Flow와 어떻게 다른가요?
- GitHub Actions를 이용한 CI/CD 파이프라인 구성 방법을 설명해주세요.
- git add를 실행했을 때 Git 내부적으로 어떤 일이 일어나는지 인덱스(index) 파일과 blob 객체 생성 관점에서 설명해주세요. 작업 디렉터리, 인덱스, 마지막 커밋 트리 세 가지 상태를 git이 어떻게 비교하나요?
- 커밋 해시(commit SHA)는 어떤 정보들을 입력으로 계산되나요? 커밋 메시지나 작성자만 다르고 트리 내용이 동일한 두 커밋이 서로 다른 해시를 갖는 이유와, 이 특성이 히스토리 무결성에 어떤 의미를 갖는지 설명해주세요.