Git 내부: 작동 원리와 .git 폴더의 역할

발행: (2026년 1월 4일 오전 01:48 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

Cover image for Inside Git: How It Works and the Role of the .git Folder

대부분의 개발자는 git init, git add, git commit 같은 명령어를 매일 사용하지만, 실제로 Git이 내부에서 이러한 커밋을 어떻게 처리하는지는 잘 모릅니다.

이 블로그에서는 Git 내부를 살펴보고, Git이 내부적으로 어떻게 작동하는지 확인한 뒤, .git 폴더의 중요한 역할을 탐구해 보겠습니다.

Git이란? (간단 요약)

Git은 개발자들이 변경 사항을 추적하고, 협업하며, 프로젝트 히스토리를 효율적으로 관리할 수 있게 해주는 버전 관리 시스템입니다.

Git에 대해 더 알고 싶다면, 이 블로그도 읽어보세요. 👇

Git 작동 방식 (내부 보기)

Git은 세 가지 주요 영역에서 작동합니다:

  1. Working Directory – 실제 프로젝트 파일입니다.
  2. Staging Area – 변경 사항을 준비하는 곳입니다.
  3. Repository – Git이 스냅샷을 영구적으로 저장하는 곳입니다.

커밋을 할 때마다 Git은:

  • 추적된 모든 파일의 스냅샷을 찍습니다.
  • 이를 .git 디렉터리 안에 안전하게 저장합니다.
  • 커밋들을 서로 연결합니다.

Git internal diagram

Source:

Git의 핵심: .git 폴더

git init 명령을 실행하면:

git init

Git은 프로젝트 루트 안에 숨김 폴더를 생성합니다. 실제로 존재하지만 파일 탐색기에서는 보이지 않습니다.

👉 이 폴더는 Git 전체의 두뇌와 같습니다.
삭제하면 프로젝트는 더 이상 Git 저장소가 아닙니다.

.git 폴더 안에는 무엇이 있을까?

명령줄에서도 확인할 수 있습니다:

cd .git
ls -la

objects/ – 모든 데이터가 저장되는 곳

이 디렉터리에는 커밋, 파일, 디렉터리 구조 등 모든 Git 데이터가 들어 있습니다.

Objects directory

  • Commit objects – 특정 시점의 저장소 스냅샷.
  • Tree objects – 디렉터리 계층 구조를 나타냅니다.
  • Blob objects – 파일 내용을 저장합니다.

Note: git log는 커밋 객체만 보여 주지만, .git/objects에는 트리와 블롭도 포함되어 있어 커밋보다 더 많은 디렉터리를 볼 수 있습니다.

refs/ – 브랜치와 태그 포인터

이 폴더는 브랜치와 태그에 대한 참조를 보관합니다.

Refs directory

  • Branches (refs/heads) – 각 브랜치의 최신 커밋을 가리킵니다.
  • Tags (refs/tags) – 특정 커밋을 표시합니다.

각 브랜치는 단순히 커밋 해시를 가리키는 포인터일 뿐입니다.

Branch pointer example

HEAD – 현재 위치를 알려 줍니다

HEAD 파일은 Git에게 다음을 알려 줍니다:

  • 현재 체크아웃된 브랜치.
  • 현재 체크아웃된 커밋.

HEAD file

index – 스테이징 영역

index(또는 스테이징 영역)는 다음을 저장합니다:

  • git add 로 추가한 파일들.
  • 다음 커밋이 될 정확한 스냅샷.

작업 디렉터리와 저장소 사이의 다리 역할을 합니다.

config – 저장소 설정

config 파일에는 다음이 포함됩니다:

  • 원격 URL.
  • 사용자 설정(이름, 이메일).
  • 저장소 전용 설정.

Config file

TL;DR

  • Git은 모든 것을 숨겨진 .git 디렉터리에 저장합니다.
  • objects/는 원시 데이터(커밋, 트리, 블롭)를 보관합니다.
  • refs/는 브랜치와 태그를 추적합니다.
  • HEAD는 현재 브랜치/커밋을 가리킵니다.
  • index는 스테이징 영역입니다.
  • config는 저장소 설정을 담고 있습니다.

이 구성 요소들을 이해하면 Git이 변경 사항을 추적하는 방식과 git commit, git checkout, git push 같은 작업이 작동하는 원리를 알 수 있습니다. 즐거운 커밋 되세요! 🚀

기본 워크플로우

# Initialize a git repository
git init

# Stage changes
git add .

# Commit the staged changes
git commit -m "message"

Git이 수행하는 작업

  • 리포지토리 초기화.git 디렉터리를 생성합니다.
  • git add는 스테이징된 파일들을 .git/objects/ 안에 blob 객체로 저장합니다.
  • git commit -m "message"는 디렉터리 구조를 나타내는 tree 객체를 생성합니다.
  • 그 후 Git은 다음을 포함하는 commit 객체를 만듭니다:
    • 루트 트리에 대한 포인터.
    • 부모 커밋에 대한 포인터(있는 경우).
    • 작성자와 커밋터 정보.
    • 타임스탬프.
    • 커밋 메시지.

git commit object diagram

이미지 출처: freeCodeCamp

최종 생각

Git은 겉보기에는 단순해 보이지만, 내부적으로는 강력한 데이터베이스입니다.
.git 폴더는 단순한 설정 폴더가 아니라; 프로젝트의 전체 히스토리와 구조를 포함하고 있습니다.

읽어 주셔서 감사합니다! 이 글이 마음에 드셨다면 아래 주제들을 더 읽어볼 수 있습니다:

저자 프로필 이미지

Back to Blog

관련 글

더 보기 »

커밋 메시지 형식

Commit Message Format 각 커밋 메시지는 헤더, 본문, 푸터로 구성됩니다. 헤더는 type과 선택적인 scope를 포함하는 특수한 형식을 가지고 있습니다,…

Git 초보자를 위한

Git이란 무엇인가? Git은 코드의 변경 사항을 저장하고 추적하며 관리하는 데 도움이 되는 도구입니다. 간단히 말하면, Git은 프로젝트의 모든 버전을 기억하므로 여러분은…

Git 학습

Git이란 무엇인가? Git은 2005년에 Linus Torvalds가 만들었다. 버전 관리 시스템 버전 관리 시스템의 유형 1. 로컬 VCS - 예시: 제공되지 않음 - 제한…