[기초] GitHub

엘리자베스22호·2026년 2월 22일

1.1 형상 관리란 무엇인가

형상 관리(Configuration Management) 또는 버전 관리(Version Control)는 소프트웨어 개발 과정에서 소스 코드와 관련 파일들의 변경 사항을 체계적으로 추적하고 관리하는 시스템입니다.

형상 관리 시스템은 다음과 같은 핵심 기능을 제공합니다:

  • 변경 이력 추적: 누가, 언제, 무엇을, 왜 변경했는지 기록
  • 버전 관리: 코드의 특정 시점 상태를 저장하고 복원
  • 협업 지원: 여러 개발자가 동시에 작업 가능
  • 충돌 해결: 동일 파일의 동시 수정 시 병합 지원

형상 관리의 필요성

개발 과정의 안정성 확보

  • 실수로 코드를 삭제하거나 잘못 수정해도 이전 버전으로 복구 가능
  • 새로운 기능 개발 중 문제 발생 시 안정적인 버전으로 롤백

효율적인 협업 환경 구축

  • 여러 개발자가 동시에 다른 기능을 개발 가능
  • 각자의 작업을 독립적으로 진행하고 나중에 통합
  • 코드 리뷰와 품질 관리 프로세스 지원

형상 관리 시스템의 유형

중앙 집중식 버전 관리 (CVCS)

  • 중앙 서버에 모든 버전 정보 저장
  • 예: SVN (Subversion), CVS
  • 단점: 서버 장애 시 작업 불가, 네트워크 필요

분산 버전 관리 (DVCS)

  • 각 개발자가 전체 저장소의 복사본 보유
  • 예: Git, Mercurial
  • 장점: 오프라인 작업 가능, 빠른 속도, 유연한 워크플로우

1.2 GitHub란 무엇이고 왜 사용하는가

GitHub는 Git을 기반으로 하는 클라우드 기반 소스 코드 호스팅 및 협업 플랫폼입니다. Microsoft가 소유한 이 웹 서비스는 전 세계 7,300만 명 이상의 개발자가 사용하는 세계 최대의 소프트웨어 개발 플랫폼입니다.

Git과 GitHub의 관계

Git (도구)

  • 로컬 컴퓨터에서 실행되는 버전 관리 시스템
  • 무료 오픈소스 소프트웨어
  • 명령줄(CLI) 또는 GUI 도구로 사용
  • 소스 코드 변경 사항을 추적하고 관리

GitHub (서비스)

  • Git 저장소를 클라우드에 호스팅하는 웹 서비스
  • Git의 기능에 협업 도구 추가 제공
  • 웹 인터페이스를 통한 편리한 관리
  • 소셜 코딩 기능 (팔로우, 스타, 포크 등)

GitHub를 사용하는 이유

1. 코드 백업 및 접근성

  • 클라우드에 코드 저장으로 데이터 손실 방지
  • 어디서나 인터넷만 있으면 프로젝트 접근 가능
  • 집 데스크톱에서 작업하다 노트북으로 이어서 작업 가능

2. 협업 기능

  • Pull Request를 통한 코드 리뷰
  • Issue 트래킹으로 버그 및 기능 요청 관리
  • 프로젝트 관리 도구 (Projects, Milestones)
  • 팀원 간 코드 공유 및 토론

3. 오픈소스 생태계

  • 전 세계 개발자들과 협업
  • 오픈소스 프로젝트 기여 및 학습
  • 포트폴리오 구축 및 경력 관리

GitHub의 주요 활용 사례

개인 프로젝트 관리

  • 개인 학습 및 실험 프로젝트 저장
  • 포트폴리오 웹사이트 호스팅 (GitHub Pages)
  • 개발 이력 및 성장 과정 기록

팀 협업

  • 기업 프로젝트의 소스 코드 관리
  • 코드 리뷰 프로세스 구축
  • CI/CD 파이프라인 통합 (GitHub Actions)

오픈소스 기여

  • 공개 프로젝트 참여 및 기여
  • 커뮤니티와 지식 공유
  • 기술 문서 및 튜토리얼 작성

1.3 GitHub의 주요 개념

GitHub를 효과적으로 사용하기 위해서는 핵심 개념들을 이해해야 합니다. 이러한 개념들은 Git의 기본 원리와 GitHub의 협업 기능을 포함합니다.

Repository (저장소)

정의: 프로젝트의 모든 파일과 각 파일의 수정 이력을 저장하는 공간

