개발자가 되려면 GitHub은 필수요, 발을 담는 순간부터 Commitment 잔디밭을 가꾸면 좋다 하였다.
구조공학을 하면서 관련 grasshopper code (probably?)를 찾으러 한 번, CS50 듣기 시작하면서 또 한 번 GitHub을 찾았던 것 같은데, 그 당시에는 내가 필요한 부분만 썼지, GitHub에 대한 전반적인 이해는 없었다. 그래서 조금이라도 더 이해해보려고 한다, GitHub을!
GitHub
" GitHub, Inc. is an American multinational corporation that provides hosting for software development and version control using Git. It offers the distributed version control and source code management (SCM) functionality of Git, plus its own features. It provides access control and several collaboration features such as bug tracking, feature requests, task management, continuous integration and wikis for every project.Headquartered in California, it has been a subsidiary of Microsoft since 2018." - Wikipedia [1]
2008년에 샌프란시스코에서 Tom Preston-Werner, Chris Wanstrath, 그리고 PJ Hyett 에 의해 시작된 GitHub은, Git를 이용한 소프트웨어 개발, 분산 버젼 컨트롤, 소스코드 관리 등을 지원하는 플랫폼이다. 창업자들의 weekend project로 시작한 이 플랫폼은, 출시 이후 비약적인 발전을 이룬다. [2]
그렇다면 왜 창업자들은 weekend project로 이걸 만들게 되었을까? 또 Git은 무엇이고?
Linus, Linux, 그리고 Git의 등장
Linus and Linux
스웨덴계 핀란드인이자 미국인인 프로그래머, 리누스 베네딕트 토르발스 (Linus Benedict Torvalds).
그는 대학교 2학년 시절, 교수가 만든 교육용 운영체제 MINIX를 자신의 컴퓨터에서 돌아가도록 변형하여 Linux (Linus' MINIX)*를 '재미로 (역시 천재...!)' 만들었다.
*Linus' *nix (리누스의 유닉스), Linux Is Not UniX 등의 의미도 있다 한다.
다중 작업 운영체제의 시작이었던 UNIX가 유료였던 것과 달리, 무료였던 Linus는 소스 파일 공개로 전세계 사람들과 같이 개발, 발전시켜올 수 있었다. Linus 커널*에 GNU**의 프로그램을 올려 (GNU/)Linux 운영체제를 발전시켜왔고, 이는 안드로이드OS 등의 전신이 되었다. [4]
* 커널: 운영체제의 핵심이 되는 부분. 시스템이 부팅될 때 로드. 시스템의 하드웨어 제어. 자원 스케쥴링, 실행중인 프로그램 관리. 자료 관리.
** GNU: GNU's Not Unix. 1984년 Richard Matthew Stallman을 중심으로, UNIX와 호환되면서 더 강력한, 동시에 모두가 사용할 수 있는 (free) 운영체제를 만들고자 만든 프로젝트. 소프트웨어의 상업화에 반대한다.
이렇게 역사상 가장 많은 contributors와 함께 발전하는 Linus를 만든 리누스! 선생님.
이전에 많이 쓰이던 소스 코드 관리 시스템 (Source-control management, SCM)의 종류인 BitKeeper가 유료화되고, 남아있는 무료 버전들은 그의 마음의 들지 않았다.
이미 있는 게 마음에 들지 않으면? 새로 만들면 되지!
그렇게 그는 2005년 4월에 Git을 한 달만에(...) 만들게 된다.
"깃은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템"
- 위키피디아 [1]
2005년 7월부터는 Junio Hamano가 후임자로 Git의 주요 관리자로 임명이 된다.
여담으로, Git은 '불쾌하고 경멸스러운 인간 (unpleasant & contemptible) ㅠㅜ'을 뜻하며, 리누스 토르발스는 본인이 만들었기에 본인을 일컫는 이름을 붙였다고 한다. Read-me에는 더 많은 뜻이 담겨있지만:
git" can mean anything, depending on your mood.
- random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
- stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
- "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
- "goddamn idiotic truckload of sh*t": when it breaks [2]
Git
그렇다면 Git의 능력 / 특징들은?
위키피디아의 "Design" section이 잘 설명하고 있다. [5]
- Strong support for non-linear development
비선형적 개발 지원
- Distributed development
분산 개발
- Compatibility with existent systems and protocols
기존 시스템, 프로토콜과의 호환성 (ex. HTTP, FTP, a Git protocol over ssh, CVS + IDE, Svn)
- Efficient handling of large projects
대형 프로젝트의 효율적인 관리
- Cryptographic authentication of history
히스토리의 암호화적 인증 (각 commit / version 때마다 이전까지의 히스토리를 바탕으로 ID가 주어지며, 이에 따라 비밀스럽게 임의로 예전 버젼들의 수정은 불가함)
- Toolkit-based design
툴킷을 사용한 디자인
- Pluggable merge strategies
Pluggable merge 전략
- Garbage acccumulates until collected
특정 용량 이상 모인 garbage 취합
- Periodic explicit object packing
메모리의 효율적 사용을 위한 주기적인 object packing
Back to GitHub
다른 경쟁 시스템보다 더 빠르고 효과적인 Git은 빠르게 개발자들에게 호응을 얻었다. 다만 Git이 협력을 '가능케'는 하나 '쉽게'는 못한다는 단점을 두고, 이를 더 발전시키고자 GitHub을 만들게 된 것이다.
“Before GitHub, if you wanted to contribute to an open source project you had to manually download the project’s source code, make your changes locally, create a list of changes called a ‘patch’ and then e-mail the patch to the project’s maintainer. The maintainer would then have to evaluate this patch, possibly sent by a total stranger, and decide whether to merge the changes.”
"By contrast, GitHub’s “forking” feature allows users to copy any public repository to their own account and modify it from there. Users can then share those changes with the repository’s owner via a “pull request.” If the owner likes the changes, then he or she can merge them with the original repository." [6]
이렇게 큰 성장을 이룬 GitHub은 현재 세계에서 가장 큰 소스 공유 커뮤니티로 알려져있다.
다음 포스팅에서는 GitHub를 어떻게 사용하는지, 이에 유용한 Markdown 문법은 어떤 건 지 정리해보겠다.
출처:
[1] GitHub - Wikipedia
[2] Cracking the Code to GitHub's Growth
growthhackers.com/growth-studies/github
[3] GitHub_Blog
github.blog/2013-12-23-10-million-repositories/
[4] 학점은행제 교안
[5] Git - Wikipedia
[6] techcrunch.com/2012/07/14/what-exactly-is-github-anyway/
'개발 관련 개념들' 카테고리의 다른 글
[JWT] 클라이언트 쪽에서 JWT 사용 - React / Redux (0) | 2021.04.20 |
---|---|
npm run build시 html-webpack-plugin 에러 (0) | 2021.04.14 |
git 충돌 시 해결법 (0) | 2021.04.06 |
윈도우즈 (Windows 10) 에서 우분투 (Ubuntu) 설치하기 (0) | 2020.11.18 |
마크다운 (Markdown) (0) | 2020.11.12 |
댓글