본문 바로가기

Github

Git과 Github란 무엇인가? What are git and Github? feat.버전관리시스템(VCS)


요약

 

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

버전관리시스템은  변경점 관리, 버전관리, 백업 및 복구, 협업을 지원하는 시스템입니다. 대표적으로 Git, Bitkeeper, CVS, Subversion, Mrcurial 등이 있습니다.

 

버전관리시스템(Version Control System)의 기능

1. 변경점 관리: 누가 언제 변경했는지에 대한 변경기록 관리

2. 버전 관리: 특정 시점에 tag를 통해 버전을 표시하고 여러 버전을 합치거나 분리시킬 수 있게 관리

3. 백업&복구: 문제가 생겼을 때 특정 시점으로 복구하는 기능 제공

4. 협업: 수정사항 공유 및 코드 병합 기능 제공

 

깃(Git)이란?

리누스 토르발스가 개발한 CLI 기반-오픈소스 기반 분산형 VCS(Version Control System) 

 

깃(Git)의 장점

1. 분산형 VCS(Version Control System)로서 매우 빠르고, 쉬운 백업 복구가 가능하며 서버 상태에 관계 없이 작업 가능

2. 로컬저장소(local repository)를 생성하여 더욱 유연한 분산처리 체계를 구성할 수 있으며, 오프라인 상태에서도 프로젝트를 진행 가능

3. 가지치기(branch)와 병합(merge)이 쉬움

4. 오픈소스(open-source)로 무료 사용 가능

5. 거대한 깃(git) 생태계를 보유

 

깃허브(Github)란?

깃허브(Github)는 서비스형 Git 호스팅을 제공하는 대표적인 무료 Git 저장소입니다. 

 

깃허브(Github)의 기능

1. 위키 기능

2. 다른 사용자의 저장소(Repository) 구독 

3. 사용자간 커뮤니케이션 기능

4. 커밋 역사 기록

5. 코드 검토 및 댓글을 지원하는 풀 리퀘스트(Pull request) 기능

6. 레이블, 마일스톤, 담당자 할당, 검색엔진 기능을 탑재한 이슈 트래커

7. 자동 README 파일 문서화

8. 커밋 관련 분석 데이터 시각화 기능

9. 보안 경보

10. 깃허브 페이지 - 공개 저장소를 이용한 호스팅(블로그 및 프로젝트 문서 개설 가능)

11. 깃허브 엔터프라이즈 - 기업 고객을 위한 비공개 보안 호스팅 지원


 

 

여러분이 회사생활을 한다면 누구나 겪는 가슴 아픈 일이 바로 위와 같은 사례입니다. 프로젝트의 최종안이 확정되기 전까지 수많은 '최종'들의 난립이 이루어지죠. 프로젝트 진행 시 버전관리가 잘 되지 않는 사례입니다. 이는 같은 사무직 종사자인 개발자들도 마찬가지로 겪는 일입니다.  

 

 

개발자는 다른 사람들과 협업하여 공통의 코드에서 발생하는 버그를 관리하고 새로운 비즈니스 로직을 추가합니다. 이렇게 늘어난 수 만 줄의 코드를 관리 해야하는 것이 개발자들의 일인 것이죠. 수많은 개발자가 붙어서 만든 코드의 버전 관리를 하는 것은 사실상 가장 어려운 일일 것입니다. 언제나 극한의 효율을 추구하는 존재인 게으른 개발자는 이런 수고로움 덜 수 있는 방법을 연구합니다. 

 

그 방법을 실체화한 것이 바로 버전관리시스템(VCS, Version Control System)입니다. 버전관리시스템은  변경점 관리, 버전관리, 백업 및 복구, 협업을 지원하는 시스템입니다. 대표적으로 Git, Bitkeeper, CVS, Subversion, Mrcurial 등이 있습니다.

VCS의 특징을 정리해보면 다음과 같습니다.

1. 변경점 관리: 누가 언제 변경했는지에 대한 변경기록 관리

