GitHub 시작하기 2

타키탸키·2021년 4월 13일
0

지난 시간에는 GitHub에서 레포지토리를 생성하는 것과 로컬 레포지토리와 리모트 레포지토리의 커밋 내용을 반영하는 방법에 대해 배웠습니다.

이번 시간에는 프로젝트와 관련된 GitHub의 사용법에 대해 알아보겠습니다.

🏡 git push 제한

git push에 대해 알아둬야 하는 사실은 아무나 git push를 할 수 있는 것이 아니라는 것입니다. 만약 이를 허용한다면 자신도 모르는 사이에 리모트 레포지토리의 내용이 이름 모를 사용자에 의해 마음대로 바뀔 수도 있습니다. 따라서, git push는 리모트 레포지토리의 주인인 본인만 할 수 있습니다. 다른 사용자도 git push를 하게끔 허용하려면 GitHub에서 추가 작업을 해야 합니다.

우선, GitHub에서 tataki26의 리모트 레포지토리인 MathBox의 설정을 보겠습니다. 상단의 여러 탭 중 Setting 탭을 눌러주세요. 그 다음 좌측 Manage access 탭을 누르면 됩니다.

화면에 PUBLIC REPOSITORY라는 문구가 보이시나요? 이는 누구나 리모트 레포지토리의 주소만 알면 그 내용을 살펴볼 수 있다는 뜻입니다. 또한, 누구든지 이 레포지토리를 자신의 컴퓨터로 가져갈 수도 있다는 뜻이구요. 추가 작업까지도 가능합니다.

그러나 중요한 것은 본인이 아닌 이상 그 내용을 git push할 수 없기 때문에 바뀐 내용을 리모트 레포지토리에 반영할 수는 없습니다.

그럼 설정을 바꿔 다른 사용자도 git push를 할 수 있도록 허용해보겠습니다. 화면에 있는 invite a collaborator 버튼을 눌러주세요. 이는 다른 collaborator를 초대한다는 뜻입니다. 다른 사용자를 collaborator로 초대하면 그 사용자는 제 리모트 레포지토리에 git push할 수 있는 권한을 가집니다.

지금은 추가할 수 있는 사용자가 없기 때문에 비워져있지만 권한을 주고 싶은 사용자의 이름이나 이메일 주소를 입력하면 추가가 가능합니다. 추가를 하고 녹색 버튼을 클릭하면 추가한 사용자에게 collaborator가 되어달라는 초대장이 갑니다. 해당 사용자가 초대를 수락하면 그 사용자는 git push 권한을 갖게 됩니다.

🏡 다른 프로젝트 가져오기

GitHub의 또 다른 장점다른 사람들이 진행하고 있는 프로젝트들의 레포지토리를 볼 수 있다는 것입니다. 한 번 해볼까요?

GitHub의 메인 화면 상단의 Explore 버튼을 누르면 관심을 가질만한 프로젝트를 GitHub가 추천해줍니다.

아무 프로젝트나 눌러보겠습니다.

눌러보면 폴더가 되게 많습니다. 커밋 수도 358개나 되죠? 맨 아래 README 파일도 있습니다.

README 파일을 읽어보면 프로젝트에 대한 여러 가지 정보가 적혀있는 것을 확인할 수 있습니다.

이렇게 GitHub에서는 다른 사람들이 만들어 놓은 프로젝트에 대해서 정보를 얻거나 직접 사용할 수도 있습니다. 한 번 해볼까요?

상단의 검색창에서 'numpy'를 검색해주세요.

그럼 numpy라는 프로젝트를 찾을 수 있습니다.

README 파일을 읽어보니 numpy는 Python을 이용해서 과학적인 계산을 하기 위해 필요한 기본적인 패키지라고 적혀 있네요. 사실 numpy는 Python에서 꽤 유명한 라이브러리입니다. 이러한 numpy조차 누군가의 로컬 레포지토리로부터 리모트 레포지토리로 옮겨졌다는 사실이 신기하네요.

이제 이 numpy를 제 컴퓨터에 가져오겠습니다. 먼저, 이 레포지토리의 주소를 알아야 하는데요. 스크롤을 올려 Clone or download 혹은 code라는 녹색 버튼을 클릭해주세요.

그럼 위와 같이 주소가 나오는데 이 주소를 복사해주세요. 그런 다음, Git Bash로 넘어옵니다. 여기서 바로 주소를 붙여넣으면 안되는데요. 우리가 작업하고 있던 MathTool에 numpy를 불러오게 되면 두 프로젝트가 꼬일 수 있기 때문입니다. 따라서, 프로젝트 디렉토리가 아닌 홈 디렉토리에 numpy를 불러오겠습니다.

cd ..

리모트 레포지토리를 가져오는 커맨드는 git clone입니다. clone은 '복제하다'라는 뜻을 가지고 있습니다. 이 커맨드는 GitHub에 있는 프로젝트의 레포지토리를 그대로 제 컴퓨터로 복제하는 역할을 담당합니다. 커맨드 옆에는 방금 복사했던 레포지토리 주소를 붙여넣기 해야 합니다.

