Git의 리포지토리: 개념, 유형 및 작동 방식

저자: IT Sectr 게시일: 2026-05-09 읽는 시간: 8 분

Git 리포지토리 — 개발 전반에 걸쳐 Git이 파일의 모든 변경 사항을 추적하는 프로젝트 소스 코드 저장소입니다. 리포지토리에는 커밋, 브랜치, 태그의 전체 기록이 포함되어 있어 개발자들이 코드에서 공동 작업을 할 수 있습니다. Git, 2024에 따르면, 리포지토리는 모든 버전 관리 시스템의 기초이며 전 세계 수백만 프로젝트에서 사용됩니다.

핵심 요점

  • Git 리포지토리 — .git 서비스 폴더가 있는 프로젝트 디렉토리로, 모든 변경 기록이 저장됩니다.
  • 로컬 리포지토리 — 개발자 컴퓨터에 있으며 인터넷 연결 없이 코드 작업이 가능합니다.
  • 원격 리포지토리 — GitHub, GitLab 또는 Bitbucket 서버에 호스팅되며 참여자 간 동기화에 사용됩니다.
  • Git — 데이터를 변경 목록이 아닌 파일 스냅샷으로 저장하여 브랜칭과 병합 작업을 빠르게 합니다.
  • 버전 관리 시스템 — 동일한 프로젝트에서 동시 작업 문제를 해결하고 코드 병합 시 충돌을 방지합니다.

Git에서 리포지토리란

Git 리포지토리 — 버전 관리 시스템이 프로젝트 파일 변경 기록을 설명하는 메타데이터와 객체를 저장하는 데이터 구조입니다. 개발자가 git init 명령어로 리포지토리를 초기화하면 Git은 프로젝트 루트에 숨겨진 폴더 .git을 생성합니다.

이 폴더 안에는 시스템 작동에 필요한 모든 객체, 참조 및 구성 파일이 있습니다. 리포지토리는 특정 위치에 고정되지 않습니다 — 개발자가 로컬로 생성한 후 원격 서버에 연결할 수 있습니다.

Git은 분산 리포지토리 모델을 사용합니다. 프로젝트의 각 구성원은 자신의 컴퓨터에 전체 기록 복사본을 가지고 있습니다. 즉, 커밋, 기록 보기, 브랜치 생성 등 대부분의 작업이 서버에 접속하지 않고 로컬에서 수행됩니다.

Git 문서에 따르면, 분산 아키텍처는 시스템을 내결함성 있게 만듭니다. 서버가 다운되더라도 로컬 리포지토리가 프로젝트의 전체 기록을 복원하는 소스가 될 수 있습니다.

로컬 리포지토리와 원격 리포지토리

로컬 리포지토리 — 개발자 컴퓨터의 프로젝트 복사본입니다. 커밋, 브랜치, 태그의 전체 기록을 포함하며 네트워크 연결 없이 commit, branch, merge, rebase 작업을 수행할 수 있습니다.

원격 리포지토리 — 서버에 호스팅되며 모든 팀 구성원의 동기화 지점 역할을 합니다. 개발자는 git push 명령어로 변경 사항을 보내고 git pull 명령어로 다른 사람의 변경 사항을 가져옵니다.

로컬 리포지토리와 원격 리포지토리 간의 연결은 remote origin — Git 구성에 저장된 서버 URL — 을 통해 설정됩니다. 하나의 로컬 리포지토리를 여러 원격 리포지토리에 연결할 수 있어 포크 작업 시 유용합니다.

이 모델의 주요 장점은 개발자가 오프라인에서 코드 작업을 하고 결과를 보낼 준비가 되었을 때만 변경 사항을 동기화할 수 있다는 점입니다.

로컬 리포지토리와 원격 리포지토리의 차이점

특성로컬원격
위치개발자 컴퓨터서버 (GitHub, GitLab)
오프라인 접근모든 작업에 완전 접근연결 없이 사용 불가
동기화원격과 Push/Pull로컬의 push 수신
백업데이터 손실에 보호되지 않음백업과 함께 서버에 저장

Git이 리포지토리에 데이터를 저장하는 방식

Git의 저장 모델은 다른 버전 관리 시스템과 근본적으로 다릅니다. 버전 간 변경 목록(델타)을 저장하는 대신 Git은 각 커밋 시점의 모든 프로젝트 파일에 대한 완전한 스냅샷을 저장합니다.

리포지토리의 각 객체는 고유한 40자 SHA-1 해시로 식별됩니다. 커밋 간에 파일 내용이 변경되지 않으면 Git은 새 객체를 만들지 않고 기존 객체를 재사용합니다 — 공간을 절약할 수 있습니다.

