git

Git/Github

프로젝트를 진행하다 보면 팀원 간에 파일을 주고받을 일이 정말 많습니다. 보통은 작업이 끝난 파일을 압축(zip) 해서 카카오톡이나 Slack으로 공유를 진행합니다. 이런 방식으로 파일을 관리하다 보면 금세 이런 이름의 파일들이 생기게 됩니다.

  • project_final.zip
  • project_final_final.zip
  • project_final_final_really_final.zip

이처럼 파일 이름에 숫자최종, 진짜최종을 붙이며 버전을 구분하는 일은 번거롭고, 누가 어떤 부분을 수정했는지도 쉽게 파악하기 어렵습니다. 이때 이런 불편함을 해결해주는 강력한 도구가 바로 GitGitHub입니다.

Git과 GitHub은 매번 파일 단위로 수정본을 관리하지 않아도, 버전(version) 을 기준으로 변경 사항을 추적할 수 있게 해줍니다. 즉, 파일을 통째로 주고받지 않아도 “누가 언제 무엇을 바꿨는지”를 쉽게 확인하고 필요하면 예전 버전으로 되돌릴 수도 있습니다.


Git이란 무엇일까?

Git은 파일과 코드의 변경 이력(history) 을 저장하고 관리하는 도구입니다. 여러 사람이 동시에 같은 프로젝트를 작업하더라도 서로의 수정 내역을 안전하게 추적하고 병합할 수 있게 도와줍니다. 이런 이유로 Git은 버전 관리 시스템(Version Control System, VCS) 이라고 불립니다. Git을 사용하면 다음과 같은 일들이 가능해집니다.

  • 이전 버전으로 되돌리기 (Rollback)
  • 수정 내역 비교 (Diff 확인)
  • 여러 개발자가 동시에 협업

결국 Git은 개발 과정 전체를 기록하는 타임머신 같은 도구입니다.


GitHub이란 무엇일까?

GitHub는 Git으로 관리한 프로젝트를 인터넷에 저장하고 공유할 수 있는 플랫폼입니다. 쉽게 말하면, Git이 ‘버전 관리 도구’라면 GitHub은 그 Git 저장소를 온라인에서 보관하고 협업하는 공간입니다. GitHub을 사용하면 다음과 같은 장점이 있습니다.

  • 인터넷이 되는 곳 어디서든 프로젝트 접근 가능
  • 다른 사람과의 코드 협업 (Pull Request, Issue 관리 등)
  • 자신의 프로젝트를 공개해 포트폴리오로 활용 가능

결국 GitHub은 개발자에게 코드의 SNS 같은 공간이라 할 수 있습니다.


로컬(Local) 버전 관리

사실 Git은 로컬 환경(내 컴퓨터) 에서만으로도 충분히 버전 관리를 할 수 있습니다. 내 노트북 안에서도 파일을 Version 1, Version 2, Version 3 형태로 관리할 수 있습니다. 그러나 아래의 문제점이 있습니다.

  • 한 대의 컴퓨터에서만 접근 가능
  • 다른 팀원은 수정 내역을 볼 수 없음
  • 노트북이 고장나면 모든 데이터가 사라질 위험

이런 이유로 분산형 버전 관리 시스템(Distributed VCS) 이 등장했습니다.


분산형 버전 관리 시스템

Git은 “중앙 서버에서 파일을 빌려오는 방식”이 아니라, 프로젝트의 모든 이력(history)을 통째로 복제(Clone) 하여 각 사용자의 컴퓨터에 저장합니다. 즉, GitHub에 올라간 프로젝트를 내 컴퓨터로 가져오면 그 순간 프로젝트의 전체 히스토리 백업본을 가지게 되는 셈이죠. 이런 구조 덕분에 Git은 매우 안정적입니다.

  • 컴퓨터가 고장나도 다른 복제본으로 복원 가능
  • 인터넷 연결이 없어도 로컬에서 작업 가능
  • 모든 사용자가 전체 이력을 보유하므로 데이터 손실 위험 최소화

이것이 바로 분산형 버전 관리 시스템(DVCS) 의 핵심입니다.


정리

Git은 소스 코드의 변경 이력을 체계적으로 관리하는 분산형 버전 관리 시스템(DVCS)이며, GitHub은 이러한 Git 저장소를 클라우드 환경에서 호스팅하고 협업을 지원하는 플랫폼입니다. 두 도구를 함께 활용하면 코드의 변경 내역을 정밀하게 추적하고, 다수의 개발자가 동시에 작업하더라도 충돌 없이 안정적으로 프로젝트를 관리할 수 있습니다.

결국 Git은 개발 히스토리를 기록하고 복원하는 기술적 기반, GitHub은 이를 인터넷 상에서 공유·협업할 수 있도록 확장한 생태계라 할 수 있습니다. 이러한 환경을 통해 개발자는 코드의 신뢰성과 생산성을 높이고, 보다 효율적인 협업 문화를 구축할 수 있습니다.


reference