git clone https://github.com/numpy/numpy.git

실행을 하면, numpy가 다운로드 됩니다. numpy 디렉토리로 이동해서 파일을 한 번 살펴보겠습니다.

그럼 GitHub에 있던 동일한 파일과 디렉토리들이 있다는 것을 확인할 수 있습니다.

이렇게 git clone 커맨드를 쓰면 GitHub 다른 사람이 작업하고 있는 프로젝트의 리모트 레포지토리를 자신의 컴퓨터로 가져와서 살펴볼 수 있습니다.

🏡 오픈 소스 프로젝트

GitHub에는 훌륭한 프로젝트들이 많습니다. 그리고 대부분의 프로젝트가 그 소스 코드를 공개하고 있는데요. 이런 프로젝트를 '오픈 소스 프로젝트(Open Source Project)'라고 합니다.

아주 오래 전 프로그래밍의 세계에서는 소스 코드를 공개하고 공유하고 그 원리를 가르쳐 주는 것이 당연했습니다. 하지만 프로그램 시장이 발전하면서 특정 회사가 프로그램에 대한 사용료를 받는 것이 일반화되기 시작했는데요. 이런 변화와 함께 소스 코드가 공개되는 일이 줄어들었습니다. 심지어 그 프로그램을 이용하는 고객조차도 소스 코드를 볼 수 없었습니다.

이런 움직임에 반하여 1983년에 리차드 스톨만(Richard Stallman)이라는 한 MIT 연구원이 '자유 소프트웨어 운동'이라는 걸 시작했습니다. 이는 프로그래밍 역사 초기와 같이 소스 코드를 공유하던 문화로 돌아가자는 취지의 운동이었습니다. 그는 '자유 소프트웨어 재단(Free Software Foundation)'을 세우고 자유 소프트웨어 운동을 조직화했습니다.

자유 소프트웨어 재단의 소프트웨어는 그 소스 코드가 공개되어야 하고 누구나 코드를 자유롭게 가져다가 사용할 수 있으며 원래의 코드를 자신이 원하는 대로 수정할 수 있어야 한다는 정신이 강조되었습니다. 그리고 그러한 정신에 부합하는 프로그램들이 많이 만들어졌죠. 그 중 대표적인 프로그램이 바로 'GNU 리눅스'입니다.

그런데 '자유 소프트웨어(Free Software)'라는 명칭에 대해 그 의미가 확실치 않다는 지적이 있었습니다. 따라서, '오픈 소스 소프트웨어'라는 새로운 이름을 갖게 된 것이죠.

이런 역사적 흐름을 거쳐 오픈 소스 소프트웨어라는 개념이 생기고 정착하게 되었습니다. 이러한 오픈 소스 소프트웨어에는,

Python 수치 계산용 라이브러리, Numpy
리눅스 커널에 기반을 둔 운영체제, Linux
데이터 베이스 프로그램, MySQL Server
설치형 블로그 프로그램, WordPress
페이스북에서 만든 모바일 UI 프레임워크, React Native
웹 UI 프레임워크, Vue.js
머신러닝 프레임워크, Tensorflow

등이 있습니다. 이 외에도 꽤 유명한 프로그램들이 오픈 소스 소프트웨어인 경우가 많습니다.

하지만 오픈 소스라고 해서 사용할 때 아무런 제약이 없는 것은 아닙니다. 오픈 소스에도 다양한 종류의 라이센스(open source license)들이 있기 때문입니다. 예를 들어, 어떤 오픈 소스 라이센스 중에는 오픈 소스가 활용된 부분이 있는 코드라면 그 코드도 마찬가지로 오픈 소스로 공개해야 한다는 제약을 가지고 있습니다. 이에 관한 자세한 이야기는 이 링크를 확인해보시면 좋겠습니다.

그럼 오픈 소스에는 어떤 장점이 있을까요?

  1. 무료로 사용 가능하다
  2. 여러 개발자들의 참여로 코드의 신뢰성이 높다
  3. 오픈 소스 프로젝트의 참여 중인 다른 개발자와 소통할 수 있다
  4. 사실상 표준으로 자리 잡는 경우가 많아 전체 개발 속도를 단축 시킬 수 있다

반면에 단점으로는,

  1. 참여자 수가 많지 않거나 실력이 좋지 않으면 코드의 신뢰성을 보장 받기 어렵다
  2. 해당 오픈 소스를 사용해서 문제가 생겼을 때, 보상을 해주거나 책임을 질 주체가 없다

등이 있습니다. 오픈 소스라고 무조건 좋은 것은 아니기 때문에 공신력 있는 오픈 소스 프로젝트인지를 먼저 따져보고 사용하는 것이 좋습니다.