로컬 저장소 (Local Repository)

  • 개발자의 컴퓨터에 있는 저장소
  • 오프라인에서도 작업 가능
  • git init 명령으로 생성

원격 저장소 (Remote Repository)

  • GitHub 서버에 있는 저장소
  • 팀원들과 공유하는 중앙 저장소
  • 웹 인터페이스 또는 git clone으로 접근

Commit (커밋)

정의: 파일의 변경 사항을 저장소에 기록하는 행위

커밋의 구성 요소

  • 변경된 파일들의 스냅샷
  • 커밋 메시지 (변경 내용 설명)
  • 작성자 정보 (이름, 이메일)
  • 타임스탬프
  • 고유 식별자 (SHA-1 해시)

좋은 커밋 메시지 작성법

  • 첫 줄: 50자 이내의 간결한 요약
  • 본문: 변경 이유와 내용 상세 설명
  • 명령형 현재 시제 사용 ("Add feature" not "Added feature")

Branch (브랜치)

정의: 독립적인 작업 공간을 만들어 메인 코드에 영향 없이 개발할 수 있는 기능

주요 브랜치 유형

  • main/master: 배포 가능한 안정적인 코드
  • develop: 개발 중인 최신 코드
  • feature: 새로운 기능 개발용
  • hotfix: 긴급 버그 수정용

브랜치 전략의 장점

  • 여러 기능을 동시에 개발 가능
  • 실험적인 코드 작성 시 안전성 확보
  • 코드 리뷰 및 테스트 후 병합 가능

Merge (병합)

정의: 서로 다른 브랜치의 변경 사항을 하나로 합치는 작업

병합 방식

  • Fast-forward merge: 단순히 포인터만 이동
  • 3-way merge: 공통 조상을 기준으로 병합
  • Squash merge: 여러 커밋을 하나로 압축

충돌 (Conflict) 해결

  • 같은 파일의 같은 부분을 다르게 수정했을 때 발생
  • 수동으로 충돌 부분을 확인하고 수정
  • 충돌 해결 후 커밋하여 병합 완료

Pull Request (PR)

정의: 자신의 변경 사항을 다른 브랜치에 병합해달라고 요청하는 GitHub의 협업 기능

Pull Request 프로세스
1. 기능 브랜치에서 작업 완료
2. GitHub에 푸시
3. Pull Request 생성
4. 팀원들의 코드 리뷰
5. 피드백 반영 및 수정
6. 승인 후 메인 브랜치에 병합

코드 리뷰의 이점

  • 코드 품질 향상
  • 지식 공유 및 학습
  • 버그 조기 발견
  • 팀 코딩 스타일 통일

Fork와 Clone

Fork (포크)

  • 다른 사람의 저장소를 자신의 GitHub 계정으로 복사
  • 원본 저장소와 독립적으로 작업 가능
  • 오픈소스 프로젝트 기여 시 주로 사용

Clone (클론)

  • 원격 저장소를 로컬 컴퓨터로 복사
  • git clone <repository-url> 명령 사용
  • 로컬에서 작업 후 원격 저장소에 푸시

차이점

  • Fork: GitHub 서버 간 복사 (웹에서 수행)
  • Clone: GitHub → 로컬 컴퓨터 복사 (명령줄에서 수행)

Issue (이슈)

정의: 버그 리포트, 기능 요청, 질문 등을 추적하고 관리하는 도구

Issue 활용

  • 버그 발견 시 상세 내용 기록
  • 새로운 기능 제안 및 토론
  • 작업 할당 및 진행 상황 추적
  • 라벨, 마일스톤으로 분류 및 관리

Issue와 Pull Request 연결

  • 커밋 메시지에 #이슈번호 포함
  • PR 설명에 Closes #이슈번호 작성
  • PR 병합 시 자동으로 이슈 종료

1.4 GitHub 명령어 종류

Git과 GitHub를 사용하기 위한 필수 명령어들을 카테고리별로 정리합니다. 명령줄 인터페이스(CLI)를 통해 효율적으로 버전 관리를 수행할 수 있습니다.

저장소 초기화 및 복제

새 저장소 생성

git init
  • 현재 디렉토리를 Git 저장소로 초기화
  • .git 폴더 생성 (버전 관리 정보 저장)

원격 저장소 복제

git clone <repository-url>
  • GitHub의 저장소를 로컬로 복사
  • 자동으로 원격 저장소 연결 설정

예시

git clone https://github.com/username/repository.git

변경 사항 추적 및 커밋

파일 상태 확인

