소프트 스킬 · 심화
git add를 실행했을 때 Git 내부적으로 어떤 일이 일어나는지 인덱스(index) 파일과 blob 객체 생성 관점에서 설명해주세요. 작업 디렉터리, 인덱스, 마지막 커밋 트리 세 가지 상태를 git이 어떻게 비교하나요?
힌트 · 인덱스가 단순 파일 목록이 아니라 다음 커밋의 스냅샷을 준비하는 캐시라는 점에서 접근하세요.
인덱스(index)blob 객체스테이징 영역해시트리 객체
모범답안
git add를 실행하면 Git은 먼저 작업 디렉터리의 변경된 파일을 스캔합니다. 각 파일의 내용을 읽어 SHA-1 해시값을 계산하고, 이 해시값과 파일 경로를 조합하여 고유한 blob 객체를 생성합니다. 이 blob 객체는 파일 내용의 스냅샷이라고 생각하면 됩니다.
이후, git add는 이 blob 객체의 정보(해시값, 파일 경로, 모드 등)를 .git/index 파일, 즉 인덱스에 기록합니다. 인덱스는 단순히 파일 목록이 아니라, 다음 커밋의 내용을 미리 준비해두는 스테이징 영역이자 캐시 역할을 합니다.
Git은 작업 디렉터리, 인덱스, 그리고 마지막 커밋의 트리 객체를 비교하여 변경 사항을 추적합니다. 작업 디렉터리의 파일은 실제 파일 시스템에 존재하며, 인덱스는 스테이징된 파일들의 상태를 나타냅니다. 마지막 커밋의 트리 객체는 이전 커밋 시점의 파일 구조와 내용을 담고 있습니다. Git은 이 세 가지를 비교하여 어떤 파일이 새로 추가되었는지, 수정되었는지, 삭제되었는지를 파악하고, 이를 바탕으로 다음 커밋을 준비합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Git / 협업 면접 질문
- Trunk-based Development란 무엇이며, Git Flow와 어떻게 다른가요?
- GitHub Actions를 이용한 CI/CD 파이프라인 구성 방법을 설명해주세요.
- Git의 객체 데이터베이스를 구성하는 blob, tree, commit 객체가 각각 무엇을 저장하며 서로 어떻게 참조하는지 설명해주세요. 동일한 내용의 파일이 여러 디렉터리에 존재할 때 blob 객체는 어떻게 처리되나요?
- 커밋 해시(commit SHA)는 어떤 정보들을 입력으로 계산되나요? 커밋 메시지나 작성자만 다르고 트리 내용이 동일한 두 커밋이 서로 다른 해시를 갖는 이유와, 이 특성이 히스토리 무결성에 어떤 의미를 갖는지 설명해주세요.