2. 버전 관리: 특정 시점에 tag를 통해 버전을 표시하고 여러 버전을 합치거나 분리시킬 수 있게 관리

3. 백업&복구: 문제가 생겼을 때 특정 시점으로 복구하는 기능 제공

4. 협업: 수정사항 공유 및 코드 병합 기능 제공

 

이 버전 관리시스템 중 가장 유명하고 많이 쓰이는 시스템이 바로 '깃(Git)'입니다. 이제 깃(Git)에 대해 알아보겠습니다.

 

01. 깃(Git)이란 무엇인가?

 

 

 

 

 

깃(Git)은 이전에 소개드린 적이 있던 리누스 토르발스가 개발한 CLI 기반 분산형 VCS입니다. 이 리누스라는 분은 무려 리눅스를 개발한 위엄있는 개발자인데, 리눅스로 오픈소스 OS계를 정복하더니 이번에는 깃으로 버전 관리 시스템의 세계를 평정해버린 것이죠.

 

리눅스를 계속 업데이트하던 리누스가 방대한 양의 리눅스 커널의 버전을 관리하기 위해 VCS를 사용했었는데요. 기존에 존재하던 VCS인 Subversion, Bitkeeper, CVS등이 마음에 들지 않아 새로운 버전관리 시스템이 필요하다는 생각에 그냥 만들어 버린 자체 VCS가 바로 깃(Git)입니다.

 

리누스 토르발스 - 하여간 대단한 아저씨....

 

리누스가 개발한 시스템답게 Git은 오픈소스입니다. 따라서 누구나 쓸 수 있는 시스템으로 현재는 전세계 90% 이상의 개발자들이 버전관리를 위해 깃을 쓰고 있다고 해도 과언이 아닙니다. 

 

그렇다면 Git의 장점이 대체 무엇이기에 이렇게 많은 사랑을 받고 있을까요? Git의 장점을 정리해보겠습니다.

 

Git의 장점

1. 분산형 VCS(Version Control System)로서 매우 빠르고, 쉬운 백업 복구가 가능하며 서버 상태에 관계 없이 작업 가능

협업용 VCS는 중앙집중형 버전관리 시스템(CVCS, Central Version Control System)분산형 버전관리시스템(DVCS, Distributed Version Control System)으로 나뉩니다. 공통점은 모두 중앙 서버에 작업 완본을 두어 개발자 협업을 지원하는 것이죠. CVCS의 형태를 먼저 보시죠.

 

중앙집중형 버전관리시스템(CVCS)의 예

 

위 그림과 같이 최종본을 가진 중앙 서버가 존재하고 각자 수정을 원하는 파일을 다운받아 수정한 뒤, 다시 서버에 등록하는 형태로 버전을 관리합니다. 간단하게 협업이 가능하고 누가 어떤 일을 했는지 기록이 되어 협업을 관리하기 용이하죠.

 

단, 서버가 날라가게 되면 작업이 불가능하고 백업이 불가능하다는 단점이 있고, 동시 수정으로 인한 충돌 문제 등이 발생할 확률이 높습니다. DVCS는 이런 문제점을 해결하기 위해 나타난 방법인데요. CVCS와는 달리 프로젝트의 전체를 다운받아 작업하는 방식입니다.

 

분산형 버전관리시스템의 예(DVCS)

 

이로인해 중앙집중형과 달리 각 작업자가 모두 버전 관련 데이터베이스를 가지고 다른 작업자와 협업이 가능하죠. 중앙 서버의 상태와 관계 없이 작업 가능, 서버가 사라져도 로컬 간 협업 가능, 충돌 염려 없이 수정 가능 등 다양한 장점이 있습니다. 게다가 분산형 버전관리시스템에서는 각자의 컴퓨터가 일종의 서버 역할을 대신하기 때문에 서버가 처리해야 할 일이 줄어 매우 가볍고 빠르다는 장점이 있습니다.

 

2. 로컬저장소(local repository)를 생성하여 더욱 유연한 분산처리 체계를 구성할 수 있으며, 오프라인 상태에서도 프로젝트를 진행 가능

 

 

