전 글에서 모듈과 패키지를 직접 만드는 방법을 정리했습니다.
이제 만든 코드를 어떻게 관리하고 공유할지를 다룰 차례입니다.
이번 편에서는 버전 관리 시스템인 Git과 원격 저장소 서비스인 GitHub을 처음부터 설정하는 과정을 정리합니다.
Git이 필요한 이유
코드를 혼자 작성하다 보면 어느 순간 "방금 전 버전으로 돌아가고 싶다"거나, "이 코드가 언제, 왜 바뀌었는지 알고 싶다"는 상황이 생깁니다.
파일 이름 끝에 버전 이름을 붙여가며 관리해본 경험이 있다면 그 불편함을 알 것입니다.
팀으로 작업할 때는 이 문제가 훨씬 복잡해집니다.
여러 사람이 같은 파일을 동시에 수정하면 누군가의 변경사항이 덮어씌워질 수 있기 때문입니다.
Git은 이 문제를 해결하기 위해 만들어진 분산 버전 관리 시스템(Distributed Version Control System, DVCS)입니다.
2005년 리눅스 커널 개발을 관리하기 위해 Linus Torvalds가 만들었고, 현재는 전 세계 소프트웨어 개발의 표준 도구로 자리잡았습니다.
Git이 제공하는 핵심 기능을 정리하면 이렇습니다.
- 변경 이력 추적 — 누가, 언제, 무엇을, 왜 바꿨는지 모든 기록이 남습니다.
- 이전 버전으로 복원 — 문제가 생기면 특정 시점으로 되돌릴 수 있습니다.
- 브랜치와 병합 — 기능별로 독립된 작업 흐름을 만들고 나중에 합칠 수 있습니다.
- 분산 구조 — 모든 개발자가 전체 이력의 복사본을 로컬에 갖고 있어, 중앙 서버가 없어도 작업이 가능합니다.
Git과 GitHub의 차이
처음 배울 때 헷갈리기 쉬운 부분입니다.
Git은 로컬에서 동작하는 버전 관리 도구 자체이고, GitHub은 Git 저장소를 인터넷에 올려두고 협업 기능을 추가한 클라우드 호스팅 서비스입니다.
Git 없이 GitHub을 쓸 수는 없지만, GitHub 없이 Git만 쓰는 것은 가능합니다.
GitHub 계정 만들기
github.com에서 가입합니다.
가입 과정에서 이메일 인증을 요구하는데, 인증을 완료하지 않으면 repository 생성 같은 핵심 기능을 쓸 수 없습니다.
Git 기본 설정
Git을 처음 쓰기 전에 사용자 이름과 이메일을 전역으로 등록해야 합니다.
모든 commit 이력에 "누가 작성했는가"가 함께 기록되기 때문입니다.
git config --global user.name "이름"
git config --global user.email "이메일@example.com"
--global 옵션을 붙이면 이 컴퓨터의 모든 Git 프로젝트에 동일하게 적용됩니다.
특정 프로젝트에서만 다른 계정을 써야 한다면 해당 디렉토리 안에서 --global 없이 같은 명령을 실행하면 프로젝트 단위로 덮어쓸 수 있습니다.
SSH 키 설정
GitHub과 연결할 때 HTTPS와 SSH 두 가지 방식을 쓸 수 있습니다.
HTTPS는 설정이 간단하지만 push, pull 같은 작업을 할 때마다 자격증명(토큰 또는 비밀번호)을 입력해야 합니다.
SSH는 처음 한 번 키를 등록해두면 이후 모든 작업이 자동으로 인증됩니다. 공개키-개인키 쌍을 이용한 암호화 방식이라 보안 측면에서도 더 강합니다.
개발 환경에서 GitHub을 자주 쓴다면 SSH 설정을 해두는 것이 훨씬 편합니다.
SSH 키는 두 가지로 구성됩니다.
- 개인키(private key) — 로컬 컴퓨터에만 보관하며 절대 외부에 공개하면 안 됩니다.
- 공개키(public key) — GitHub 계정에 등록해두는 키입니다.
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
생성 후 공개키 내용을 출력해서 복사합니다.
cat ~/.ssh/id_rsa.pub
GitHub에서 Settings → SSH and GPG keys → New SSH key로 이동해 복사한 공개키를 등록합니다.
Repository 생성
GitHub에서 새 저장소를 만드는 방법입니다.
홈 화면 왼쪽 상단의 New 버튼을 누르고, 이름을 입력한 뒤 Create repository를 클릭하면 됩니다.
생성 후 나오는 clone URL은 반드시 SSH URL을 사용해야 합니다.
- SSH URL: git@github.com:username/repo-name.git ✅
- HTTPS URL: https://github.com/username/repo-name.git ❌
HTTPS URL로 클론하면 push할 때마다 자격증명을 요구해서 앞서 SSH 키를 등록한 의미가 없어집니다.
저장소 페이지에서 Code 버튼을 눌렀을 때 SSH 탭을 선택해서 URL을 복사해야 합니다.
Repository 복제
원격 저장소를 로컬로 가져오는 명령입니다.
git clone git@github.com:username/repo-name.git
클론이 완료되면 해당 디렉토리 안에 .git 숨김 폴더가 생깁니다.
이 폴더가 Git이 이력을 관리하는 내부 데이터베이스입니다.
핵심 작업 흐름 — 수정, 스테이징, 커밋, 푸시
Git의 작업 흐름을 이해하려면 파일이 거치는 세 가지 영역을 알아야 합니다.
- 작업 디렉토리(Working Directory) — 실제로 파일을 편집하는 공간입니다.
- 스테이징 영역(Staging Area) — 다음 커밋에 포함할 변경사항을 준비해두는 중간 단계입니다.
- 로컬 저장소(Local Repository) — 커밋이 영구적으로 기록되는 공간입니다.
스테이징 영역이 존재하는 이유는 커밋에 포함할 내용을 세밀하게 제어하기 위해서입니다.
여러 파일을 수정했더라도 논리적으로 묶이는 변경사항만 골라서 하나의 커밋으로 만들 수 있습니다.
git add . # 변경된 파일 전체를 스테이징 영역에 올리기
git commit -m "커밋 메시지" # 스테이징된 변경사항을 로컬 저장소에 기록
git push origin main # 로컬 커밋을 원격 저장소에 반영
커밋 메시지는 "무엇을 왜 바꿨는지"를 간결하게 담는 것이 좋습니다.
나중에 이력을 볼 때 커밋 메시지만으로 변경 의도를 파악할 수 있어야 하기 때문입니다.
.gitignore 설정
모든 파일을 Git으로 추적할 필요는 없습니다.
가상환경 디렉토리(.venv/), 빌드 결과물(dist/), OS나 에디터가 자동 생성하는 임시 파일들은 저장소에 올리지 않는 것이 원칙입니다.
이런 파일들을 추적에서 제외하는 설정이 .gitignore입니다.
.gitignore 파일에 경로나 패턴을 작성해두면 해당 파일들은 git add 대상에서 자동으로 제외됩니다.
gitignore.io는 언어나 프레임워크에 맞는 .gitignore 내용을 자동으로 생성해주는 서비스라 처음 설정할 때 편리합니다.
셸에 아래 함수를 등록해두면 터미널에서 바로 사용할 수 있습니다.
# ~/.bashrc에 추가
function gi() { curl -sL https://www.toptal.com/developers/gitignore/api/$@; }
source ~/.bashrc
gi python > .gitignore
'BI&Programming-Tools > Python' 카테고리의 다른 글
| 패키지로 코드 구조화하기 (0) | 2026.07.07 |
|---|---|
| 파이썬 모듈: 재사용 가능한 코드의 최소 단위 (0) | 2026.07.06 |
| 의존성 관리: Poetry로 해결하기 (0) | 2026.07.06 |
| 파이썬 버전 관리: pyenv (0) | 2026.07.06 |
| 생물정보학에서의 프로그래밍, 환경 세팅 (0) | 2026.07.06 |
