본문 바로가기
프로그래밍

Git GitLab GitHub에 대해 알아보자

by 채연2 2023. 1. 12.

 

 

목차

Git GitLab GitHub

 개요

 Git

 

 GitHub

 GitLab

 GitHub vs GitLab

 

 

Git GitLab GitHub

 

개요

프로젝트를 작업하게 되면서 수정하거나 기능 추가할 수록 점점 프로젝트가 꼬여 다시 이전 코드로 돌아가고 싶을 때, 또는 협업 프로젝트를 진행하면서 생기는 이슈들이 많다. 이런 것들을 관리하기 위해 만들어진 프로그램이 버전관리 프로그램이라고 하고 아직도 SI 쪽에서 많이 사용되는 SVN과 최근에 오픈소스 트랜드를 만들어 준 Git이 존재한다.

 

이러한 버전 관리 프로그램 중 오픈 소스 Git에 중점을 둔 개발 플랫폼을 많이 사용할 것이다. 그 중에서도 GitLab과 GitHub가 있는데 둘의 차이점과 장단점을 알아보려고 한다. 그 전에 Git이 무엇인지부터 알아보자.

 

 

Git

 

개념

현재까지 가장 널리 사용되는 최신 버전 제어 시스템 Git은 원래 Linux 운영 체제 커널을 만든 사람으로 유명한 Linus Torvalds가 2005년에 개발한 유지 관리에 용이한 오픈 소스 프로젝트이다. 상용 프로젝트와 오픈 소스를 포함한 수많은 소프트웨어 프로젝트가 Git을 사용하고 있다.

 

버전 관리 시스템(VCS, Version Control System) 이란?

버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 버전 관리 시스템을 사용하면 각 파일 또는 프로젝트 전체를 이전 상태로 되돌릴 수 있고, 시간에 따라 수정 내용을 비교할 수 있으며 누가 문제를 언제 일으켰는지 추적할 수도 있다. 또, 파일을 잃어버리거나 잘못 수정한 경우에도 쉽게 목구 가능하다.

 

기존 버전 관리 시스템과의 차이점

기존 버전 관리 시스템과 Git과의 큰 차이점은 버전 데이터를 관리하는 방식이다. 기존 버전 관리 시스템은 주로 파일 중심으로 파일이 변경된 내역을 관리하고 있다. 즉, 데이터를 보는 관점이 어떤 파일이 존재하는지와 각 파일이 시간에 따라 변경된 차이에 있게 된다.

 

각 파일에 대한 변화를 저장하는 시스템들

위 그림에서 Version 1은 File A, File B, File C로 시작을 한다. 그리고 File A와 File C를 수정하여 Version 2가 되고, Version 1과 비교해 변경된 내용이 Δ1로 저장이 된다. 만일 Version 2를 받아오려고 하면 File A와 File C에 변경사항인 Δ1이 적용된 파일을 받는다.

 

하지만 Git은파일을 하나씩 별도로 보며 변경 사항만 따로 관리하지 않고 프로젝트 전체를 스냅샷 형태로 관리한다. 마치 매 순간마다 프로젝트 전체를 사진으로 찍어서 관리하는 것처럼 말이다. 

 

시간 순으로 프로젝트 스냅샷 저장

위 그림을 보면 File A와 File C를 수정해서 Version2로 변경되고, Git은 Version 2의 스냅샷 하나를 생성하고 그 스냅샷을 가리키는 레퍼런스 A1과 C1을 저장하게 된다. 효율적인 관리를 위해 수정되지 않은 File B도 스냅샷을 생성해서 저장하는게 아닌 이미 저장되어 있는 파일에 링크만 걸어준다. 또, Version 2와 Version 1의 델타(변경 사항)도 얻을 수 있다.

 

Git 특징

 

분산 버전 관리 시스템