GitHub에서는 Facebook이나 Google 같은 세계적인 IT 회사의, 실력있는 개발자들이 만든 코드를 자유롭게 살펴볼 수 있습니다. 따라서, 개발자들에게는 GitHub만큼 좋은 공부 장소가 없죠. 자신이 관심있는 분야의 코드를 분석하거나 오픈 소스 수정에 기여할 수 있다면 실력이 성장하는 것은 당연한 일일 겁니다. 이런 흔적은 GitHub의 본인 계정 정보에도 다 표시되기 때문에 그 자체로도 훌륭한 이력이 됩니다.

🏡 README.md 업그레이드

보통 README.md 파일에는 이 프로젝트가 어떤 프로젝트인지를 설명하거나 프로그램의 주요 사용법을 알려주거나 프로그램을 실행시키려면 어떤 사전 작업이 필요한지를 알려주는 내용들이 적혀 있습니다.

README는 GitHub에서 프로젝트의 메인 화면에 보여주기 때문에 파일의 내용을 가독성있게 작성하는 것이 중요합니다.

앞서 우리가 작성했던 README 파일을 봅시다.

numpy 프로젝트의 README 파일과 비교하면 초라해보이네요. 내용 자체가 없어서 그렇기도 하지만 단순한 텍스트로만 구성되어 있어서 그렇게 보이는 건데요. 어떻게 하면 numpy의 README처럼 화려하게 꾸밀 수 있을까요?

그 해답은 README 파일의 확장자 .md에 있습니다. 이 확장자는 markdown이라는 단어의 줄임말입니다. markdown은 파일에 마크다운으로 내용을 작성할 수 있다는 걸 나타내는데요. 특정 규칙에 맞게, 간단한 텍스트만으로 표시를 해두면, 그것이 자동으로 HTML 태그로 전환되도록 약속된 문법입니다.

마크다운을 활용해서 README 파일을 꾸며봅시다. 연필을 눌러 편집기로 들어가주세요.

제목에 샵(#) 세 개가 보이시나요? 이것이 바로 마크다운의 한 예입니다. 이렇게 할 경우 텍스트를 제목처럼 보이게 만들어주는 효과가 생깁니다.

또 다른 마크다운을 추가해볼게요. 아래와 같이 따라해주세요.

이렇게 한 뒤, 커밋 메시지에 Make README.md look nice라고 적어주고 커밋을 해줍니다.

그럼 README의 내용이 위와 같이 변합니다. 제목이 눈에 안 띄어서 한 번만 더 바꿔보겠습니다.

제목 크기가 더 커지고 밑에 연한 줄이 하나 생겼습니다. 샵 세 개에서 한 개로 바꾸면 위와 같은 효과를 적용할 수 있습니다.

이처럼 #, *, -과 같은 간단한 기호만으로 시각적 효과를 더할 수 있는데요. 이는 이러한 기호들이 마크다운에서 이미 정해진 의미를 가지고 있기 때문입니다.

GitHub에서 사용되는 마크다운의 규칙을 알고 싶다면 이 링크를 확인해보시길 바랍니다.

자, 방금 리모트 레포지토리에서 새로운 커밋을 진행했었죠? 그럼 그 다음에 뭘 해야할까요? 네, 맞습니다. 로컬 레포지토리에도 변경 사항을 적용하기 위해 git pull을 해야겠죠?

이렇게 하면 Sublime Text의 내용도 함께 변한 것을 확인할 수 있습니다.

🏡 GitHub 커맨드 정리

git push -u origin master는 로컬 레포지토리의 내용을 처음으로 리모트 레포지토리에 올릴 때 사용합니다. -u origin master의 의미는 앞으로 배울 브랜치 시간에 배울 테니 걱정하지 마세요.

git push로컬 레포지토리의 내용을 리모트 레포지토리에 보내는 커맨드입니다. 반대로, git pull리모트 레포지토리의 내용을 로컬 레포지토리에 보내는 커맨드입니다.

git clone [프로젝트의 GitHub상 주소]GitHub에 있는 프로젝트를 내 컴퓨터로 가져오도록 돕는 커맨드입니다.


이번 시간에는 GitHub에서 다른 사람의 프로젝트를 가져올 때 알아야할 커맨드와 유의 사항에 대해 함께 알아봤습니다. 추가로 오픈 소스 프로젝트에 대해서도 알아봤는데요. 프로그래밍 세계가 지금까지 발전할 수 있었던 데에는 공유의 문화가 가장 큰 역할을 했다고 봅니다. 여러분도 GitHub를 통해 훌륭한 소스 코드를 살펴 보고 수정에 기여하면서 개발 실력을 높여 가시길 바랍니다.

다음 시간에는 커밋을 좀 더 잘 다룰 수 있는 방법에 대해 배워보겠습니다.

* 이 자료는 CODEIT의 'Git으로 배우는 버전 관리' 강의를 기반으로 작성되었습니다.
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글