Git은 원격저장소(서버)와 로컬 컴퓨터 사이에 git으로 관리하는 로컬 저장소(Local repository) 개념이 존재해, 프로젝트 파일을 1차적으로 로컬 저장소에서 관리하다 필요한 순간에 원격저장소나 다른 작업자에게로 프로젝트 파일을 전송(push)해 프로젝트를 업데이트하는 방식을 택했습니다. 로컬 저장소는 일종의 로컬 서버 역할을 하는 것이죠. 이 로컬 저장소는 git init 명령어로 쉽게 생성할 수 있으며 생성된 저장소는 버전 기록과 기록을 추적할 수 있는 데이터를 포함합니다. 

 

이렇듯 Git은 클라이언트(로컬)와 서버 간에 로컬 저장소와 같은 중간 매개체를 둠으로서 분산처리 구조를 유연하게 만들 수 있습니다. 단순히 로컬 저장소만이 아닌 중간 서버를 한 단계 더 두어서 더욱 작게 분산시킬 수 있는 것이죠,

 

3. 가지치기(branch)와 병합(merge)이 쉬움

대부분의 버전관리시스템이 그렇듯 Git도 버전을 여러 개로 나눌 수 있습니다. 기능 추가, 버그 수정, 보안 업데이트 등 다양한 작업 별로 버전을 따로 관리하여 테스트 한 뒤 하나의 최종본으로 병합(merge)하는 것이죠. 

 

작업자별, 팀별, 작업 종류별로 각자의 작업을 브랜치(branch)로 나누어 관리하다가 각 branch 단위에서 이상 없이 작업이 완료되면 다시 합치는 것이죠. Git은 이 브랜치를 쉽게 나누고 병합할 수 있습니다. 앞서 말했듯 Git은 프로젝트를 전부 받은 뒤 로컬에서 작업을 하기 때문에 다른 버전관리 시스템에 비해 브랜치를 나누는 것이 매우 쉽죠. 병합도 마찬가지인데요. 작업을 하는 사이 서버에 있는 최종본이 업데이트 되더라도 패치(fetch) 기능을 이용해 기존 저장소를 최종본 형태로 업데이트 한 뒤 작업하던 작업물을 테스트하고 최종본에 병합할 수도 있습니다.

 

4. 오픈소스(open-source)로 무료 사용 가능

리누스의 작품답게 오픈소스로 개발되었습니다. 기존에 리누스가 쓰던 Bitkeeper가 리눅스 개발자들의 리버스 엔지니어링(기존 프로그램을 역으로 설계하여 프로그램을 복제하는 것)을 우려해 개발자들의 이용을 제한하자 만들어버린 버전관리시스템이 Git입니다. Git은 오픈소스 프로그램답게 빠르게 압도적인 점유율을 차지합니다. 

 

 

재밌게도 한 때 오픈소스를 소프트웨어 발전 및 경쟁의 저해 요소라며 까던 마이크로소프트가 세계 최대 Git 저장소인 Github를 8조를 들여 인수하기까지 했죠. 현재는 MS 뿐만 아니라 애플, 구글, 모질라, 트위터 등 초거대 IT기업 모두 Git을 이용해 버전을 관리하며 협업을 하고 있습니다.

 

5. 엄청난 생태계 보유

앞서 설명한 무료에다가 빠르고 강력한 기능을 가진 장점이 만들어 낸 엄청난 생태계가 Git에 존재합니다. 서버 호스팅 Git 저장소인 Github와 Gitlab, Bitbucket등에 올라오는 공개 프로젝트는 모두 '무료'로 오픈소스 개발의 성지가 되었습니다. 이 장점은 Github를 빼놓고는 이야기할 수 없는 장점입니다. 이번에는 개발자라면 누구나 이용하는 Github에 대해 알아보겠습니다.

 

이번에는 오픈소스와 개발자들의 성지 (개발자를 위한 심파일...) Github에 대해 알아보겠습니다.

 

 