Git은 네 가지 유형의 객체를 사용합니다: blob(파일 내용), tree(디렉토리 구조), commit(메타데이터가 있는 스냅샷), tag(커밋에 대한 명명된 참조). 모든 객체는 .git/objects 폴더에 저장됩니다.

Git Internals에 따르면, Git의 객체 모델은 데이터 무결성을 보장합니다. 파일 내용의 변경은 새 해시를 생성하므로 기록을 눈에 띄지 않게 변경하는 것이 불가능합니다.

.git 폴더의 구조

.git 폴더는 리포지토리의 핵심입니다. 이것이 없으면 Git은 변경 사항을 추적할 수 없으며, 일반 디렉토리는 단순한 파일 모음에 불과합니다. 이 폴더의 구조를 이해하면 리포지토리 문제를 진단하는 데 도움이 됩니다.

  • objects/ — 리포지토리의 모든 객체: blobs, trees, commits, tags. 압축된 형태로 저장.
  • refs/ — 커밋 참조: heads(브랜치), tags(레이블), remotes(원격 브랜치).
  • HEAD — 현재 활성 브랜치 또는 커밋을 가리키는 파일.
  • config — 리포지토리 설정: 원격 URL, 사용자 이름, 이메일 및 기타 매개변수.
  • index — 스테이징 영역. Git이 커밋 준비된 파일 정보를 저장.
  • logs/ — 참조 업데이트 로그(reflog). HEAD와 브랜치 이동 기록을 저장.

HEAD 파일은 특별히 주목할 만합니다. 정상 상태에서는 브랜치에 대한 기호 참조를 포함합니다(예: ref: refs/heads/main). detached HEAD 상태에서는 커밋을 직접 가리킵니다 — 새 커밋이 어떤 브랜치에도 연결되지 않음을 의미합니다.

리포지토리 기본 작업

Git 리포지토리 작업에는 개발자가 매일 수행하는 기본 작업들이 포함됩니다. 각 작업은 새 객체를 추가하거나 참조를 이동하여 리포지토리 상태를 변경합니다.

  • git init — 현재 디렉토리에 새 빈 리포지토리를 생성합니다. Git이 초기 구조로 .git 폴더를 만듭니다.
  • git clone — 기존 원격 리포지토리를 전체 커밋 기록과 함께 로컬 머신에 복사합니다.
  • git add — 파일 변경 사항을 스테이징 영역(인덱스)에 추가하여 커밋을 준비합니다.
  • git commit — 인덱스의 데이터를 기반으로 프로젝트 스냅샷을 생성하고 새 커밋 객체로 저장합니다.
  • git push — 로컬 리포지토리에서 원격 리포지토리로 새 커밋을 보내 서버의 브랜치를 업데이트합니다.
  • git pull — 원격 리포지토리에서 새 커밋을 가져와 현재 로컬 브랜치에 병합합니다.

pushpull 작업만이 원격 서버 연결이 필요합니다. 다른 모든 작업은 완전히 로컬에서 수행되므로 기록 양이 많아도 빠른 속도를 보장합니다.

리포지토리에서 파일의 수명 주기

리포지토리의 각 파일은 네 가지 상태를 거칩니다: untracked(추적 안 함), modified(수정됨), staged(준비됨), committed(커밋됨). Git은 git add를 통해 명시적으로 추가되었거나 이미 커밋 기록에 있는 파일만 추적합니다.

이 모델을 이해하는 것이 Git을 효과적으로 사용하는 핵심입니다. 개발자는 수정된 파일 중 일부만 선택적으로 커밋을 준비하여 명확한 설명과 함께 논리적으로 완결된 커밋을 만들 수 있습니다.

원격 리포지토리는 일반적으로 웹 인터페이스, 접근 관리 시스템 및 협업 개발을 위한 추가 도구를 제공하는 전문 플랫폼에 호스팅됩니다.

  • GitHub — 1억 개 이상의 리포지토리를 보유한 가장 큰 플랫폼. Actions, Pull Requests, Issues, Wiki 제공. 공개 프로젝트는 무료.
  • GitLab — CI/CD, Container Registry, 내장 DevOps 파이프라인이 통합된 플랫폼. SaaS 및 셀프 호스팅 버전으로 제공.
  • Bitbucket — Jira 및 Trello와 통합되는 Atlassian 솔루션. 유연한 접근 설정으로 기업 환경에서 인기.

플랫폼 선택은 팀 규모, 개인정보 요구사항 및 필요한 통합에 따라 달라집니다. 모바일 개발에서는 폭넓은 커뮤니티 지원과 iOS 및 Android용 CI/CD 도구 통합으로 GitHub이 자주 선택됩니다.

리포지토리 작업 명령어 예시