Git으로 버전 관리 시 서버나 인터넷이 연결이 되어 있지 않아도 문제가 되지 않는다. Git은 데이터가 중앙 서버에만 있는 것이 아니라 분산되어 있는 모든 컴퓨터에 다 존재한다. 즉, origin/master와 local/master가 동일한 히스토리와 정보를 모두 가지고 있다는 점이다.

 

무결성

Git은 데이터를 저장하기 전 항상 체크섬을 구하고 그 체크섬으로 관리한다. 그래서 체크섬을 이해하는 Git 없이는 어떠한 파일이나 디렉토리도 변경 불가하다. 체크섬은 Git에서 사용하는 가장 기본적인 데이터 단위이자 Git의 가본 철학이다.

 

브랜치 생성과 머지의 자유로움

Git은 디자인 단계부터 브랜치를 생성하고 머지하는데 오버헤드가 아주 적도록 만들어 졌다. 브랜치는 단순히 스냅샷을 가르키는 레퍼런스여서 아주 많은 브랜치를 생성하는 것이 가능하고 때로는 권장되기도 한다. 현재 작업하고 있는 것과 분리하고 싶거나 할 때는 자유롭게 브랜치를 생성해도 된다. 작업이 끝나서 다른 브랜치에 머지를 했거나 필요 없어진 브랜치는 지우면 된다.

 

파일 관리의 세 가지 상태

Modified, Staged, Commited 세 가지 상태가 존재한다.

  • Commited : 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미
  • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 의미
  • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미

 

GitHub

개발자가 코드 변경을 호스팅하고 모니터링할 수 있는 최초 클라우드 기반 Git 플랫폼이다. 버전 관리 도구 Git을 기반으로 소스 코드를 호스팅하고, 협업 지원 기능들을 지원하는 마이크로소프트의 웹 서비스이다. 즉, GitHub는 Git으로 관리하는 프로젝트를 저장할 수 있는 사이트로, 원격 저장소를 대신 제공해주는 서비스라고 할 수 있다.

 

코드 호스팅 서비스이며, GitHub를 통해 내 코드 뿐만 아니라 다른 사람들의 코드도 볼 수 있고, Git을 웹에서 보다 편하게 사용 가능하도록 하는 도구이다.

 

GitLab

개발자가 코드를 모니터링, 테스트 및 배포하는 데 도움이 되는 클라우드 기반 Git 및  DevOps 플랫폼이다. 지속적인 통합, 보안, 앱 배포 도구와 같은 광범위한 DevOps 기능을 제공하며 자체 호스팅 Git Repository 관리 시스템으로 사용자 코드를 비공개로 유지하고 코드 변경 사항을 쉽게 배포할 수 있다.

 

또, 소프트웨어 개발 수명 주기를 완료하기 위한 협업 워크플로우를 간소화할 수 있는 다양한 관리 기능도 제공한다.

 

GitHub vs GitLab

전반적으로 GitLab이 GitHub보다 기능적으로나 완성도로나 더 우세한 것을 볼 수 있다. 하지만 GitHub가 GitLab보다 더 많이 알려져 있다. 최근 연구에 따르면 GitHub는 개발자의 78%가 사용하는 반면, GitLab은 14%만 사용한다고 한다.

 

GitHub는 본인 프로젝트를 업로드할 수 있고 온라인 포트폴리오로도 많이 사용되기 때문에 오픈 소스 프로젝트만 진행한다면 GitHub를 사용하는 것이 좋을 수 있다.

GitLab은 사용자 수를 제한하지 않는 무료 개인 및 공용 레포지토리가 있고, 여러 레포지토리를 호스팅하고 많은 사람들과 함께 작업하기 원한다면 GitLab을 사용하는 것이 좋을 수 있다.

 

이처럼 GitHub와 GitLab 둘 중에 어떤게 제일 좋은 플랫폼인지는 프로젝트, 개발자, 릴리즈 계획 등 상황에 따라 달라질 수 있다. 본인이 사용하려는 목적과 여러 상황들을 고려해 효율적이고 생산성을 높일 수 있는 플랫폼을 선택해야 한다.

 

 

 

320x100

댓글