05. 원격 저장소(Remote Repository)
- 원격 저장소가 무엇이고 왜 필요한지 이해한다
- GitHub에 저장소를 만들고 로컬과 연결한다 (
git remote) push로 올리고clone/pull/fetch로 내려받는다- 협업 시 충돌을 막는 pull → push 순서를 익힌다
5.1 원격 저장소란?
지금까지는 내 컴퓨터 안(로컬)에서만 작업했습니다. 하지만 다음과 같은 상황이라면?
- 노트북이 고장 나면 모든 코드가 사라진다 😱
- 동료와 같은 프로젝트를 함께 작업하고 싶다
- 집과 회사에서 같은 코드를 이어서 작업하고 싶다
원격 저장소(Remote)는 인터넷 서버에 올려둔 저장소입니다. 로컬 저장소의 "온라인 백업본"이자 "팀의 공유 공간" 역할을 합니다.
flowchart TB
R["☁️ 원격 저장소<br/>GitHub 서버 — 모두의 공유본"]
L["💻 내 로컬 저장소<br/>내 컴퓨터"]
L -- "git push (올리기)" --> R
R -- "git pull (받기)" --> L
classDef remote fill:#f3e8ff,stroke:#9333ea,color:#6b21a8
classDef local fill:#dcfce7,stroke:#16a34a,color:#166534
class R remote
class L local
분산 버전 관리(1장)답게, 로컬과 원격 모두 완전한 이력을 가집니다. 원격은 "특별히 약속한 중심 저장소"일 뿐, 기술적으로는 로컬과 대등합니다.
5.2 원격 저장소 호스팅 서비스의 종류
원격 저장소를 무료/유료로 제공해주는 서비스(호스팅)는 여러 가지가 있습니다.
| 서비스 | 특징 |
|---|---|
| GitHub | 가장 대중적, 오픈소스 생태계 중심, 입문자 추천 |
| GitLab | 자체 서버 설치 가능, CI/CD 강력 |
| Bitbucket | Atlassian(소스트리 제작사) 제품, Jira 연동 |
이 책에서는 가장 널리 쓰이는 GitHub를 기준으로 설명합니다. 개념은 모든 서비스가 동일합니다.
5.3 GitHub 시작하기
- https://github.com 에서 무료 회원가입
- 우측 상단
+→ New repository 클릭 - 저장소 이름 입력 (예:
git-practice) - 공개 범위 선택 (Public 공개 / Private 비공개)
- Create repository 클릭
만들어진 저장소 페이지에 연결용 주소(URL)가 표시됩니다. 두 가지 방식이 있습니다.
https://...)가 대표적이며, Git에서는 원격 저장소가 어디 있는지를 가리킵니다.5.4 통신 프로토콜: HTTPS vs SSH
원격 저장소와 통신하는 방법은 크게 두 가지입니다.
| 방식 | 주소 형태 | 특징 |
|---|---|---|
| HTTPS | https://github.com/user/repo.git | 설정이 간단, 입문자 추천. 푸시 시 토큰(PAT) 인증 |
| SSH | git@github.com:user/repo.git | 키를 한 번 등록하면 매번 인증 불필요 |
- HTTPS(HyperText Transfer Protocol Secure): 웹 브라우저가 사이트에 접속할 때 쓰는 바로 그 방식. 주소창의
https://가 이것이며, 통신 내용이 암호화됩니다. - SSH(Secure Shell): 원격 컴퓨터에 안전하게 접속하기 위한 방식. 한 번 "열쇠(키)"를 만들어 등록해두면 매번 비밀번호를 입력하지 않아도 됩니다.
5.5 원격 저장소 연결하기 — git remote
이미 로컬에 만든 저장소(3~4장의 git-practice)를 GitHub에 연결해봅시다.
# 'origin'이라는 별칭으로 원격 저장소 등록 git remote add origin https://github.com/내아이디/git-practice.git
여기서 origin은 원격 저장소의 별칭(별명)입니다. 매번 긴 URL을 치지 않으려고 붙이는 이름이며, 관례적으로 첫 원격에 origin을 씁니다.
등록된 원격 확인
git remote # 별칭만 보기 git remote -v # URL까지 보기 (verbose)
origin https://github.com/내아이디/git-practice.git (fetch) origin https://github.com/내아이디/git-practice.git (push)
원격 별칭 변경 / 삭제
# 별칭 이름 변경 (origin → upstream) git remote rename origin upstream # 원격 연결 삭제 git remote remove origin # 원격의 상세 정보 보기 git remote show origin
소스트리에서는 좌측 Remotes 항목에서 원격 저장소와 그 브랜치들을 시각적으로 확인하고 추가/삭제할 수 있습니다.
5.6 올리기 — git push
로컬 커밋을 원격 저장소로 올리는 명령입니다.
# 첫 push: 로컬 main 브랜치를 origin에 올리고 추적 연결(-u) git push -u origin main
-u(또는--set-upstream)는 "로컬 main과 원격 origin/main을 연결"합니다.- 한 번
-u로 연결하면, 이후로는 그냥git push만 쳐도 됩니다.
# 두 번째부터는 간단히 git push
push 후 GitHub 페이지를 새로고침하면 내 파일들이 올라가 있는 것을 볼 수 있습니다. 🎉
로컬 브랜치가 "내가 따라갈 원격 브랜치"를 기억하는 것입니다. 한번
-u로 연결해두면 push/pull이 어디로 갈지 Git이 알아서 압니다.5.7 복제하기 — git clone
원격 저장소를 통째로 내 컴퓨터로 가져옵니다. (새 컴퓨터에서, 또는 동료의 프로젝트를 받을 때)
git clone https://github.com/내아이디/git-practice.git
- 전체 이력을 포함한 완전한 복사본이 생깁니다.
origin원격이 자동으로 연결됩니다 (별도remote add불필요).- 폴더 이름을 바꾸고 싶으면 뒤에 이름을 붙입니다:
git clone <url> my-folder
git init(새로 만들기)과 git clone(기존 것 복사)의 차이를 다시 정리하면:
| 용도 | 원격 연결 | |
|---|---|---|
git init | 새 저장소를 처음부터 생성 | 수동(remote add) |
git clone | 기존 원격 저장소를 복사 | 자동 |
5.8 내려받기 — git pull vs git fetch
동료가 원격에 새 커밋을 올렸다면, 나도 내 로컬에 받아와야 합니다. 받는 방법은 두 가지입니다.
git fetch — 가져오기만 (안전)
git fetch origin
- 원격의 변경 사항을 가져오기만 하고, 내 작업 파일에는 합치지 않습니다.
- "원격에 뭐가 바뀌었는지 먼저 구경하고, 합칠지 말지 내가 결정"하고 싶을 때 사용합니다.
- 받아온 내용은
origin/main같은 원격 추적 브랜치에 들어갑니다. 확인 후 직접 병합(git merge origin/main)합니다.
git pull — 가져오고 합치기 (편리)
git pull origin main # 또는 업스트림 연결돼 있으면 그냥 git pull
git pull=git fetch+git merge(가져오기 + 합치기를 한 번에)- 빠르고 편하지만, 충돌이 있으면 바로 해결해야 합니다.
- 혼자 작업하거나 변경이 단순하면 →
git pull(편함) - 큰 변경을 받기 전 미리 확인하고 싶으면 →
git fetch후 검토 (안전)
입문 단계에서는
pull을 주로 쓰되, fetch의 존재와 의미를 알아두세요.5.9 협업의 황금 규칙: pull 먼저, push 나중에
여러 명이 한 저장소에 작업하면 충돌(conflict)이 생길 수 있습니다. 이를 줄이는 핵심 습관이 있습니다.
작업 시작 전: git pull ← 남이 올린 최신 변경부터 받기
작업 / 커밋
push 하기 전: git pull ← 그 사이 또 올라온 게 있나 확인
git push ← 내 변경 올리기
push 했더니 이런 거부 메시지가 뜬다면:
```
! [rejected] main -> main (fetch first)
error: failed to push some refs...
```
이것은 "내가 모르는 새 커밋이 원격에 있다"는 뜻입니다. 당황하지 말고 먼저
git pull로 받아 합친 뒤(필요시 충돌 해결), 다시 git push 하면 됩니다. 절대 --force로 밀어붙이지 마세요 — 동료의 작업이 사라질 수 있습니다.소스트리에서는 상단 툴바의 Pull / Push 버튼으로 이 작업을 하며, 각 버튼에 "원격보다 몇 개 앞서거나 뒤처졌는지"가 숫자로 표시되어 직관적입니다.
5.10 인증 정보 캐시(저장)하기
매번 토큰을 입력하기 번거롭다면, Git이 인증 정보를 기억하게 할 수 있습니다.
# 일정 시간(기본 15분) 메모리에 저장 git config --global credential.helper cache # 캐시 유지 시간 늘리기 (예: 1시간 = 3600초) git config --global credential.helper 'cache --timeout=3600' # 영구 저장 (macOS는 keychain, Windows는 manager 권장) git config --global credential.helper store # 평문 저장(주의)
Windows의 Git Credential Manager, macOS의 Keychain은 토큰을 안전하게 저장해주므로 별도 설정 없이도 한 번 입력하면 이후 자동 처리되는 경우가 많습니다.
5.11 전체 협업 흐름 정리
# === 처음 한 번 === git clone https://github.com/team/project.git # 프로젝트 받기 cd project # === 매일 작업 === git pull # 1. 최신 변경 받기 # ... 코드 작업 ... git add . # 2. 장바구니에 담기 git commit -m "Add feature X" # 3. 기록하기 git pull # 4. (push 전) 다시 최신 받기 git push # 5. 내 작업 공유하기
이 사이클이 실무 협업의 기본입니다.
5.12 이 장에서 배운 것 (요약)
- 원격 저장소는 온라인 백업이자 팀 공유 공간
git remote add origin <url>로 연결,origin은 관례적 별칭- HTTPS는 토큰(PAT) 인증, SSH는 키 등록 후 편리
git push(올리기),git clone(복사),git pull(받고 합치기),git fetch(받기만)git pull=git fetch+git merge- 협업 황금 규칙: pull 먼저 → 작업 → pull → push, force push 금지
✍️ 확인 문제
git pull과git fetch의 차이를 한 문장으로 설명해보세요.- push가
[rejected] ... (fetch first)로 거부됐습니다. 무엇을 해야 하나요? git clone을 쓰면 원격 연결을 따로 해야 하나요?
여기까지가 1부(기초)입니다. 다음 단계에서는 Git의 진짜 강력함인 브랜치(branch)와 협업 심화 내용을 다룹니다.