최근 정보시스템의 개발에서 소스의 안전한 관리를 위해 Git과 Github는 필수적인 존재가 되었다. 하지만 대규모(?) 개발프로젝트를 경험해보지 않은 엔지니어나 컨설턴트는 SVN, Git 등에 대해 언급하지만 실제로 사용해본 적이 없거나 어떤 원리에 의해 프로젝트의 형상이 안전하게 관리되는지 제대로 이해하지 못하고 있는 경우가 많다.
그냥 “SVN과 Git 은 소스관리를 수행하는 형상관리 소프트웨어다” 라고 이해하고 경우가 많다.
나 또한 크게 다르지 않았다. 간간히 C나 Java, PHP 등을 통해 작은 CS기반 프로그램이나 웹페이지를 만드는 정도기 때문에 SVN이나 Git 을 사용해볼 일은 없었다.
그랬더니…. 궁금하다. 도대체 요즘 개발자들이 사용하는 SVN이나 Git이 어떻게 동작하고 사용하는 것인지 궁금했다. 그래서 테스트를 하고 그 과정을 포스팅한다. 나 처럼 SVN이나 Git이 어떤 시스템인지 궁금하다면 따라해보기 바란다.
Github 계정 및 리포지토리 만들기
이 포스트에서는 Git을 통해 형상관리를 체험하게 된다. 먼저 github에 계정을 생성해야 한다. github에 가입하기 싫다면 gitlab을 다운받아 우분투 등에 설치해야 한다. 그 과정은 더 복잡하다. 그냥 github에 계정을 생성할 것을 권한다.
github에 계정을 생성했다면 다음과 같이 리포지토리를 생성한다.
리포지토리(Repository)는 프로그램의 형상이 저장되는 저장소다. 로컬 리포지토리(개발PC)가 있고 원격 리포지토리(github.com 또는 git서버)가 있다.
여러 개발자가 github.com 또는 git서버의 원격(혹은 중앙) 리포지토리에 접속하여 개발자 로컬PC의 로컬 리포지토리로 클론(clone : 일종의 복제) 혹은 다운로드(download) 받아 개발 및 수정을 진행하게 된다.
리포지토리는 소스, 변경이력, 스냅샷 및 개발자에 의해 작성된 문서 등 모든 데이터가 저장되는 가장 기본적인 저장소다. 때문에 Github에서 생성할 수 있는 프로젝트(Project)와 혼동되는 경우가 많다. 여기서 그 이유까지 언급하기에는 부적절하기에 더 이상 언급하지 않겠다.
Github.com에 리포지토리를 생성할 때는 Public과 Private를 선택할 수 있는데 Public은 github.com의 모든 사용자에게 공개되는 리포지토리이고 Private는 생성한 개인에게만 공개되는 리포지토리다.
예전에는 Private 리포지토리를 생성하기 위해서는 유료과금이 있었다고 하는데 현재는 3명까지 공동작업이 가능하다고 한다. 편한 타입을 선택하면 된다.
위에서는 taeho 계정에 python 이라는 이름의 리포지토리를 생성하는 화면이다.
PC에 Git 설치하기
프로그램을 개발하는 PC(여기서는 Windows 10)에서 소스코드의 저장 및 버전 관리를 위해서는 PC에 Git Client를 설치해야 한다. 그리고 Git Client를 설치하면 github.com(혹은 Gitlab을 다운받아 자체적으로 구축한 Git서버)를 통해 여러 개발자가 공동으로 개발하는 소프트웨어의 소스에 대한 형상관리를 수행할 수 있다.
이곳에서 다운로드 받을 수 있다. (https://git-scm.com/downloads)
설치 파일을 다운로드 받은 뒤 설치를 진행한다.
설치는 매우 단순하다. 대부분 기본값으로 설치를 진행하면 되며 기본 소스코드 편집기만 주의하면 된다. 이 포스트에서는 Visual Studio Code를 사용하기 때문에 다음과 같이 편집기만 잘 선택해주면 된다.
편집기 이외에는 기본 옵션들을 선택하고 설치를 진행한다.
Git을 설치하고 난 뒤 반드시 해줘야 하는 작업이 있다. 바로 소스코드를 개발하는 개발자의 이름(아이디 등)과 이메일주소를 설정하는 것이다.
이 작업을 위해 다음과 같시 윈도의 검색창에서 Git를 검색하여 Git Bash를 실행한다.
Git Bash가 실행되면 다음과 같이 이메일 주소와 이름을 git config 명령을 이용해 설정해준다.
첫 파이썬 프로그램 작성
PC에 Git Client를 설치하고 Github에 Git Client와 연동할 리포지토리를 생성하였다면 이제 테스트 할 프로그램을 작성해야 한다. 프로그램은 파이썬으로 작성할 것이고 개발도구는 Visual Studio Code를 사용한다.
비주얼스튜디오코드의 설치 과정은 생략한다. 마이크로소프트에서 만든 비주얼스튜디오코드는 오픈소스 개발도구로서 매우 강력하고 직관적인 개발환경과 Git과의 완벽에 가까운 연동이 가능해 매우 인기가 높은 개발도구라고 한다.
여기에서 다운로드 받아 설치하면 된다. (https://code.visualstudio.com/Download)
다운로드 받고 설치했다면 VSCode(Visual Studio Code)를 실행한다.
처음 실행하면 아래와 비슷한 화면을 보여준다. 먼저 왼쪽의 파일 아이콘을 선택하고 “Open Folder…” 메뉴를 선택해 테스트 용 파이썬 코드를 작성할 파일이 저장될 폴더를 다음 화면과 같이 선택한다.
여기서는 E:\02.Git-Projects\python 이라는 폴더를 선택했다.
폴더를 선택하면 아래 화면처럼 PYTHON 이라는 트리(?)가 보이게 된다. 윈도에서는 ID나 파일명에 대소문자를 구분하지 않으므로 모두 대문자로 보여도 이상하게 생각하지 마라..!! 윈도는 유닉스나 리눅스와 다르다.!!
PYTHON 옆의 New File 아이콘을 클릭한다.
아래처럼 파일명을 입력하는 작은 창이 보인다. 파일명을 add1to100.py 라고 입력하면 아래 화면처럼 py 파일이 생성된다.
그렇다. 테스트에 사용할 파이썬 프로그램은 1부터100까지 더하고 그 결과를 보여주는 프로그램이다. 아래 화면처럼 소스코드를 입력한다. 오타는… 있어도 Git 테스트에는 관계 없다.
앞의 화면에서 파일의 확장자를 .py로 입력하면 자동으로 파이썬으로 인식하고 관련 VSCode의 모듈들을 설치하겠냐고 묻는다. 그냥 편하게 설치하면 다음과 같이 파이썬 런타임이 자동으로 설치되고 실행시켜 볼 수 있다. (혹시 에러가 나도 무시하면 된다.)
파이썬 프로그램을 작성하였으므로 Git Client를 이용해 로컬PC에서 버전관리를 수행해야 한다.
VSCode(Visual Studio Code) 와 Git 연동 및 로컬 리포지토리 초기화
다음 화면처럼 공유 아이콘을 클릭하면 “SOURCE CONTROL” 이라는 문구가 보이게 되는데… 아직 Git 연동을 하지 않았기 때문에 아무것도 보이지 않고 오른쪽에 + 표시만 보인다.
이 + 표시를 클릭하면 Git을 자동으로 인식해 python 이라는 리포지토리(리포지토리이름으로 워크스페이스 폴더명을 자동으로 사용함)와 경로를 보여준다. 그리고 다음 화면과 같이 이 항목을 선택하면 자동적으로 이 폴더를 Git에서 리포지토리로 사용하도록 초기화 해준다.
VSCode가 내부적으로 git init 명령을 실행해준다. git init이 수행되고 나면 다음과 같이 python 폴더에 생성되어 있는 add1to100.py 라는 파이선 소스코드를 자동으로 인식하고 리포지토리에 업데이트 되지 않은 새로운 파일임을 알려준다. (초록색 U)
다음 화면과 같이 초록색 U로 표시된 add1to100.py 파일을 클릭해보면 오른쪽 창이 둘로 나뉘면서 변경되기 전과 변경된 후를 보여준다.
변경되기 전은 리포지토리에 저장(마지막으로 Commit)된 내용인데.. 이 파일은 저장된 적이 한번도 없으므로 이전의 소스코드가 보이지 않는다. 또한 현재 Git에 의해 트래킹되고 있지 않으므로 “Untracked”라고 표시되어 있음을 알 수 있다.
이제 다음 화면과 같이 V 표시를 클릭해 add1to100.py 소스코드 파일을 Commit 한다.
Git은 개발자가 어떤 소스코드 파일이든 리포지토리에 새롭게 저장 즉 Commit 할 때 코멘트를 입력해야만 하도록 하고 있다. 어떤 내용을 수정했는지를 기록하게 하는 것이다.
다음 화면과 같이 메시지를 입력하고 엔터를 입력하면 Commit이 진행된다.
Commit 은 DBMS를 공부한 개발자라면 쉽게 이해하겠지만 간단히 설명하자면 임시로 수정된 내용을 영구히 적용한다는 의미다. 그리고 DBMS에서 DML문 실행 시 작업 내용을 트랜잭션로그에 기록하는 것과 유사하게 수정되기 전의 내용도 함게 기록한다.
Commit이 완료되면 다음 화면과 같이 변경내용 로컬 리포지토리에 저장되었고 현재는 리포지토리에 반영해야 할 변경된 내용이 없음을 0 이라는 숫자로 보여준다.
Git Client와 Github 연동하고 Push 하기
이제 Github에 푸시(Push)할 파이썬 프로그램을 로컬PC의 Git 리포지토리에 Commit 하였다. 다음 단계는 로컬PC의 리포지토리를 Github의 리포지토리와 연동해야 한다.
그러자면 앞에서 생성한 Github의 리포지토리 관련 정보를 확인해야 한다.
github.com에 접속해 앞에서 생성한 python 리포지토리로 들어가보면 다음과 같이 github 주소값을 확인할 수 있다.
이 단계에서 Git과 Github 또는 Gitlab을 이용해 자체 구축한 Git서버의 연동 시 보안문제가 발생할 수 있다는 것을 알 수 있다. HTTPS의 경우 Github 혹은 Git 서버의 ID와 비밀번호만 알면 접속이 가능해 ID/비밀번호 유출 시 소스의 유출 또한 발생할 수 있다는 것이다.
SSH 방식을 선택할 경우 사용자별 SSL 인증서를 반들고 공개키를 Git 서버와 Github에 적용하여 접속할 때 개인키가 있어야만 접속할 수 있도록 함으로써 어느정도 이 문제를 해결할 수 있다는 것도 알 수 있다.
어쨌든 여기서는 https에 해당하는 URL 주소와 python 이라는 리포지토리 이름만 기억하자.
다음은 탐색기를 실행해 add1to100.py 소스파일이 있는 폴더의 상위폴더에서 다음 화면과 같이 마우스 우클릭을 통해 “Git GUI Here” 메뉴를 클릭한다.
다음과 같이 Git GUI가 실행된다. 주목할 것은 타이틀바에 해당 리포지토리의 폴더명이 표시된다는 점이다. 반드시 폴더명이 정확하게 표시되어야 한다.
“Remote” 메뉴의 “Add…”를 클릭한다.
Git 서버 혹은 Github.com의 원격 리포지토리 정보를 입력하는 창이 보인다.
다음 화면과 같이 Name 에는 원격 리포지토리의 이름인 python 을, Location에는 원격 리포지토리의 HTTPS 주소를 입력하고 Add 버튼을 클릭한다.
잠시 원격 리포지토리에 접속하고 뭔가를 하는가 싶더니 “Success”라는 메시지가 보인다.
이제 로컬 리포지토리의 소스파일을 원격 리포지토리에 Push (업로드와 같음)하기 위해 “Remote” 메뉴의 “Push…” 메뉴를 클릭한다.
다음과 같이 Push 작업이 진행된다.
github.com에서 형상 확인하기
이렇게 gitbub 또는 git서버에 Push(업로드)된 데이터는 단순히 소스파일 뿐만 아니라 변경 이력도 상세하게 저장된다. github.com에서 python 리포지토리에 들어가보면 다음과 같이 로컬 리포지토리가 그대로 저장되어 있음을 알 수 있다.
현재 python 리포지토리에는 add1to100.py 파일 하나만 있음을 알 수 있고 3번의 Commit이 있었으며 브랜치는 1개, 즉 현재 브랜치인 master 만 있음을 알 수 있다.
3 commits 즉 3번의 commit 내역을 보려면 3 commits를 클릭하면 된다. 다음과 같이 commit 이력을 보여준다.
개발자 taeho 가 3번, 언제 commit 했는지 알 수 있고 commit 시 입력한 메시지도 보여준다. 현재 브랜치인 master 브랜치에 commit 되었음을 알 수 있다.
commit 된 소스는 어떤 내용인지도 확인할 수 있다. commit 내역 중 하나를 클릭하면 된다.
변경된 내역을 정확하게 보여준다.
#형상관리 #git #github