실용적인 시나리오를 생각해 봅시다. 개발자가 기존 리포지토리를 클론하고, 새 브랜치를 만들고, 변경 사항을 적용한 후 서버에 푸시합니다. 각 명령어는 리포지토리의 다양한 구성 요소와의 작업을 보여줍니다.

bash
# 원격 리포지토리 클론
git clone https://github.com/user/mobile-app.git

# 프로젝트 디렉토리로 이동
cd mobile-app

# 새 기능 브랜치 생성 및 전환
git checkout -b feature/auth

# 수정된 파일 상태 확인
git status

# 모든 변경 사항을 스테이징 영역에 추가
git add .

# 설명과 함께 커밋 생성
git commit -m "Add authentication module"

# 원격 리포지토리로 변경 사항 푸시
git push origin feature/auth

git status 명령어는 일상 작업에서 가장 유용한 명령어 중 하나입니다. 어떤 파일이 수정되었는지, 어떤 파일이 커밋 준비되었는지, 어떤 파일이 Git에서 전혀 추적되지 않는지 보여줍니다.

커밋 기록 보기

리포지토리 기록을 분석하려면 다양한 형식 플래그와 함께 git log 명령어를 사용합니다. 커밋의 연대순, 작성자, 날짜 및 SHA-1 식별자를 표시합니다.

bash
# 브랜치 그래프 시각화와 함께 기록 보기
git log --oneline --graph --all

# 특정 커밋의 변경 사항 보기
git show a1b2c3d

# 현재 상태를 마지막 커밋과 비교
git diff HEAD

# 특정 파일의 기록 보기
git log --follow src/MainActivity.kt

--graph 플래그는 브랜치의 ASCII 그래프를 표시하며, 여러 브랜치에서 활발히 작업하는 리포지토리에서 특히 유용합니다. 빈번한 릴리스가 있는 모바일 프로젝트의 경우 시각적 그래프가 개발 구조를 빠르게 평가하는 데 도움이 됩니다.

자주 묻는 질문

리포지토리와 프로젝트의 차이점은 무엇인가요?

리포지토리는 변경 기록이 있는 코드의 기술적 저장소입니다. 프로젝트는 리포지토리, 작업 관리 시스템, 문서, 개발 프로세스를 포함하는 더 넓은 개념입니다. 하나의 프로젝트에 여러 리포지토리가 포함될 수 있습니다.

GitHub에서 리포지토리를 만드는 방법은?

GitHub 웹 인터페이스에서 New 버튼을 클릭하여 새 리포지토리를 만듭니다. 이름, 설명, 접근 수준을 지정합니다. 그런 다음 리포지토리를 로컬 머신에 클론하거나 git remote add origin을 통해 기존 로컬 리포지토리와 연결합니다.

삭제된 리포지토리를 복원할 수 있나요?

원격 리포지토리가 서버에서 삭제되었지만 최소 한 명의 개발자가 로컬 복사본을 가지고 있다면 복원이 가능합니다. 새 원격 리포지토리를 만들고 전체 기록이 있는 로컬 복사본에서 git push --force를 실행하면 됩니다.

리포지토리 포크란 무엇인가요?

포크는 내 계정에 있는 다른 사람의 리포지토리 복사본입니다. 전체 기록 복사본을 얻고 원본에 영향을 주지 않고 모든 변경을 할 수 있습니다. 포크는 Pull Request를 통해 오픈 소스 프로젝트에 참여하는 데 사용됩니다.

리포지토리 크기를 줄이는 방법은?

git gc를 사용하여 객체를 압축하고 도달할 수 없는 데이터를 제거합니다. git filter-branch 또는 git filter-repo를 통해 기록에서 큰 파일을 제거합니다. 바이너리 파일이 있는 프로젝트의 경우 Git LFS(Large File Storage)를 고려하세요.

요약

  • Git 리포지토리 — 각 커밋이 특정 시점의 모든 프로젝트 파일 스냅샷인, 완전한 변경 기록을 가진 코드 저장소.
  • 로컬 리포지토리 — 개발자 컴퓨터에 있으며 네트워크 연결 없이 모든 Git 작업을 지원.
  • 원격 리포지토리 — push와 pull로 팀 작업을 동기화하고 모든 참여자에게 단일 진실 공급원 제공.
  • .git 폴더 — 모든 서비스 정보(객체, 브랜치 참조, 구성, reflog 작업 로그) 포함.
  • GitHub, GitLab, Bitbucket — 추가 CI/CD 도구를 갖춘 원격 리포지토리 호스팅의 주요 플랫폼.
  • Git의 객체 모델 — SHA-1 해시로 각 객체를 식별하여 리포지토리 데이터 무결성 보장.
  • 권장: 하루에 최소 한 번 커밋하고 각 작업 단계 완료 후 원격 리포지토리와 동기화하세요.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기