저장소 (Repository)
A data structure used by version control systems to store metadata and object databases.
— 국제 분산 형상 관리 설계 규약에서 선언한, 디렉토리 트리 데이터 구조와 이력 해시 맵들을 완전 보증하는 깃 아카이브 데이터 구조
전 세계 개발자들이 일주일 동안 밤샘하며 짜낸 피와 눈물 어린 소스코드들이 영혼의 실 가닥처럼 촘촘히 엮여 영구 기록되는 거대한 역사 박물관. 하지만 로컬과 원격 저장소 이력이 사정없이 엇갈리는 순간, 내 영혼의 모든 수정 코드를 유실당할까 봐 섣불리 버튼을 누르지 못해 벌벌 떨게 만드는 긴장의 보금자리(...)
1. 개요
Git 같은 버전 관리 시스템에서 프로젝트 내부 파일의 소스코드 원본뿐만 아니라, 시간 경과에 따른 모든 수정 및 삭제 이력, 메타데이터 장부, 해시 키를 특수 디렉터리(예: 로컬의 .git 폴더) 내에 영구히 압축 보존해 주는 버전 형상 보존 및 대협업 기지를 통칭한다.
2. 로컬 저장소(Local)와 원격 저장소(Remote)의 복제식 아키텍처
Git 저장소의 유구한 축복은 '분산 복제식 아키텍처'에 있다. 중앙 집중식의 옛날 SVN과 달리, 깃 저장소는 개발자가 git clone을 실행하는 순간 중앙 서버의 전체 프로젝트 변경 역사와 브랜치 데이터베이스 전체를 개발자 개인 로컬 노트북 하드로 단 1비트의 유실 없이 통째로 통 복사해 이식해 온다.
- 로컬 저장소(Local Repo): 내 노트북 디렉터리 속 보이지 않는 숨김 디렉토리인
.git폴더가 본체이다. 인터넷이 뚝 끊긴 비행기나 시골 오지 캠핑장 텐트 안에서도 로컬 저장소 덕분에 1초 만에 버전을 저장하고 브랜치를 스위칭하며 끊김 없이 일할 수 있는 막강한 자유를 보장한다. - 원격 저장소(Remote Repo): GitHub나 GitLab 같은 클라우드 허브 저장소이다. 팀원들이 각자의 로컬 저장소에서 땀 흘려 코딩한 버전 이력을 인터넷 프로토콜 통신을 거쳐 하나로 동기화하고 연동하는 중앙 교차 교신소 역할을 전담한다.(...)
3. 관련 밈 및 드립
3.1. 저장소 폭파 후 대피령 밈
여러 명의 동료들과 원격 저장소에 머지 충돌을 해결해 보겠다고 검증되지 않은 복잡한 강제 리베이스나 체크아웃 기우제를 지내다가, 저장소 역사 해시 맵이 수리 불능 상태로 처참하게 박살 났을 때 개발자들이 단골로 지르는 전설적 폭사 포기법이다. 이들은 침착하게 '더 이상 이 저장소의 족보를 살릴 방도가 없으니, 그냥 이 로컬 폴더를 휴지통에 버리고 새로 clone 받자'며 저장소 도망 대피령을 선사하곤 한다.(...)
4. 여담
- 숨겨진 수호신, .git 폴더: 내 깃 저장소 프로젝트 루트 폴더에서 숨김 파일 보기를 켜보면 시커먼
.git디렉토리가 당당하게 박혀 있다. 이 폴더 안에 프로젝트 역사의 모든 압축 오브젝트 데이터가 들어 있으므로, 이 폴더를 실수로 삭제하는 순간 이 프로젝트는 평범한 텍스트 묶음 파일로 즉각 강등당하며 그간의 유구한 수만 개 역사 이력서가 영구 자폭 소멸해 버리는 지독한 저주가 서려 있다. - 모노레포(Monorepo) vs 멀티레포(Multirepo): 대기업 아키텍처 토론의 단골 화두이다. 하나의 거대 깃 저장소 안에 사내의 수십 개 하위 서비스 프로젝트 코드를 다 때려 박아 일괄 형상 관리하고 조율하는 방식이 모노레포이며, 서비스 독립성을 살리기 위해 각 기능 단위마다 개별 저장소를 수십 개씩 분할 개설해 굴리는 아키텍처가 멀티레포이다.
- 원격 저장소의 왕, 깃허브: 전 세계 원격 저장소의 90% 이상은 마이크로소프트(microsoft)가 인수한 GitHub 클라우드에 둥지를 틀고 있다. 깃허브는 단순 저장 공간을 넘어서 개발자들의 글로벌 포트폴리오 박물관이자 소셜 네트워크 장벽으로 위세를 떨치고 있다.