지난 시간에는 파일의 버전 관리를 돕는 git을 사용하는 방법에 대해 알아봤습니다.
이번 시간에는 GitHub이라는 서비스에 대해 함께 배워보겠습니다.
우리는 앞서 GitHub에 관한 개괄적인 설명으로부터 프로젝트 디렉토리에서 작업하던 내용을 그대로 외부의 컴퓨터에 전송할 수 있다고 배웠습니다. 그런데 작업하던 내용을 전송한다는 것이 무슨 뜻일까요? 이는 레포지토리를 전송한다는 뜻과 같습니다.
레포지토리 안에는 버전별 프로젝트 모습, 버전별 변경 내역 등 프로젝트 디렉토리에 있든 모든 것들의 변경 이력이 담겨 있습니다. 이를 외부 컴퓨터에 전송하면 해당 컴퓨터에서도 기존 컴퓨터와 같은 작업이 가능하고 버전 관리도 가능합니다.
이때, GitHub의 역할이 바로 이와 같은 외부 컴퓨터를 무료로 제공하는 것이라고 했습니다. GitHub 말고도 비슷한 서비스를 제공하는 곳은 많지만 현재로서는 GitHub이 가장 많이 알려져 있습니다.
지금부터는 앞서 우리가 작업했던 MathTool 디렉토리의 내용을 그대로 GitHub가 제공하는 컴퓨터에 전송해보겠습니다. 우선, GitHub 홈페이지에 접속합니다.
회원가입을 아직 못했다면 아래의 설명을 따라와주세요.
먼저, GitHub 사이트에 들어갑니다. 우측 상단의 sign up
을 눌러주세요.
그럼 위와 같은 창이 뜨는데요. 위에서부터 차례대로 사용할 별명과 이메일 주소, 비밀 번호를 입력하면 됩니다. 아래, 사람인지 인증하는 절차까지 마치면 Create account
를 누릅니다.
만약 select a plan
이라는 버튼이 있다면 플랜을 고르는 화면으로 넘어갈 텐데요. GitHub에는 무료 플랜과 유료 플랜을 제공합니다. 하나의 프로젝트를 할 때, 무료 버전에서는 최대 3명까지 협력자를 설정할 수 있지만 유료 플랜은 제한이 없습니다. 사용 가능한 용량의 차이도 있구요.
그러나 아직은 GitHub을 배우는 단계이기 때문에 무료 버전을 고르셔도 충분합니다.
다음으로 등장하는 설문 사항은 원하는 대로 입력하시면 됩니다. 마지막으로 이메일 인증 단계가 있는데 입력했던 이메일로 들어가 인증을 진행하면 됩니다.
로그인을 했을 때, 다음과 같은 화면이 나온다면 계정을 성공적으로 만든 것입니다.
이제 MathTool 디렉토리의 내용을 그대로 GitHub가 제공하는 장소로 옮기겠습니다. 이를 위해서는 GitHub에 비워진 레포지토리를 하나 생성해야 합니다.
좌측에 있는 create repository
버튼을 눌러주세요.
맨 위에 레포지토리 이름을 적는 칸이 있는데요. 그대로 MathTool이라고 적어도 되고 다른 이름을 적어도 됩니다. 저는 Math_Box라고 적겠습니다.
그 아래 Description에는 프로젝트에 관한 간단한 설명을 적어주시면 됩니다. 참고로 한글도 지원합니다.
그 아래는 레포지토리의 내용을 공개할지, 숨길지를 선택하는 부분입니다. 지금은 공개로 설정하겠습니다. 나머지 옵션도 마찬가지로 그대로 두겠습니다.
그 다음, create repository
버튼을 클릭하면,
Math_Box라는 레포지토리가 생성된 것을 확인할 수 있습니다.
GitHub에서 만든 레포지토리는 원격 레포지토리 혹은 리모트 레포지토리라고 부릅니다. 반대로, 내 컴퓨터에서 생성한 레포지토리는 로컬 레포지토리라고 합니다. 더 자세히 말하면, 프로젝트 디렉토리인 MathTool 안에 있는 레포지토리가 바로 로컬 레포지토리입니다.
이제 이 로컬 레포지토리를 그대로 GitHub에 업로드해보겠습니다.
화면의 위 영역은 로컬 레포지토리를 만들고 커밋을 한 후에 GitHub에 업로드하는 방법을 나타내고 있습니다.
그 아래 이 영역은 이미 만든 로컬 레포지토리를 GitHub에 업로드하는 방법을 나타내고 있습니다. 우리는 이미 로컬 레포지토리를 만들었기 때문에 이 방법으로 진행하면 됩니다.
자세히 보면 이 영역들에 커맨드가 적혀있는데요. 이 말은 즉, 이 커맨드를 Git Bash에서 그대로 실행하면 로컬 레포지토리를 그대로 GitHub에 올릴 수 있다는 뜻입니다. 이 둘에 관한 내용은 추후에 배울 Branch 부분에서 더 자세히 알려드리겠습니다.
두번째 방법의 첫번째 줄 코드를 복사해서 Git Bash에 붙여넣기 합니다. 참고로 기존의 ctrl + c
, ctral + v
가 아닌 ctrl + insert
와 shift + insert
를 눌러야 합니다.
엔터를 친 후에는 두번째 줄 코드도 복사 붙여넣기 해줍니다.
그럼 위와 같은 로그인 창이 뜹니다. GitHub 계정으로 로그인 해주세요. 만약 계정으로 로그인할 수 없고 Personal Access Token을 사용해야 하는 경우에는 이 사이트를 참고해주시길 바랍니다.
계정 접속에 성공하면 위와 같은 창이 뜨는데 중간의 master -> master
라는 문구가 중요합니다. 이는 뭔가가 전송되었다는 표시입니다. 이를 확인할 수 있는 방법은 GitHub 사이트에서 새로고침을 하면 됩니다.
그럼 위와 같이 창이 바뀐 것을 확인할 수 있습니다.
이 부분이 바로 우리가 앞서 만들었던 파일과 폴더들입니다. calculator.py를 누르면 작성했던 코드의 내용도 보입니다.
다시 뒤로와서 우측의 커밋 부분을 누르면 사용자 이름과 커밋한 날짜 커밋 메시지 등을 확인해볼 수 있습니다.
이때, 커밋 메시지를 누르면 직전 커밋과 달라진 모습을 확인할 수 있습니다.
이때, 녹색 +
는 코드가 추가되었다는 뜻이고 빨간색 -
는 코드가 제거되었다는 뜻입니다.
다시 프로젝트를 진행해보겠습니다. 그런데 생각해보니 우리가 진행할 프로젝트에 대한 설명이 프로젝트 디렉토리 내에 없었던 것 같습니다. 그러므로 설명서 파일을 하나 만들어서 해당 내용을 추가해보겠습니다.
SublimeText에서 위와 같은 내용을 적어주시고 파일 이름을 README.md
로 정해주신 후, 저장해줍니다.
Git Bash에서 MathTool의 내부를 확인해보면 README 파일이 잘 추가된 것을 확인할 수 있습니다. 이 상태에서 git add를 하고 커밋까지 해줍니다.
git add .
git commit -m "Create README.md"
성공적으로 커밋이 완료되었습니다. 이렇게 로컬 레포지토리에서 새로운 커밋을 진행했는데요. 아직 리모트 레포지토리에는 이 내용이 반영되지 않았습니다.
로컬 레포지토리의 새로운 커밋을 리모트 레포지토리에 보내려면 git push
라는 작업을 해야 합니다. push는 '밀다, 밀어넣다'라는 뜻이 있죠? 이 커맨드는 로컬 레포지토리의 내용을 리모트 레포지토리에 반영하는 역할을 담당하고 있습니다.
git push
그럼 뭔가 전송되었다는 결과가 출력됩니다. GitHub에서 새로고침을 하면 위 내용을 확인할 수 있습니다.
새로 생성한 README 파일과 그 파일의 내용이 화면에 나옵니다. 사실 GitHub에서는 파일의 이름이 README일 경우, 그 파일의 내용을 바로 보여줍니다. 왜냐하면 일반적으로 프로젝트에 관한 내용을 README라는 파일에 담기 때문입니다.
정리하자면, 로컬 레포지토리에 새로운 커밋을 할 때마다 git push를 해야만 리모트 레포지토리에도 그 내용이 새롭게 반영됩니다. 따라서, 커밋 후에 git push를 잊지 말아주세요!
앞서 배운 로컬 레포지토리에서 리모트 레포지토리로 새로운 커밋 내용을 반영하는 것과 완전히 반대로 리모트 레포지토리에서 로컬 레포지토리로 새로운 커밋 내용을 반영할 수도 있습니다. 때로는 리모트 레포지토리가 로컬 레포지토리보다 최신 내용을 가지고 있을 수도 있습니다.
지금까지의 총 커밋 횟수는 세 번입니다. 이를 기억해두세요. GitHub에서 README 파일을 수정해보겠습니다. 우측의 연필 모양을 누르면 내용 수정이 가능합니다. 다음과 같이 입력해주세요.
그런 다음 아래의 커밋을 해야 하는데요. 그 전에 커밋 메시지에 Add the info of calculator.py in README.md
와 같이 입력해줍니다. 그 아래에는 좀 더 상세한 내용을 적을 수 있는데요. 지금은 생략하겠습니다. 커밋 버튼을 눌러주세요. 그럼 아까 세 번이었던 커밋이 네 번으로 바뀝니다.
이제 로컬 레포지토리에 이 내용을 반영해봅시다. git pull
이라는 커맨드를 사용하면 됩니다. pull은 push와 반대로 '잡아당기'다라는 뜻을 가지고 있죠? 이 커맨드는 리모트 레포지토리의 새로운 내용을 가져와서 로컬 레포지토리에 반영하는 역할을 합니다.
그럼 리모트 레포지토리의 내용이 로컬 레포지토리에 잘 반영되었는지 확인해볼까요? Git Bash에서 README 파일의 내용을 출력해봅시다.
cat README.md
추가한 내용이 로컬 레포지토리에도 잘 반영되었네요.
정리하자면, 리모트 레포지토리의 최신 내용을 로컬 레포지토리에 반영하기 위해서는 git pull 커맨드를 사용하면 됩니다.
그런데 여기서 잠깐! 로컬 레포지토리와 같은 내용의 리모트 레포지토리를 만드는 이유는 무엇일까요? 우선, 똑같은 레포지토리를 만들면 안전성을 확보할 수 있습니다. 예를 들어, 컴퓨터가 고장나서 로컬 레포지토리가 사라지면 이를 복원할 방법이 딱히 없습니다. 그런데 이와 같은 리모트 레포지토리가 있다면 그 내용을 불러오면서 복원할 수 있겠죠?
또한, 같은 리모트 레포지토리가 있으면 다른 개발자와의 협업이 용이해집니다. A 개발자의 코드를 B 개발자가 사용하고 싶으면 A 개발자의 리모트 레포지토리로부터 B 개발자의 로컬 레포지토리에 코드를 가져오면 됩니다. 그 다음 새로 커밋을 하면 리모트 레포지토리로 push하여 수정 사항을 반영할 수 있겠죠. 이는 A 개발자도 마찬가지입니다. 이런 식으로 리모트 레포지토리를 사이에 두고 다른 개발자와의 협업이 가능합니다.
이번 시간에는 GitHub의 첫 걸음을 떼었습니다. 레포지토리를 생성하고 로컬 레포지토리와 리모트 레포지토리 사이에 새로운 커밋 내용을 반영하는 방법에 대해서 배웠습니다. 외부 컴퓨터에 우리가 만든 코드들을 저장할 수 있다는 사실이 신기하지 않으신가요?
다음 시간에는 GitHub의 사용법에 대해 좀 더 알아보겠습니다.
* 이 자료는 CODEIT의 'Git으로 배우는 버전 관리' 강의를 기반으로 작성되었습니다.