개발을 하다보면 자연스럽게 사용하게 되는 git과 Github
사실 저는 이 두 개가 같은 건줄알고 Github 줄인 말이 git인줄 알았습니다 ㅋㅋ;
하지만 CS 면접 나오는 대표적인 질문들 중 하나이기에
이번 포스팅으로 차이점을 알아보고자 합니다.
📌 Git ( 깃 ) 이란 ?
로컬 파일의 변경사항을 기록하고 해당 파일에 대한 여러 사용자 간의 작업을 조율하기 위한 분산형 버전 관리 시스템(VCS : Version Control System) 입니다.
Git 이 왜 필요한지에 대해 살펴보자면, 우리가 과제를 제출할 때를 봅시다.
처음에 과제를 완성했다하고 이름을 저장했을 때는 "김김씨 과제.pdf"라고 저장할 것입니다.
근데, 다시 확인을 해보니 수정이 필요해 이전 파일이 필요할지도 모르니 복사하여 수정을 마친후 "김김씨 과제-최종.pdf" 라고 저장합니다.
하지만 또 수정이 필요해 이전 파일을 복사해 수정을 마친후 진짜 마지막이라고 생각하고 "김김씨 과제-최최최최종.pdf"라고 저장합니다.
하지만 또 수정이 필요해 또 파일을 복사해 다시 이름을 수정하는 경험을 한적 다들 있으실 겁니다.
여기서 우리는 이 과제 파일들을 복사, 저장 등을 하였고 이것들을 버전 관리라고 할 수 있습니다.
하지만 이렇게 반복되어 작성했다가 파일이 많아지게되면 파일의 제목만으로 도대체 이게 어떤걸 수정한거고 이게 뭔지 헷갈릴겁니다.
이런식의 버전 관리는 비효율적이기 때문에 좀 더 효율적으로 관리하고자 도와주는 것이 바로 버전 관리 도구 ( 여기선 Git ) 입니다.
Git의 장점 및 특징
1. 소스코드를 usb나 메신저 등으로 파일 자체에 대해 주고 받을 필요 없고, 같은 파일을 여려 명이 동시에 작업하는 병렬 개발이 가능합니다.
2. 소스코드의 수정 내용은 커밋이라는 단위로 관리할 수 있고, Push(업로드)로 배포가 가능하고, 원격 저장소에서 Pull(가져오기) 이 가능하기 때문에 프로그램의 변동 과정을 체계적으로 관리할 수 있습니다.
3. 이전의 버전( 오류가 없던 코드 )으로 되돌아갈 수 있습니다. ( Rollback )
4. 분산 버전 관리이기 때문에, 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며, 중앙 저장소가 날아가도 다시 원상복구할 수 있습니다.
5. Local에서 대부분의 작업을 할 수 있고, 이러한 이유로 속도도 빠릅니다.
Git은 이러한 장점과 특징을 가지고 있지만, 여러 명과 작업하는 것은 Git만 사용해선 할 수 없습니다.
로컬 저장소를 사용하기 때문에 Git만으로는 다른 개발자와 실시간으로 작업을 공유할 수 없습니다.
이때 다른 개발자와 실시간으로 작업을 공유하기 위해 필요한 것이 바로 Github입니다.
📌 Github ( 깃허브 ) 란 ?
Github는 Git 저장소를 관리하는 클라우드 기반 호스팅 서비스입니다.
로컬 파일을 깃허브 클라우드에 Push(업로드)하여 서로 다른 위치에 있는 여러 사용자가 작업, 협업할 수 있습니다.
Github는 내 코드들을 백업해놓는 기능을 넘어서서 전세계의 오픈소스 프로젝트들이 공유되고 개발자들의 발전을 도모하는 곳입니다.
오픈소스 코드들을 내가 수정해서 더 나은 코드로 만들수도 있고, 다른 프로그래머에게 수정코드를 제안받을 수도 있고, 내가 혹은 다른 누군가가 기업의 프로젝트에 기여할 수도 있습니다.
Github는 오픈소스의 성지로, 세계 곳곳의 실력있는 개발자들이 작성한 코드들과 프로젝트들을 오픈소스로 확인해볼 수 있는 곳입니다.
다른 사람들과 협업할 경우, 오픈소스를 공유하고 다른 사람들의 의견을 듣고 싶은 경우 등은 Github를 써서 편리하게 기능을 사용할 수 있고,
만약 혼자 작업하거나 폐쇄적인 범위 내에서의 협업이라면 Git만 사용해도 무방합니다.
Git | Github |
버전 관리 프로그램 | 버전 관리, 소스 코드 공유, 분산 버전 제어 등등이 가능한 원격 저장소 |
참고자료
https://steady-coding.tistory.com/274
'◼ CS 기초 지식 > [개발상식]' 카테고리의 다른 글
MVC 디자인 패턴이란? (0) | 2022.11.08 |
---|---|
[Java/자바] 인터페이스(interface)란 ? (0) | 2022.10.25 |
객체지향프로그래밍 (OOP)에 대해 알아보자. (0) | 2022.10.22 |
TDD ( 테스트 주도 개발 ) 란 ? (0) | 2022.10.06 |
동기와 비동기의 개념 및 차이에 대해 쉽게 알아보자. (1) | 2022.09.30 |