테스트 자동화 코드를 작성하기 시작하면 다음으로 필요한 것이 Git과 GitHub에 대한 지식입니다. 버전 관리·팀 공유·CI/CD 연동 모두 Git을 중심으로 돌아갑니다. 명령어를 한 줄씩 확인하면서, 처음 배워야 할 조작을 정리합니다.
우선 GitHub Desktop(무료 GUI 툴)부터 시작해도 괜찮습니다. 시각적으로 확인하면서 Git의 개념을 익힐 수 있습니다. 다만, CI/CD 트러블슈팅 등에서는 결국 커맨드가 필요하므로 병행해서 익혀 둡시다.
📌 이 글의 대상 독자
| ✅ Git을 사용한 적이 없거나 어렴풋이만 아는 분 |
| ✅ 테스트 자동화 코드를 팀에서 공유하고 싶은 분 |
| ✅ CI/CD(GitHub Actions)를 써보고 싶지만 먼저 Git을 이해하고 싶은 분 |
| ✅ “add·commit·push의 차이를 모르겠다”는 분 |
📖 이 글을 읽으면 할 수 있는 것
| ✔ Git을 설치하고 초기 설정하기 |
| ✔ add·commit·push 흐름으로 코드를 GitHub에 저장하기 |
| ✔ .gitignore로 venv 등 불필요한 파일 제외하기 |
| ✔ 브랜치를 사용해 안전하게 변경 가하기 |
| ✔ GitHub Actions(CI/CD)로의 첫 걸음 내딛기 |
필자는 여러 프로젝트에서 Python × Selenium·Playwright·pytest를 사용한 테스트 자동화 코드를 Git으로 관리하고, GitHub Actions와 연동해 왔습니다.
이 글에서는 “명령어는 외웠는데 무엇을 하는지 모르겠다”는 초보자가 막히기 쉬운 포인트를 미리 짚어서 설명합니다.
✅ 이 글의 목표
- 테스트 자동화 코드를 GitHub에 push할 수 있는 상태
- .gitignore로 venv·__pycache__를 제외할 수 있는 상태
- 브랜치를 만들어 변경을 가하고 머지할 수 있는 상태
Git과 GitHub는 무엇이 다른가
먼저 헷갈리기 쉬운 점을 정리합니다.
| Git | GitHub | |
|---|---|---|
| 무엇인가 | 버전 관리 툴 (소프트웨어) | Git 저장소 호스팅 서비스 |
| 위치 | 자신의 PC (로컬) | 인터넷상 (클라우드) |
| 역할 | 변경 이력을 기록·관리한다 | 코드를 팀에서 공유·CI/CD를 실행한다 |
| 비유 | “문서의 변경 이력을 기록하는 구조” | “그 문서를 저장·공유하는 클라우드 폴더” |
Git 없이는 GitHub를 사용할 수 없습니다.
먼저 Git을 설치해 로컬에서 이력 관리를 익힌 다음 GitHub에 연결하는 순서로 진행합니다.
① Git 설치
Windows의 경우
브라우저에서 git-scm.com/download/win에 접속해 인스톨러를 다운로드·실행합니다.
설정은 기본적으로 디폴트로 두어도 문제없습니다. “Choosing the default editor used by Git”에서 “Use Visual Studio Code”를 선택하면 나중에 편리합니다.
Mac의 경우
Mac에는 Git이 처음부터 설치되어 있는 경우가 많습니다. 터미널에서 확인합니다.
git --version
버전이 표시되면 OK입니다. 설치되어 있지 않은 경우는 Homebrew로 설치합니다.
brew install git
② Git 초기 설정
Git을 설치했으면 먼저 이름과 이메일 주소를 설정합니다. 이것은 커밋(변경 기록)에 “누가 변경했는가”를 연결하기 위한 설정으로, 한 번만 하면 됩니다.
# 이름 설정 (GitHub 사용자명과 맞추면 알기 쉬움)
git config --global user.name "Your Name"
# 이메일 주소 설정 (GitHub에 등록한 주소)
git config --global user.email "your@email.com"
# 설정 확인
git config --list
③ 기본 워크플로우: add → commit → push
Git의 일상적인 조작은 이 3단계로 이루어집니다.
| 명령어 | 의미 | 비유 |
|---|---|---|
git add | 변경을 스테이징(기록 준비)한다 | “봉투에 넣는다” |
git commit | 변경을 로컬에 기록한다 | “봉투를 봉해서 보관한다” |
git push | GitHub에 업로드한다 | “우체통에 넣는다” |
실제 절차
1. 저장소(repository) 만들기 (최초 1회)
# 프로젝트 폴더로 이동
cd my-test-project
# Git 저장소 초기화
git init
git init을 실행하면 폴더 안에 .git이라는 숨김 폴더가 생성됩니다. 이것이 Git의 이력 데이터베이스입니다.
2. 현재 상태 확인
git status
git status는 “지금 무엇이 바뀌었는지”를 확인하는 명령어입니다. 헷갈릴 때는 일단 git status. 작업 중에 몇 번이든 실행할 수 있습니다.
3. 파일 스테이징(add)
# 파일을 개별 추가 (처음에는 하나씩 확인하면서 하는 것이 안심)
git add test_sample.py
# 모든 파일을 한 번에 추가 (익숙해지면)
git add .
git add .은 편리하지만 의도하지 않은 파일까지 추가하기 쉽습니다. 처음에는 git add test_login.py처럼 개별로 추가하고, git status로 확인한 후에 커밋하는 습관을 들이면 실수를 방지할 수 있습니다.4. 변경 기록(commit)
# -m으로 커밋 메시지 작성
git commit -m "add: login test"
커밋 이력을 보는 것은 “미래의 자신”이나 “팀원”입니다.
"fix"나 "update"만으로는 무엇을 했는지 알 수 없습니다.| 종류 | 메시지 예시 |
|---|---|
add | add: login validation test for empty credentials |
fix | fix: flaky signup test due to implicit wait |
refactor | refactor: extract common auth fixture to conftest.py |
add | add: API test for 404 response on /users endpoint |
5. GitHub에 push (최초)
GitHub에서 저장소를 만든 후(github.com에 로그인 → “New repository”에서 생성), 다음 명령어로 연결합니다.
commit이 하나도 없는 상태에서
git push를 실행하면 error: src refspec main does not match any 에러가 발생합니다. 절차 3~4(add → commit)를 먼저 실행하세요.# GitHub 저장소를 origin으로 등록 (URL은 자신의 저장소에 맞게)
git remote add origin https://github.com/yourusername/my-test-project.git
# 현재 브랜치명 확인
git branch
# → "main"이 표시되면 OK
# → "master"가 표시된 경우 아래 명령어로 main으로 변경
git branch -M main
# main 브랜치를 GitHub에 push
git push -u origin main
2021년 이후, GitHub에 push할 때 비밀번호는 사용할 수 없습니다. 다음 중 하나의 방법으로 인증합니다.
- 브라우저 인증: 최초 push 시 브라우저가 열려 GitHub 로그인을 요청 (가장 간단)
- Personal Access Token(PAT): GitHub 설정 화면에서 토큰을 발급하고 비밀번호 칸에 입력
- GitHub CLI: GitHub 공식 커맨드라인 툴(
gh)입니다.gh auth login을 실행하면 브라우저가 열려 인증을 일괄 설정할 수 있습니다 - SSH 키: 키 페어를 생성해 GitHub에 등록 (설정 후 가장 쾌적)
초보자에게는 브라우저 인증이나 GitHub CLI가 가장 원활합니다.
2회째 이후는 git push만으로 OK입니다.
④ .gitignore로 불필요한 파일 제외하기
.gitignore는 “Git으로 관리하지 않을 파일·폴더”를 지정하는 파일입니다.
테스트 자동화 프로젝트에서 반드시 제외해야 하는 것이 있습니다.
| 제외해야 할 것 | 이유 |
|---|---|
venv/ | 환경마다 재생성하는 것. 용량이 커짐 |
__pycache__/ | Python이 자동 생성하는 캐시. 불필요 |
.pytest_cache/ | pytest가 생성하는 캐시. 불필요 |
.env | API 키나 비밀번호가 포함될 가능성이 있음. 절대 commit 금지 |
*.log | 로그 파일. 환경마다 다르고 불필요 |
프로젝트 루트에 .gitignore 파일을 만들어 다음을 붙여넣습니다.
# .gitignore (테스트 자동화 프로젝트용)
# ⚠️ 환경 변수·기밀 정보 (최우선 제외)
.env
.env.*
*.secret
# 가상 환경
venv/
.venv/
# Python 캐시
__pycache__/
*.py[cod]
*.pyo
# pytest
.pytest_cache/
.coverage
htmlcov/
# 로그
*.log
# OS 생성 파일
.DS_Store # Mac
Thumbs.db # Windows
# Allure 리포트
allure-results/
allure-report/
# IDE 설정 (팀에서 공유 불필요)
.vscode/
.idea/
한 번 commit한 파일은 나중에 .gitignore를 추가해도 Git의 추적이 해제되지 않습니다.
프로젝트 시작 시에 .gitignore를 만들어
git add하는 것을 첫 번째 절차로 삼읍시다.⑤ 브랜치를 사용해 안전하게 변경 가하기
브랜치란 메인 코드를 건드리지 않고 변경을 시도할 수 있는 “작업용 복사본”입니다.
테스트 자동화 코드를 추가·변경할 때는 반드시 브랜치를 만들어 작업합니다.
# 현재 브랜치 확인
git branch
# 새 브랜치를 만들고 이동 (Git 2.23 이상 권장 방법)
git switch -c feature/add-login-test
# 구버전 Git에서는: git checkout -b feature/add-login-test
# 작업·add·commit (일반 조작)
git add .
git commit -m "add: login validation test for valid credentials"
# GitHub에 브랜치 push
git push -u origin feature/add-login-test
# 작업 완료 후 main으로 돌아가 머지 (로컬 머지의 경우)
git checkout main
git merge feature/add-login-test
브랜치명에는 feature/(새 기능)나 fix/(버그 수정) 접두사를 붙이면 무엇을 위한 변경인지 알기 쉬워집니다.
팀 개발에서는 브랜치를 GitHub에 push한 후, GitHub 상에서 Pull Request를 생성해 리뷰를 받은 다음에 머지하는 것이 일반적입니다.
| ① main에서 feature 브랜치 만들기 |
| ↓ |
| ② add → commit → push (GitHub에) |
| ↓ |
| ③ GitHub에서 Pull Request 생성 |
| ↓ |
| ④ 팀 리뷰·GitHub Actions가 자동 테스트 실행 |
| ↓ |
| ⑤ 승인 후 main에 머지 |
⑥ 자주 쓰는 명령어 빠른 참조
| 명령어 | 의미 |
|---|---|
git status | 변경 상태 확인 (헷갈릴 때는 이것) |
git log --oneline | 커밋 이력을 한 줄로 확인 |
git diff | 무엇이 바뀌었는지 확인 |
git pull | GitHub의 최신 변경을 로컬에 가져오기 |
git clone <URL> | GitHub 저장소를 로컬에 복사하기 |
git stash | 변경을 일시적으로 대피시키기 |
git reset --soft HEAD~1 | 직전 커밋 취소 (변경 내용은 남음) |
⑦ 다음 단계: GitHub Actions로 CI/CD 실행하기
Git과 GitHub의 기본을 익혔다면, 다음은 GitHub Actions를 사용해 pytest를 자동 실행할 수 있습니다.
코드를 push할 때마다 테스트가 자동으로 돌아가는 환경은 테스트 자동화의 묘미 중 하나입니다.
# GitHub Actions 설정 파일을 두는 위치
.github/
└── workflows/
└── test.yml ← 이 YAML 파일로 CI를 정의
push할 때마다 테스트가 자동으로 돌아가는 CI 환경을 만드는 것이 테스트 자동화의 본래 모습입니다.
Git의 기본이 갖춰졌다면 꼭 다음 글로 넘어가 보세요.
실무에서 자주 막히는 포인트
⚠️ Git·GitHub에서 막히기 쉬운 포인트
- user.name·user.email을 설정하지 않음
설정 없이 커밋하려 하면 에러가 발생합니다.git config --global user.name과git config --global user.email을 처음에 반드시 설정하세요. - 커밋하지 않고 push하려다
src refspec main does not match any가 발생
git push는 커밋이 하나도 없는 상태에서는 실행할 수 없습니다.git add → git commit을 먼저 실행하세요. - GitHub에 push할 때 인증 에러가 발생
GitHub에서는 비밀번호 인증이 폐지됐습니다. 브라우저 인증·GitHub CLI(gh auth login)·Personal Access Token·SSH 키 중 하나로 인증하세요. - venv를 커밋해 버렸다
한 번 커밋한 파일은 .gitignore를 추가해도 추적이 계속됩니다.git rm -r --cached venv/로 추적을 해제한 후 다시 커밋해야 합니다. - .env 파일을 커밋해 버렸다
API 키나 비밀번호를 포함한 .env를 GitHub에 push하면 공개 저장소에서는 전 세계에 유출됩니다. 만약 push했다면 즉시 키를 무효화하고 재발급합시다. git add .으로 의도하지 않은 파일까지 추가
커밋 전에git status로 추가된 파일을 확인하는 습관을 들입시다.- main 브랜치에서 직접 작업
main에 직접 커밋·push하면 CI가 망가지거나 팀에 영향이 미칩니다. 작업 전에 반드시 브랜치를 만드는 습관을 들입시다. - push 전에 pull을 잊어 충돌이 발생
팀 개발에서는 push하기 전에 GitHub 측에 새로운 변경이 없는지 확인한 후 push하는 습관이 중요합니다. - 커밋 메시지가 모호해서 나중에 추적할 수 없다
"fix"나"update"만으로는 몇 주 후에 무엇을 고쳤는지 알 수 없습니다."fix: flaky login test due to implicit wait"처럼 구체적으로 쓰세요.
자주 묻는 질문 (FAQ)
GitHub는 비밀번호 인증을 폐지했습니다. 다음 방법으로 해결할 수 있습니다.
- 가장 간단:
gh auth login(GitHub CLI)을 실행해 브라우저에서 인증 - 토큰 인증: GitHub의 Settings → Developer settings → Personal access tokens에서 토큰 발급 후 비밀번호 칸에 입력
- SSH 인증:
ssh-keygen으로 키 페어를 생성하고 GitHub에 공개 키 등록. 설정 후 가장 쾌적
둘 다 저장소의 “주간 브랜치”를 가리키지만 이름이 다릅니다. master는 이전 Git의 기본 이름이었습니다. GitHub는 2020년 이후 기본을 main으로 변경했기 때문에 신규 저장소에서는 main이 표준입니다. 기존 저장소에서는 master인 경우도 있으며, 어느 쪽이든 정상 작동합니다. 팀이나 프로젝트 규칙에 맞게 사용하세요.
둘 다 Git 저장소 호스팅 서비스로 CI/CD 기능도 갖추고 있습니다. GitHub는 세계 최대 플랫폼으로 오픈소스 프로젝트가 많고 GitHub Actions가 CI/CD로 널리 쓰입니다. GitLab은 셀프 호스팅(자사 서버에 설치)이 가능한 것이 특징으로, 기업 사내 환경에서 이용되는 경우가 많습니다. 테스트 자동화 학습에는 GitHub가 정보량·커뮤니티 면에서 충실합니다.
처음에는 HTTPS(브라우저 인증 또는 GitHub CLI)가 설정이 간단합니다. SSH는 키 페어 생성·등록이 필요하지만 한 번 설정하면 비밀번호·토큰 없이 쾌적하게 사용할 수 있습니다. 매일 push하는 환경이 되면 SSH로 전환을 검토하세요.
기능적으로는 거의 같습니다. GitHub에서는 “Pull Request(PR)”, GitLab에서는 “Merge Request(MR)”이라고 부릅니다. 둘 다 “이 브랜치의 변경을 메인 브랜치에 반영해 주세요”라는 요청을 보내고 리뷰를 받은 다음 머지하는 구조입니다.
네, 개인 이용에는 무료 플랜으로 충분합니다. 비공개(프라이빗) 저장소도 무제한으로 만들 수 있습니다. GitHub Actions도 무료 한도 내에서 이용 가능하지만, 무료 이용 한도는 플랜이나 OS에 따라 다르고 변경될 수 있습니다. 최신 정보는 GitHub 공식 사이트에서 확인하세요.
git add .와 git add -A의 차이는? git add .은 현재 디렉터리 이하의 변경을 추가합니다. git add -A는 저장소 전체(삭제된 파일 포함)의 변경을 추가합니다. 프로젝트 루트에서 실행하는 경우는 실질적으로 같습니다. 어느 쪽을 사용해도 문제없지만, 커밋 전에 git status로 확인하는 습관이 중요합니다.
메시지만 고치고 싶다면 git commit --amend -m "새 메시지"가 가장 안전합니다.
커밋 자체를 취소하고 싶다면 git reset --soft HEAD~1로 직전 커밋을 취소할 수 있습니다(변경 내용은 남음).
둘 다 아직 push하지 않은 커밋에만 유효합니다. 이미 push한 커밋 수정은 팀 개발에서는 신중하게 해야 합니다.
사용해도 문제없습니다. GitHub Desktop이나 VS Code의 Git 통합 기능은 시각적으로 조작할 수 있어 초보자에게 알기 쉽습니다. 다만, CI/CD 트러블슈팅이나 커맨드라인밖에 사용할 수 없는 환경(서버 등)에서는 결국 커맨드가 필요합니다. 기본 커맨드를 한 번 익혀 두는 것을 권장합니다.
정리
| 조작 | 명령어 | 포인트 |
|---|---|---|
| 초기 설정 | git config --global | 이름과 이메일 주소 설정 (한 번만) |
| 상태 확인 | git status | 헷갈릴 때는 이것. 몇 번이든 실행 OK |
| 스테이징 | git add | 커밋 전에 status로 확인하는 습관을 |
| 기록 | git commit -m | 메시지는 구체적으로 작성 |
| 업로드 | git push | 팀 개발에서는 GitHub 측에 새 변경이 없는지 확인하고 push |
| .gitignore | — | venv·.env는 처음부터 제외 |
| 브랜치 | git switch -c | 작업 전에 반드시 브랜치 만들기 |
Git 조작을 익히면 테스트 자동화 코드 관리가 훨씬 수월해집니다. 다음 단계로 GitHub Actions로 push할 때마다 pytest를 자동 실행하는 환경을 만들어 보세요. 그것이 테스트 자동화의 본래 모습입니다.
처음에는 명령어가 많아서 힘들게 느껴질 수 있지만, status → add → commit → push의 흐름을 매일 반복하다 보면 자연스럽게 몸에 익습니다.