git status
  • 수정된 파일, 스테이징된 파일 확인
  • 현재 브랜치 정보 표시

변경 사항 스테이징

git add <파일명>          # 특정 파일 추가
git add .                 # 모든 변경 파일 추가
git add *.js              # 특정 패턴 파일 추가

커밋 생성

git commit -m "커밋 메시지"
git commit -am "메시지"    # add + commit 동시 수행

커밋 이력 확인

git log                   # 전체 커밋 이력
git log --oneline         # 간략한 형식
git log --graph           # 그래프 형식

브랜치 관리

브랜치 생성 및 전환

git branch <브랜치명>           # 브랜치 생성
git checkout <브랜치명>         # 브랜치 전환
git checkout -b <브랜치명>      # 생성 + 전환
git switch <브랜치명>           # 브랜치 전환 (최신 방식)

브랜치 목록 확인

git branch                # 로컬 브랜치 목록
git branch -r             # 원격 브랜치 목록
git branch -a             # 모든 브랜치 목록

브랜치 삭제

git branch -d <브랜치명>        # 병합된 브랜치 삭제
git branch -D <브랜치명>        # 강제 삭제

병합 및 리베이스

브랜치 병합

git merge <브랜치명>
  • 현재 브랜치에 다른 브랜치의 변경사항 병합
  • 병합 커밋 생성

리베이스

git rebase <브랜치명>
  • 커밋 이력을 선형으로 재정렬
  • 깔끔한 히스토리 유지
  • 주의: 공개된 브랜치에서는 사용 지양

충돌 해결

git status                # 충돌 파일 확인
# 파일 수정 후
git add <파일명>
git commit                # 병합 완료

원격 저장소 작업

원격 저장소 연결

git remote add origin <repository-url>
git remote -v             # 원격 저장소 목록 확인

변경사항 업로드

git push origin <브랜치명>
git push -u origin main   # 기본 브랜치 설정
git push --all            # 모든 브랜치 푸시

변경사항 다운로드

git fetch                 # 원격 변경사항 가져오기 (병합 X)
git pull                  # 가져오기 + 병합
git pull origin main      # 특정 브랜치에서 가져오기

원격 브랜치 추적

git checkout -b <로컬브랜치> origin/<원격브랜치>

변경 사항 되돌리기

작업 디렉토리 변경 취소

git checkout -- <파일명>   # 파일 변경 취소
git restore <파일명>       # 파일 복원 (최신 방식)

스테이징 취소

git reset HEAD <파일명>
git restore --staged <파일명>  # 최신 방식

커밋 되돌리기

git reset --soft HEAD~1   # 커밋만 취소, 변경사항 유지
git reset --mixed HEAD~1  # 커밋 + 스테이징 취소
git reset --hard HEAD~1   # 모든 변경사항 삭제

커밋 수정

git commit --amend        # 마지막 커밋 수정
git commit --amend -m "새 메시지"  # 메시지만 수정

특정 커밋 되돌리기

git revert <커밋해시>      # 새로운 커밋으로 되돌림

임시 저장 (Stash)

변경사항 임시 저장

git stash                 # 현재 변경사항 임시 저장
git stash save "메시지"    # 메시지와 함께 저장

임시 저장 목록 확인

git stash list

임시 저장 복원

git stash pop             # 가장 최근 stash 적용 + 삭제
git stash apply           # 적용만 하고 삭제 안함
git stash apply stash@{n} # 특정 stash 적용

임시 저장 삭제

git stash drop stash@{n}  # 특정 stash 삭제
git stash clear           # 모든 stash 삭제

태그 관리

태그 생성

git tag v1.0.0            # 경량 태그
git tag -a v1.0.0 -m "버전 1.0.0 릴리스"  # 주석 태그

태그 목록 확인

git tag                   # 모든 태그 목록
git tag -l "v1.*"         # 패턴 매칭

태그 푸시

git push origin v1.0.0    # 특정 태그 푸시
git push origin --tags    # 모든 태그 푸시

태그 삭제

git tag -d v1.0.0         # 로컬 태그 삭제
git push origin :refs/tags/v1.0.0  # 원격 태그 삭제

설정 및 도움말

사용자 정보 설정

git config --global user.name "이름"
git config --global user.email "이메일"

설정 확인

git config --list         # 모든 설정 확인
git config user.name      # 특정 설정 확인

별칭(Alias) 설정

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status

도움말

git help <명령어>
git <명령어> --help
profile
2026년 화이팅!!!

0개의 댓글