02. 깃허브(Github)란 무엇인가?

깃허브(Github)는 서비스형 Git 호스팅을 제공하는 대표적인 무료 Git 저장소입니다. 2008년에 시작된 깃허브는 개발자들에게 공개 프로젝트를 무료로 제공하면서 오픈소스의 성지로 자리매김했죠. 수많은 프로젝트들이 깃허브를 매개로 개발되었고, 오픈소스로 개발된 라이브러리, 프로그램 등이 폭발적으로 증가할 수 있게 되었습니다. 현재는 마이크로소프트에 인수되어 서비스되고 있는 중이죠.

 

 

깃허브는 Git을 단순히 호스팅할 뿐만 아니라 다양한 기능을 지원합니다.

 

깃허브(Github)의 기능

1. 위키 기능

2. 다른 사용자의 저장소(Repository) 구독 

3. 사용자간 커뮤니케이션 기능

4. 커밋 역사 기록

5. 코드 검토 및 댓글을 지원하는 풀 리퀘스트(Pull request) 기능

6. 레이블, 마일스톤, 담당자 할당, 검색엔진 기능을 탑재한 이슈 트래커

7. 자동 README 파일 문서화

8. 커밋 관련 분석 데이터 시각화 기능

9. 보안 경보

10. 깃허브 페이지 - 공개 저장소를 이용한 호스팅(블로그 및 프로젝트 문서 개설 가능)

11. 깃허브 엔터프라이즈 - 기업 고객을 위한 비공개 보안 호스팅 지원

 

굉장히 많은 기능이 존재합니다. 그 중에 일반적인 사용자가 관심 있을만한 페이지 호스팅 소개를 해드리겠습니다.

 

깃허브 페이지(Github Page)

 

깃허브 페이지(Githuyb Pages)는 사용자가 블로그, 프로젝트 문서, 책 등을 호스트할 수 있도록 Github에서 제공하는 정적 웹 호스팅 서비스입니다. 깃허브 페이지는 Jekyl이라는 정적 웹 호스팅 엔진을 이용해 제작 가능하며 깃허브 페이지에 저장된 모든 콘텐츠는 마크다운 형식으로 작성 가능합니다. 기회가 되면 Jekyl을 이용해 블로그를 생성하는 과정을 살펴보겠습니다.

 

 

Additional: 초보 개발자에게 깃과 깃허브란?

개발자가 맡는 업무 중 개발 버전 관리는 꽤 중요하면서도 개발팀의 규모가 커질 수록 어려운 작업입니다.거대한 IT기업에서는 개발 버전관리를 넘어 빌드와 릴리즈의 절차를 관리하고 효율적인 빌드와 테스트 구조 개발을 전문적으로 담당하는 형상 관리 전문가 또는 팀이 존재합니다. 대규모 협업에서 빠르고 정확한 빌드 시스템을 개발하고 운용하는 일을 담당하는 것이죠. 이 팀이 하는 일은 깃과 같은 버전관리 툴을 내부적으로 이용하며 효율적이고 체계적인 개발을 지원합니다. 

 

초보/주니어 개발자라면 누구나 깃허브의 중요성에 대해 듣습니다. 개발자 면접에서 포트폴리오로서 유용하게 사용할 수 있기 때문이죠. 특히 직무경력이 부족한 경우에는 보여 줄 수 있는 기술이 깃허브의 기록이 거의 전부입니다. 최근에는 비전공자 + 늦은 나이에 개발에 입문한 분들이 많기에 깃허브를 적극적으로 활용하여 하나의 개발자 포트폴리오로서 이용하는 것이 대세입니다. 

 

깃허브를 활용한 포트폴리오 작성과 같은 강의도 꽤 인기를 끌고 있는데, 나중에 깃허브 포트폴리오 작성도 심도 깊게 공부해서 포스팅해보겠습니다.

 

앞으로는 깃 활용법, 깃허브 활용법에 대해 알아보겠습니다!